⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sprite.h

📁 BREW BREWwinz Application development APIs
💻 H
字号:
// Sprite.h: interface for the CSprite class.
//
// BREW Game Engine.
// Version: 1.0a
// (c)2003 anecia all rights reserved
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SPRITE_H__81251FF2_867C_4555_B865_DEB652575B61__INCLUDED_)
#define AFX_SPRITE_H__81251FF2_867C_4555_B865_DEB652575B61__INCLUDED_

#ifdef WIN32
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#endif // WIN32

#include "jobject.h"
#include "ImageManager.h"
#include "sprfunc.h"

// Sprite Temp Data
#define JIN_MAX_SPR_TEMP_INT	20
#define JIN_MAX_ACTION_KIND		20

typedef struct _FRAMEDATA
{
	LPJINIMAGE	lpImageData;

	WORD		wSrcX;			// 弊妨临 盔夯 x困摹 
	WORD		wSrcY;			// 弊妨临 盔夯 y困摹
	WORD		wWidth;			// 弊妨临 承捞
	WORD		wHeight;		// 弊妨临 臭捞

	int			nDelay;

	JRECT		weaknessRect;
	JRECT		attackRect;

    int	        nDistanceX;		// (Left, Top) 谅钎肺何磐 冻绢柳 芭府(x谅钎)
    int	        nDistanceY;		// (Left, Top) 谅钎肺何磐 冻绢柳 芭府(y谅钎)
} FRAMEDATA, FAR* LPFRAMEDATA;

LPFRAMEDATA CreateFrame(LPJINIMAGE lpImageData, 
						WORD wSrcX, WORD wSrcY, WORD wWidth, WORD wHeight, int nDelay,
						JRECT weaknessRect, JRECT attackRect,
						int nDistanceX, int nDistanceY, BOOL bCenterDistance);

//class CMyApp;
class CSprite : public CJObject
{
public:
	static BOOL DrawImage(IDisplay* lpIDisplay, void* lpBLZ, const char* szResFileName, byte* lpPalette, uint16 unResID,
					int nX, int nY, AEERasterOp dwRASOp);

	static void DrawImage(IDisplay* lpIDisplay, LPJINIMAGE lpImageData, 
					int nX, int nY, AEERasterOp dwRASOp);

public:
	CSprite(IDisplay* lpIDisplay, LPJRECT m_lpViewPortRect, LPJRECT lpClipRect);
	virtual ~CSprite();

	void Release();

    void Hide();
	void Show();
	BOOL IsShow() { return m_bShow; }

	void SetX(int nNewX);
	void SetY(int nNewY);
	void StepX(int nStepX);
	void StepY(int nStepY);
	void SetCenter(int nCenterX, int nCenterY);
	void SetHotSpotToCenter(int nCenterX, int nCenterY);
	void SetHotSpotToCenter();
	void SetDistanceX(int nNewDistanceX);
	void SetDistanceY(int nNewDistanceY);
	void UpdateXYByHotSpot(int nHotSpotX, int nHotSpotY);
	void UpdateXYByHotSpot();

	BOOL SetImage(LPJINIMAGE lpImageData, WORD wSrcX, WORD wSrcY, WORD wWidth, WORD wHeight,
						int nDelay, JRECT weaknessRect, JRECT attackRect,
						int nDistanceX, int nDistanceY, BOOL bCenterDistance);
	BOOL SetImage(LPJINIMAGE lpImageData);

	/* Not use...
	void SetFuncIndex(int nIndex);
	int	 GetFuncIndex();
	*/
	void SetFunction(ObjectHandleFunction lpFunc);
	ObjectHandleFunction GetFunction();

	void Put();
	void Put(int nX, int nY);
	void Put2(int nHotSpotX, int nHotSpotY); // by HotSpot
	void Put3(int nDistanceX, int nDistanceY); // by Distance
	void Draw(int nX, int nY, AEERasterOp dwRASOp);
	void FillColor(IDisplay* lpIDisplay, RGBVAL clrFill);
	static void FillColor(CSprite* lpSprObj, RGBVAL rgb, JRECT fillArea);

