arsa  2.7
cdxmotion.h
Go to the documentation of this file.
1 // CDXMotion.h: interface for the CDXMotion class.
2 //
4 
5 #if !defined(AFX_CDXMOTION_H__B1AFC48A_B370_4EBC_B815_8F3A2EB0DE28__INCLUDED_)
6 #define AFX_CDXMOTION_H__B1AFC48A_B370_4EBC_B815_8F3A2EB0DE28__INCLUDED_
7 
8 #if _MSC_VER > 1000
9 #pragma once
10 #endif // _MSC_VER > 1000
11 
12 // push avoid dll warning
13 #ifdef __WIN32__
14 #pragma warning( push )
15 #pragma warning( disable: 4251 )
16 #endif
17 
18 //#include "cdx.h"
19 #include "cdxsprite.h"
20 #include "gamebasetype.h"
21 #include "ctimer.h"
22 //#include "cdxspritepool.h"
23 
25 class CDXMotion;
26 
29 typedef void CB_CDXMOTION_CHANGED_FRAME(CDXMotion* motion, int old_frame, int current_frame);
30 
33 
41 #define BBOX_MAX 2
42 #define CONTEXT 0
43 #define ATTACK 1
44 
45 struct BBoxInfo
46 {
48  {
49  Type = CONTEXT;
50  }
51 
52  irr::core::stringc getTypeStr() const { return Type == CONTEXT ? "CONTEXT" : "ATTACK"; };
53 
64 };
65 
66 struct COLLISION
67 {
69  {
70  SLeft = true;
71  STop = true;
72  SRight = true;
73  SBottom = true;
74  SWO = 0;
75  ActorInfo = 0;
76  Motion = 0;
77  Time = 0;
78  }
79 
84  bool SLeft,
85  STop,
86  SRight,
87  SBottom;
89  void* SWO;
91  void* ActorInfo;
93  void* Motion;
95  int Time;
96 };
97 
98 typedef struct COLLISION* PCOLLISION;
99 
100 //struct FrameBBoxInfo
101 //{
102 // irr::core::array<BBoxInfo> BBox; // bounding box
103 // //BYTE Length; // length of bounding box each motion
104 //}
105 
107 {
109  {
110  Sprite = 0;
111  //Num = 0;
112  }
113 
117  //int Num; //! number of sprite
119  //bool KillSprite; //! kill sprite in this class / default is true
120 
129 };
130 
131 // call back function
132 //typedef bool CBSWOCOLLISION( void*, void*, BYTE, BYTE, PCOLLISION );
133 //typedef CBSWOCOLLISION *PCBSWOCOLLISION;
134 
136 {
137 public:
138  CDXMotion();
139  virtual ~CDXMotion();
140 
148  //virtual bool Create( CDXScreen *Screen, CDXSpritePool *SPool, World* world, const char* SMName, void* Data = 0, void* actor = 0, bool usepath = true, bool hflip = true );
149  virtual bool CreateByScript( const char* SMName, void* Data = 0, void* actor = 0, bool usepath = true, bool hflip = true);
150  virtual bool SaveXML( irr::core::stringc& out_stream );
151  virtual bool LoadXML( const irr::core::stringc& in_stream, const irr::io::path& folder = irr::io::path() );
152 
153  /* !
154  //===========================//
155  // use manual add sprite, MUST call AddSprite later
156  //===========================//
157  */
158  //virtual bool Create(CDXScreen *Screen, CDXSpritePool *SPool, World* world, int Frame, void* Data = 0, void* actor = 0, float Life = 0.0f, bool path = true);
159  virtual bool Create( void* Data = 0, void* actor = 0, float Life = 0.0f, bool path = true);
160  virtual bool Update( bool readevent = true );
161  virtual void Draw( CDXSurface* dest = 0, PRECT Rect = 0, bool CheckScreen = 1, CDX_Color* pal = 0, bool mem_alloc = false );
162  //virtual void Draw( PRECT Rect = 0, bool CheckScreen = 1, CDX_Color* pal = 0, bool mem_alloc = false);
163  virtual void Destroy( void );
164  virtual bool isOk() const { return !m_SpriteList.empty() ? true : false; }
165  virtual void Pause(void);
166  virtual void Run(void);
167 
169  virtual int AddSprite( const char* ObjName, int cx, int cy, bool hflip = true );
170  virtual int AddSprite( int w, int h, int bpp, DWORD flags, int cx, int cy, CDXSurface* src = 0 );
171  virtual MotionInfo* GetMotionInfo( int Frame );
172  virtual MotionInfo* GetMotionInfoByActive( void );
173  virtual CDXSprite* GetSprite( int Frame );
174  virtual int GetWidth( int Frame );
175  virtual int GetHeight( int Frame );
176  virtual bool GetCenterX( int Frame, int* cx );
177  virtual bool GetCenterY( int Frame, int* cy );
178 
179  virtual bool InsertEvent( int Frame, const char* Event );
180  virtual bool DeleteEvent( int Frame );
181  virtual const char* GetEvent( int Frame );
187  virtual void AddPosX( int x );
188  virtual void AddPosY( int y );
189  virtual void AddPos( int x, int y );
190  virtual void AddPos( POINT pos );
191  virtual void SetPosX( int x );
192  virtual void SetPosY( int y );
193  virtual void SetPos( int x, int y );
194  virtual void SetPos( POINT pos );
195  virtual bool CalcPos( int frame, long* x, long* y );
196  virtual bool CalcPos( int frame, PPOINT Pos );
197  virtual void UpdatePos();
198 
204  virtual bool CreateColl( void );
205  virtual bool DestroyColl( void );
206  virtual bool AddColl( void* Data );
207  virtual bool RemoveAllColl( void );
208  virtual bool GetColl( void* Data );
209 
215  virtual void SetColor(const irr::video::SColor& color);
216  virtual CDX_Color GetColor() const;
217  virtual void SetMotionSpeed( float Speed );
218  virtual void SetMotionSpeedByFrame( float Speed, int Frame );
219  virtual void SetAlpha( WORD AlphaValue );
220  virtual void SetHFlip( void );
221  virtual void SetVFlip( void );
222  virtual void SetVHFlip( void );
223  virtual void SetShadow( bool Enable, const CDX_Color& color = CDX_Color(255,1,1,1) );
224  virtual void SetTrans( void );
225  virtual void SetScale( float Scale );
226  virtual void SetUserData( void* Data );
227  virtual void SetName( const char* Name );
228  virtual void SetFrame( int Frame );
229  virtual void SetFrameReset( void );
230  virtual void SetBBoxShow( bool Show = 1 );
231  virtual void SetBBoxActive( bool Active = 1 );
232  virtual void SetFrameEnd( bool End ) { m_FrameEnd = End; }
233  virtual void SetWorldPos( int wx, int wy ) { m_WorldPos.x = wx; m_WorldPos.y = wy; }
234  virtual void SetWorldPos( const POINT& wpos ) { m_WorldPos = wpos; }
235  virtual void SetBltType( WORD BltType ) { m_BltType = BltType; }
236  virtual void setActor(void* actor) { m_Actor = actor; }
237 
243  virtual WORD GetAlpha( void ) const { return m_Alpha; }
244  virtual bool GetOutScreen( void );
245  virtual const char* GetName( void );
246  virtual void* GetUserData( void );
247  virtual int GetFrame( void ) const { return m_FrameCurrent; } // get current motion frame
248  //virtual int GetFrameMax( void ) const { return m_FrameMax; } // get maximum motion frame
249  virtual irr::u32 GetFrameMax(void) const { return m_SpriteList.size(); } // get maximum motion frame
250  virtual bool GetFrameEnd( void ); // get end motion frame
251  virtual POINT GetPos( void ) const { return m_Pos; } // get current position
252  virtual long GetPosX( void ) const { return m_Pos.x; } // get current X position
253  virtual long GetPosY( void ) const { return m_Pos.y; } // get current Y position
254  virtual WORD GetBltType( void ) const { return m_BltType; }
255  virtual bool GetBBoxShow( void ) const { return m_BBoxShow; }
256  virtual POINT GetWorldPos( void ) const { return m_WorldPos; }
257  virtual long GetWorldPosX( void ) const { return m_WorldPos.x; }
258  virtual long GetWorldPosY( void ) const { return m_WorldPos.y; }
259  //virtual void* GetWorld( void ) const { return m_World; }
260  virtual float GetAllMotionTime( void );
261  virtual float GetLeftMotionTime( void );
262  virtual float GetMotionSpeedByFrame( int Frame );
263  virtual bool GetShadowEnable( void ) const { return m_Shadow; }
264  virtual float GetSpeedByFrame( int Frame );
265  virtual bool GetBBoxActive( void ) const { return m_BBoxActive; }
266  virtual irr::core::array<MotionInfo*>& GetList(void) { return m_SpriteList; }
267  //virtual irr::core::array<irr::core::array<FrameBBoxInfo>>& GetBBox(void) { return m_FrameBBox; }
268  //virtual irr::core::array<LIFETIMEINFO>& GetSpeed(void) { return m_SpeedTime; }
269  virtual const irr::core::array<MotionInfo*>& GetList(void) const { return m_SpriteList; }
270  //virtual const irr::core::array<irr::core::array<FrameBBoxInfo>>& GetBBox(void) const { return m_FrameBBox; }
271  //virtual const irr::core::array<LIFETIMEINFO>& GetSpeed(void) const { return m_SpeedTime; }
272  virtual void* getUserData() const { return m_UserData; }
273  virtual void* getActor() const { return m_Actor; }
274 
280  virtual void AddFrameBBox( BYTE Frame, BYTE Type, BYTE Length );
281  virtual void AddBBoxData( BYTE Frame, BYTE Type, BYTE Num, int x, int y, int x2, int y2, const char* EventString );
282  virtual void AddBBoxDataAll( BYTE Type, BYTE Num, int x, int y, int x2, int y2, const char* EventString );
283  virtual bool GetBBoxData( BYTE Frame, BYTE Type, BYTE Num, BBoxInfo* Data );
284  virtual bool GetBBoxPos( BYTE Frame, BYTE Type, BYTE Num, WORD BltTYpe, RECT* Data );
285  virtual bool MotionCollision( CDXMotion* pMotion, BYTE Type, BYTE CheckWithType, PCOLLISION Col );
286  virtual bool MotionCollisionAllFrame( CDXMotion* pMotion, BYTE Type, BYTE CheckWithType, PCOLLISION Col );
287  virtual bool RectCollision( const PRECT Box1, const PRECT Box2, PCOLLISION Col );
288  virtual bool RectCollision( const PRECT Box1, BYTE Type, PCOLLISION Col );
289 
295  //virtual void SetLoopTime( int time ) { m_LoopTime = time; if( m_LoopTime > 1 ) m_Looping = 1; }
296  virtual void SetLoopEnable(bool enable) { m_Looping = enable?1:0; }
297  virtual void SetLoopTime(int time) { m_LoopTime = time; SetLoopEnable(true); }
298  virtual void SetLoopStart( int start ) { m_LoopStart = start; }
299  virtual void SetLoopEnd( int end ) { m_LoopEnd = end; }
300  virtual void SetLoopReset(void) { if (GetLoopTime() > 1) SetLoopEnable(true); m_LoopCount = 0; }
301  virtual int GetLoopTime( void ) const { return m_LoopTime; }
302  virtual int GetLoopStart( void )const { return m_LoopStart; }
303  virtual int GetLoopEnd( void ) const { return m_LoopEnd; }
304  virtual void SetLoop(bool loop) { m_Loop = loop; }
305  virtual bool IsLoop() const { return m_Loop; }
306 
312  virtual CDXMotion* clone( void ); // MUST delete
313  virtual void clone(CDXMotion* dest);
314 
315  virtual void saveCache(void);
316 
317  virtual void SetOrder(irr::u32 order) { m_Order = order; }
318  virtual irr::u32 GetOrder() const { return m_Order; }
319 
320 private:
321  //CDXScreen* m_Screen; // ref only
322  //CDXSpritePool* m_SPool; // ref only, sprite pool
323  //World* m_World; // ref only
324  bool m_FrameEnd;
325  //int m_FrameMax; //! motion max frame
326  int m_FrameCurrent;
327  int m_OldFrame;
328  //DWORD* m_SpeedMax;
329  void* m_UserData;
330  void* m_Actor;
331  WORD m_BltType;
332  irr::core::stringc m_Name;
333  bool m_BBoxShow;
334  bool m_BBoxActive;
335  //bool m_UsePath;
336  // alpha and shadow
337  WORD m_Alpha;
338  bool m_Shadow;
339  CDX_Color m_ShadowColor;
340 
341  //POINT m_CenterPos; //! center position of sprite
342  POINT m_Pos;
343  POINT m_AbsPos;
344  POINT m_WorldPos;
345  irr::core::array<MotionInfo*> m_SpriteList;
346  irr::core::array<void*> m_Colled;
347  //irr::core::array<irr::core::array<FrameBBoxInfo>> m_FrameBBox;
348  //irr::core::array<LIFETIMEINFO> m_SpeedTime;// motion speed each frame life time
349  CGameTimer m_MotionTime;
350 
351  // loop
352  int m_LoopTime,
353  m_LoopStart,
354  m_LoopEnd,
355  m_LoopCount,
356  m_Looping;
357 
358  bool m_Loop;
359 
361  BYTE m_TempFrame;
362  //BYTE m_TempBBFrame;
363  irr::core::stringc m_TempType;
364 
365  irr::u32 m_Order;
366 
367  //============================//
368  // private function
369  //============================//
371  void DrawCross( void );
372 
374  bool VFile_ReadScript( const char* Name, bool hflip = true );
375  void VFile_CheckScript(const char* Name, const irr::core::stringc& str_code, bool hflip = true );
376 
377  void init();
378 };
379 
380 // pop avoid dll warning
381 #ifdef __WIN32__
382 #pragma warning( pop )
383 #endif
384 
385 #endif // !defined(AFX_CDXMOTION_H__B1AFC48A_B370_4EBC_B815_8F3A2EB0DE28__INCLUDED_)
virtual long GetPosY(void) const
Definition: cdxmotion.h:253
virtual const irr::core::array< MotionInfo * > & GetList(void) const
Definition: cdxmotion.h:269
void * ActorInfo
game actor info
Definition: cdxmotion.h:91
virtual void SetBltType(WORD BltType)
Definition: cdxmotion.h:235
virtual void SetWorldPos(const POINT &wpos)
Definition: cdxmotion.h:234
Definition: cdx.h:106
virtual bool GetBBoxActive(void) const
Definition: cdxmotion.h:265
BBoxInfo HittyData
Definition: cdxmotion.h:82
POINT CenterPos
center position of sprite
Definition: cdxmotion.h:63
virtual void SetWorldPos(int wx, int wy)
Definition: cdxmotion.h:233
CDX_Color Color
box color, red = ATTACK, blue = CONTEXT
Definition: cdxmotion.h:61
BBoxInfo()
Definition: cdxmotion.h:47
ARSA_API void ARSACALLCONV CDXMOTION_SET_CHANGE_FRAME(CB_CDXMOTION_CHANGED_FRAME *func)
call in update when readevent = true
void * SWO
static world object
Definition: cdxmotion.h:89
GLuint GLuint end
Definition: SDL_opengl.h:1571
GLfloat GLfloat GLfloat GLfloat h
virtual bool isOk() const
Definition: cdxmotion.h:164
GLfixed GLfixed GLfixed y2
virtual void SetFrameEnd(bool End)
Definition: cdxmotion.h:232
virtual void SetLoopTime(int time)
Definition: cdxmotion.h:297
virtual long GetWorldPosX(void) const
Definition: cdxmotion.h:257
void CB_CDXMOTION_CHANGED_FRAME(CDXMotion *motion, int old_frame, int current_frame)
Definition: cdxmotion.h:29
virtual bool GetShadowEnable(void) const
Definition: cdxmotion.h:263
GLuint start
Definition: SDL_opengl.h:1571
virtual void SetLoopStart(int start)
Definition: cdxmotion.h:298
bool STop
Definition: cdxmotion.h:84
GLfixed GLfixed GLint GLint order
#define CDX_Color
2015_7_21 add type for cdx port
Definition: cdx.h:33
irr::core::stringc Event
event in box
Definition: cdxmotion.h:52
virtual void * getActor() const
Definition: cdxmotion.h:273
GLfixed GLfixed x2
virtual void * getUserData() const
Definition: cdxmotion.h:272
Very simple string class with some useful features.
Definition: irrString.h:37
virtual irr::u32 GetFrameMax(void) const
Definition: cdxmotion.h:249
virtual long GetWorldPosY(void) const
Definition: cdxmotion.h:258
virtual irr::u32 GetOrder() const
Definition: cdxmotion.h:318
BBoxInfo HiterData
Definition: cdxmotion.h:81
#define BYTE
Definition: cdx.h:156
#define CDXSurface
Definition: cdx.h:34
virtual void SetLoop(bool loop)
Definition: cdxmotion.h:304
GLfloat f
unsigned int u32
32 bit unsigned variable.
Definition: irrTypes.h:62
LIFETIMEINFO SpeedTime
Definition: cdxmotion.h:128
virtual void SetLoopReset(void)
Definition: cdxmotion.h:300
virtual bool GetBBoxShow(void) const
Definition: cdxmotion.h:255
virtual irr::core::array< MotionInfo * > & GetList(void)
Definition: cdxmotion.h:266
irr::core::array< irr::core::array< BBoxInfo > > BBox
event string
Definition: cdxmotion.h:127
void * Motion
motion hitter use for ActorM collision update -> CUpdate()
Definition: cdxmotion.h:93
bool SLeft
side hit
Definition: cdxmotion.h:84
virtual int GetFrame(void) const
Definition: cdxmotion.h:247
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
virtual void SetOrder(irr::u32 order)
Definition: cdxmotion.h:317
RECT Box
size of box
Definition: cdxmotion.h:59
virtual void SetLoopEnd(int end)
Definition: cdxmotion.h:299
virtual long GetPosX(void) const
Definition: cdxmotion.h:252
virtual bool IsLoop() const
Definition: cdxmotion.h:305
Class representing a 32 bit ARGB color.
Definition: SColor.h:316
bool SRight
Definition: cdxmotion.h:84
virtual WORD GetAlpha(void) const
Definition: cdxmotion.h:243
GLboolean enable
POINT CenterPos
sprite width & height
Definition: cdxmotion.h:116
Self reallocating template array (like stl vector) with additional features.
Definition: irrArray.h:22
GLenum func
virtual int GetLoopEnd(void) const
Definition: cdxmotion.h:303
#define ARSA_API
virtual POINT GetPos(void) const
Definition: cdxmotion.h:251
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
bool SBottom
Definition: cdxmotion.h:84
GLuint color
struct COLLISION * PCOLLISION
Definition: cdxmotion.h:98
int Time
time to attack frame
Definition: cdxmotion.h:95
virtual int GetLoopStart(void) const
Definition: cdxmotion.h:302
virtual WORD GetBltType(void) const
Definition: cdxmotion.h:254
POINT SpriteSize
cdxsprite object
Definition: cdxmotion.h:115
#define WORD
Definition: cdx.h:158
GLbitfield flags
COLLISION()
Definition: cdxmotion.h:68
Definition: cdx.h:122
irr::core::stringc getTypeStr() const
Definition: cdxmotion.h:52
GLsizei const GLchar *const * path
#define CONTEXT
Definition: cdxmotion.h:42
GLubyte GLubyte GLubyte GLubyte w
virtual void setActor(void *actor)
Definition: cdxmotion.h:236
CDXSprite * Sprite
Definition: cdxmotion.h:114
virtual void SetLoopEnable(bool enable)
Definition: cdxmotion.h:296
BYTE Type
type of box CONTEXT, ATTACK
Definition: cdxmotion.h:57
GLenum src
virtual POINT GetWorldPos(void) const
Definition: cdxmotion.h:256
virtual int GetLoopTime(void) const
Definition: cdxmotion.h:301
#define ARSACALLCONV
POINT HitPoint
Definition: cdxmotion.h:80
irr::core::stringc Event
center position of sprite
Definition: cdxmotion.h:118
#define DWORD
Definition: cdx.h:162