| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Here is the header for our behaviour layer. Here we define the behaviour layer and also the implementations of every behaviour.
#ifndef BEHAVE_H #define BEHAVE_H #include <physicallayer/pl.h> #include <behaviourlayer/bl.h> #include <behaviourlayer/behave.h> #include <propclass/actormove.h> #include <propclass/meshsel.h> #include <propclass/mesh.h> #include <propclass/camera.h> #include <propclass/inv.h> |
BehaviourLayer is our behaviour layer. It is a simple class that
will create the right behaviour depending on the given name.
class BehaviourLayer : public iCelBlLayer
{
private:
iCelPlLayer* pl;
public:
BehaviourLayer (iCelPlLayer* pl);
virtual ~BehaviourLayer ();
SCF_DECLARE_IBASE;
virtual const char* GetName () const
{
return "behaviourlayer";
}
virtual iCelBehaviour* CreateBehaviour (iCelEntity* entity, const char* name);
};
|
BehaviourCommon is the common superclass for all our behaviours. It
takes care of overriding the standard SendMessage() routine and
to replace it with a version that uses an ID instead of a string. That
is faster.
class BehaviourCommon : public iCelBehaviour
{
protected:
iCelEntity* entity;
BehaviourLayer* bl;
iCelPlLayer* pl;
public:
BehaviourCommon (iCelEntity* entity, BehaviourLayer* bl, iCelPlLayer* pl);
virtual ~BehaviourCommon ();
/**
* This is a specific version of SendMessage() that accepts
* an integer instead of a csStringID. Subclasses of ccBehaviourBase
* will only have to override this version. The normal iCelBehaviour
* versions of SendMessage() are implemented in this class and
* will redirect to this version.
*/
virtual bool SendMessage (csStringID msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
SCF_DECLARE_IBASE;
virtual iCelBlLayer* GetBehaviourLayer () const
{
return bl;
}
virtual bool SendMessage (const char* msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, ...);
virtual bool SendMessageV (const char* msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
virtual void* GetInternalObject ()
{
return 0;
}
};
|
The level behaviour doesn't do much.
class BehaviourLevel : public BehaviourCommon
{
public:
BehaviourLevel (iCelEntity* entity, BehaviourLayer* bl, iCelPlLayer* pl)
: BehaviourCommon (entity, bl, pl) { }
virtual ~BehaviourLevel () { }
virtual const char* GetName () const
{
return "level_behave";
}
virtual bool SendMessage (csStringID msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
};
|
This is the behaviour for a box. This behaviour will be used for entities in the `entities' file.
class BehaviourBox : public BehaviourCommon
{
private:
csStringID id_pcmeshsel_down;
void GetPlayer ();
csWeakRef<iPcMeshSelect> pcmeshsel;
iCelEntity* player;
void PickUp ();
public:
BehaviourBox (iCelEntity* entity, BehaviourLayer* bl, iCelPlLayer* pl);
virtual ~BehaviourBox () { }
virtual const char* GetName () const
{
return "box_behave";
}
virtual bool SendMessage (csStringID msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
};
|
Another behaviour used for entities in the `entities' file.
class BehaviourBadOne : public BehaviourCommon
{
private:
csStringID id_pctimer_wakeup;
csStringID id_par_elapsedticks;
csRef<csPath> path;
void ReadPath ();
void Restart ();
public:
BehaviourBadOne (iCelEntity* entity, BehaviourLayer* bl, iCelPlLayer* pl);
virtual ~BehaviourBadOne () { }
virtual const char* GetName () const
{
return "badone_behave";
}
virtual bool SendMessage (csStringID msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
};
|
And finally the behaviour for our player. This one takes care of matching commands from the `pccommandinput' property class to actual operations on `pcactormove'.
class BehaviourPlayer : public BehaviourCommon
{
private:
csStringID id_pccommandinput_forward1;
csStringID id_pccommandinput_forward0;
csStringID id_pccommandinput_backward1;
csStringID id_pccommandinput_backward0;
csStringID id_pccommandinput_rotateleft1;
csStringID id_pccommandinput_rotateleft0;
csStringID id_pccommandinput_rotateright1;
csStringID id_pccommandinput_rotateright0;
csStringID id_pccommandinput_cammode1;
csStringID id_pccommandinput_drop1;
csStringID id_pcinventory_addchild;
csStringID id_pcinventory_removechild;
void GetActorMove ();
csWeakRef<iPcActorMove> pcactormove;
void GetInventory ();
csWeakRef<iPcInventory> pcinventory;
void GetMesh ();
csWeakRef<iPcMesh> pcmesh;
void ShowInventory ();
void Drop ();
public:
BehaviourPlayer (iCelEntity* entity, BehaviourLayer* bl, iCelPlLayer* pl);
virtual ~BehaviourPlayer () { }
virtual const char* GetName () const
{
return "player_behave";
}
virtual bool SendMessage (csStringID msg_id,
iCelPropertyClass* pc,
celData& ret, iCelParameterBlock* params, va_list arg);
};
#endif
|
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] |
This document was generated using texi2html 1.76.