MessageDispatcher.h
lets say you have an Entity base class that all your entities enherit from.
Code: Select all
class Entitiy
{
public:
virtual ~Entity(void){}
};
class Player : public Entity
{
public:
protected:
int Health;
};
Code: Select all
...
Entity* entity = getCollisionEntity();
DamageMessage damage;
damage.Damage = 20;
damage.Type = 1;
entity->send(&damage);
...
ok here is how this can work:
Code: Select all
#include "MessageDispatcher.h"
class Entity : public MessageDispatcher
{
public:
virtual ~Entity(void){}
};
struct DamageMessage : Message
{
int Damage;
int Type;
};
struct HealMessage : Message
{
int Heal;
};
class Player : public Entity, public Subscriber_2<DamageMessage, HealMessage>
{
public:
Player(void)
{
this->Bind(this);
}
void receiveMessage(DamageMessage* message)
{
printf("Received %i damage of Type %i\n", message->Damage, message->Type);
Health -= message->Damage;
}
void receiveMessage(HealMessage* message)
{
printf("Received %i health\n", message->Heal, message->Type);
Health += message->Heal;
}
protected:
int Health;
};
int main(void)
{
Entity* p = new Player();
DamageMessage damage;
damage.Damage = 20;
damage.Type = 1;
p->send(&damage);
HealMessage heal;
heal.Heal = 10;
p->send(&heal);
delete p;
}