	BOOL Collision(int nX, int nY, int nExt = 0);
	BOOL Collision(CSprite* pSpr, int nExt = 0);
	BOOL Collision(LPJRECT lpRect, int nExt = 0);
	BOOL Collision(int nX1, int nY1, int nX2, int nY2);
	BOOL Collision2(int nX, int nY, int nExtX = 0, int nExtY = 0);
	BOOL Collision2(CSprite* pSpr, int nExtX = 0, int nExtY = 0);
	BOOL Collision2(LPJRECT lpRect, int nExtX = 0, int nExtY = 0);
	BOOL IsDamage(CSprite* lpSpr);

	void Update(DWORD dwDt);

	LPJINLIST CreateAction(uint16 unKindNo);
	BOOL AddFrame(uint16 unKindNo, LPFRAMEDATA lpActionData);

	BOOL InsertFrame(uint16 unKindNo, LPFRAMEDATA lpActionData, uint16 unWhere);
	BOOL DeleteFrame(uint16 unKindNo, uint16 unWhere);
	BOOL DeleteHeadFrame(uint16 unKindNo);
	BOOL DeleteTailFrame(uint16 unKindNo);
	BOOL SetFrameNo(uint16 unFrameNo);
	void SetNextFrame();
	void SetPrevFrame();
	BOOL SetAction(uint16 unActionKindNo, uint16 unStartFrameNo = 1, BOOL bDelayNew = TRUE);
	void ActionOn() { m_bAction = TRUE; }
	void ActionOff() { m_bAction = FALSE; }
	void ActionLoopOn() { m_bActionLoop = TRUE; }
	void ActionLoopOff() { m_bActionLoop = FALSE; }
	void Action(DWORD dwDt);

	BOOL SetImage(uint16 unKindNo, LPJINIMAGE lpImageData, uint16 unWhere);

	BOOL SetImage(uint16 unKindNo, LPJINIMAGE lpImageData, uint16 unWhere, 
					uint16 unSrcX, uint16 unSrcY, uint16 unWidth, uint16 unHeight,
					int nDelay, JRECT weaknessRect, JRECT attackRect,
					int nDistanceX, int nDistanceY, BOOL bCenterDistance);

	void SetClipRect(LPJRECT lpClipRect);
	void SetViewPort(LPJRECT lpViewPortRect);
	int	 CallFunction(void* lpParam, DWORD dwDt);
	ObjectHandleFunction GetCallFunction() const;

	// Zoom: BREW can't use float data, so maybe not proportion.
	int  GetZoom();
	void SetZoom(int nZoom);

	uint16 GetCurrFrameNo();
	uint16 GetCurrActionKindNo();
	LPJINIMAGE GetCurrImageData();
	LPFRAMEDATA	GetCurrFrameData();

	static void DrawBackground(CSprite* lpSprObj, LPJBMP lpBackGround);
	static void DrawBackground(CSprite* lpSprObj, LPJBMP lpBackGround,
								int nViewOrgX, int nViewOrgY,
								int nImageSrcPosX, int nImageSrcPosY,
								int nWidth, int nHeight);
public:
    int         m_nTemp[JIN_MAX_SPR_TEMP_INT];
	CSprite*	m_lpParentSpr;
	BOOL		m_bActionOffOrEnd;

	int			m_nHotSpotX;
	int			m_nHotSpotY;
	int			m_nDistanceX;
	int			m_nDistanceY;
	DWORD		m_dwDelay;
	DWORD		m_dwCurrDelay;
	BOOL		m_bActionLoop;

	JRECT		m_clipRect;
	LPJRECT		m_lpViewPortRect; // reference pointer!

	int         m_nY;
	int         m_nX;

	DWORD		m_dwDt;
//	int			m_uchColorKey; not use yet.

private:
//	CMyApp*		m_lpMyApp;
	IDisplay*	m_lpIDisplay;
	int			m_nZoom;
	BOOL		m_bAction;
	uint16      m_unMaxFrame;
    uint16      m_unCurrFrameNo;
	uint16		m_unCurrActionKindNo;
	BOOL		m_bShow;
	int         m_nFuncIndex;
	LPFRAMEDATA	m_lpFrameData;
	// LPJINIMAGE	m_lpImageData; old version!

	ObjectHandleFunction	m_lpfnObjFunc;
	LPJINLIST	m_lpCurrAction;
	LPJINLIST	m_arlpListAction[JIN_MAX_ACTION_KIND];
};
typedef CSprite FAR* LPSPRITE;

#endif // !defined(AFX_SPRITE_H__81251FF2_867C_4555_B865_DEB652575B61__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -