tge/engine/game/trigger.h
2017-04-17 06:17:10 -06:00

108 lines
2.6 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#ifndef _H_TRIGGER
#define _H_TRIGGER
#ifndef _PLATFORM_H_
#include "platform/platform.h"
#endif
#ifndef _GAMEBASE_H_
#include "game/gameBase.h"
#endif
#ifndef _MBOX_H_
#include "math/mBox.h"
#endif
#ifndef _EARLYOUTPOLYLIST_H_
#include "collision/earlyOutPolyList.h"
#endif
class Convex;
DefineConsoleType( TypeTriggerPolyhedron )
struct TriggerData: public GameBaseData {
typedef GameBaseData Parent;
public:
S32 tickPeriodMS;
TriggerData();
DECLARE_CONOBJECT(TriggerData);
bool onAdd();
static void initPersistFields();
virtual void packData (BitStream* stream);
virtual void unpackData(BitStream* stream);
};
class Trigger : public GameBase
{
typedef GameBase Parent;
Polyhedron mTriggerPolyhedron;
EarlyOutPolyList mClippedList;
Vector<GameBase*> mObjects;
TriggerData* mDataBlock;
U32 mLastThink;
U32 mCurrTick;
protected:
bool onAdd();
void onRemove();
void onDeleteNotify(SimObject*);
bool onNewDataBlock(GameBaseData* dptr);
void onEditorEnable();
void onEditorDisable();
bool testObject(GameBase* enter);
void processTick(const Move *move);
Convex* mConvexList;
void buildConvex(const Box3F& box, Convex* convex);
// Rendering
protected:
bool prepRenderImage ( SceneState *state, const U32 stateKey, const U32 startZone, const bool modifyBaseZoneState=false);
void renderObject ( SceneState *state, SceneRenderImage *image);
public:
void setTransform(const MatrixF &mat);
public:
Trigger();
~Trigger();
void setTriggerPolyhedron(const Polyhedron&);
void potentialEnterObject(GameBase*);
U32 getNumTriggeringObjects() const;
GameBase* getObject(const U32);
DECLARE_CONOBJECT(Trigger);
static void initPersistFields();
U32 packUpdate (NetConnection *conn, U32 mask, BitStream* stream);
void unpackUpdate(NetConnection *conn, BitStream* stream);
bool castRay(const Point3F &start, const Point3F &end, RayInfo* info);
};
inline U32 Trigger::getNumTriggeringObjects() const
{
return mObjects.size();
}
inline GameBase* Trigger::getObject(const U32 index)
{
AssertFatal(index < getNumTriggeringObjects(), "Error, out of range object index");
return mObjects[index];
}
#endif // _H_TRIGGER