SBSPSS/source/thing/thing.h
2001-02-26 20:42:25 +00:00

162 lines
3.3 KiB
C++

/*=========================================================================
thing.h
Author: PKG
Created:
Project: Spongebob
Purpose:
Copyright (c) 2001 Climax Development Ltd
===========================================================================*/
#ifndef __THING_THING_H__
#define __THING_THING_H__
/*----------------------------------------------------------------------
Includes
-------- */
#ifndef _GLOBAL_HEADER_
#include "system\global.h"
#endif
#ifndef __GAME_EVENT_H__
#include "game\event.h"
#endif
/* Std Lib
------- */
/*----------------------------------------------------------------------
Tyepdefs && Defines
------------------- */
/*----------------------------------------------------------------------
Structure defintions
-------------------- */
// Thing manager class
class CThingManager
{
public:
static void init();
static void shutdown();
static void thinkAllThings(int _frames);
static void renderAllThings();
static void processEventAllThings(GAME_EVENT _event,class CThing *_sourceThing);
protected:
static void addToThingList(class CThing *_this);
static void removeFromThingList(CThing *_this);
friend class CThing;
private:
static class CThing *s_thingLists[];
static int s_initialised;
};
// Base thing class
class CThing
{
public:
typedef enum
{
TYPE_THING, // temp.. (pkg)
TYPE_PICKUP,
TYPE_PLAYER,
TYPE_ENEMY,
MAX_TYPE,
}
TYPE;
CThing() {;}
virtual ~CThing() {;}
virtual TYPE getThingType() {return TYPE_THING;} //=0; (pkg)
virtual void init();
virtual void shutdown();
virtual void think(int _frames);
virtual void render();
// Linkage
void addChild(CThing *Child);
void removeChild(CThing *Child);
void removeAllChild();
DVECTOR getPos() {return Pos;}
virtual void processEvent(GAME_EVENT _event,CThing *_sourceThing);
protected:
// Linkage
CThing *Parent,*Next;
// Pos
DVECTOR Pos, PosDelta;
// Big linked list that contains all CThings ( possibly a temp measure PKG )
// static CThing *s_thingList;
public:
class CThing *m_nextThing;
// -- Collision --
public:
DVECTOR getCollisionSize() {return m_collisionSize;}
virtual int checkCollisionAgainst(CThing *_thisThing);
void updateCollisionArea();
virtual void collidedWith(CThing *_thisThing) {;} //=0; (pkg)
protected:
typedef struct
{
int x1,y1,x2,y2;
}
CRECT;
void setCollisionSize(int _w,int _h);
void setCollisionCentreOffset(int _x,int _y) {m_collisionCentreOffset.vx=_x;m_collisionCentreOffset.vy=_y;}
void setCollisionCentreOffset(DVECTOR xy) {m_collisionCentreOffset=xy;}
int getCollisionRadius() {return m_collisionRadius;}
CRECT getCollisionArea() {return m_collisionArea;}
DVECTOR getCollisionCentre() {return m_collisionCentre;}
private:
DVECTOR m_collisionSize;
DVECTOR m_collisionCentreOffset;
int m_collisionRadius;
CRECT m_collisionArea;
DVECTOR m_collisionCentre;
};
/*----------------------------------------------------------------------
Globals
------- */
/*----------------------------------------------------------------------
Functions
--------- */
/*---------------------------------------------------------------------- */
#endif /* __THING_THING_H__ */
/*===========================================================================
end */