Danbias/Code/Misc/EventHandler/EventButton.h

130 lines
2.7 KiB
C
Raw Normal View History

2014-01-31 14:29:29 +01:00
///////////////////////
// Sam Svensson 2013 //
///////////////////////
2014-01-31 15:38:12 +01:00
#ifndef MISC_EVENT_BUTTON_H
#define MISC_EVENT_BUTTON_H
2014-01-31 14:29:29 +01:00
#include "../../Input/L_inputClass.h"
namespace Oyster
{
namespace Event
{
2014-01-31 15:38:12 +01:00
template <typename owner>
class EventButton
2014-01-31 15:06:30 +01:00
{
public:
2014-01-31 15:38:12 +01:00
struct ButtonEvent
{
IEventButton::ButtonState state;
EventButton<owner> &sender;
owner owner;
};
2014-01-31 14:29:29 +01:00
struct PrivData
{
static unsigned int currID;
unsigned int ID;
owner owner;
2014-01-31 14:29:29 +01:00
void (*EventFunc)( ButtonEvent e );
};
PrivData privData;
public:
EventButton();
EventButton(owner owner);
2014-01-31 14:29:29 +01:00
EventButton(void (*EventFunc)( ButtonEvent e));
EventButton(void (*EventFunc)( ButtonEvent e), owner owner);
2014-01-31 14:29:29 +01:00
~EventButton();
2014-01-31 15:38:12 +01:00
void CheckCollision(InputClass *input);
2014-01-31 14:29:29 +01:00
void SendEvent(IEventButton::ButtonState state);
2014-01-31 14:29:29 +01:00
void SetEventFunc(void (*EventFunc)( ButtonEvent e )); //?
unsigned int GetID();
};
template <typename owner>
unsigned int EventButton<owner>::PrivData::currID = 0;
2014-01-31 14:29:29 +01:00
2014-01-31 15:38:12 +01:00
template <typename owner>
EventButton<owner>::EventButton()
2014-01-31 14:29:29 +01:00
{
this->privData.ID = privData.currID;
this->privData.currID += 1;
//this->privData.owner = NULL;
2014-01-31 14:29:29 +01:00
this->privData.EventFunc = NULL;
}
2014-01-31 15:38:12 +01:00
template <typename owner>
EventButton<owner>::EventButton(owner owner)
2014-01-31 14:29:29 +01:00
{
this->privData.ID = privData.currID;
this->privData.currID += 1;
this->privData.owner = owner;
this->privData.EventFunc = NULL;
}
2014-01-31 15:38:12 +01:00
template <typename owner>
EventButton<owner>::EventButton(void (*EventFunc)( ButtonEvent e))
2014-01-31 14:29:29 +01:00
{
this->privData.ID = privData.currID;
this->privData.currID += 1;
//this->privData.owner = NULL;
2014-01-31 14:29:29 +01:00
this->privData.EventFunc = EventFunc;
}
2014-01-31 15:38:12 +01:00
template <typename owner>
EventButton<owner>::EventButton(void (*EventFunc)( ButtonEvent e), owner owner)
2014-01-31 14:29:29 +01:00
{
this->privData.ID = privData.currID;
this->privData.currID += 1;
this->privData.owner = owner;
this->privData.EventFunc = EventFunc;
}
2014-01-31 15:38:12 +01:00
template <typename owner>
EventButton<owner>::~EventButton()
2014-01-31 14:29:29 +01:00
{
}
2014-01-31 15:38:12 +01:00
template <typename owner>
void EventButton<owner>::CheckCollision(InputClass *input)
2014-01-31 14:29:29 +01:00
{
//??????????????? TODO: everything
SendEvent(Button_Smashed);
}
template <typename owner>
void EventButton<owner>::SendEvent(IEventButton::ButtonState state)
{
ButtonEvent event;
event.state = state;
event.sender = this;
event.owner = privData.owner;
privData.EventFunc(event);
2014-01-31 14:29:29 +01:00
}
2014-01-31 15:38:12 +01:00
template <typename owner>
void EventButton<owner>::SetEventFunc(void (*EventFunc)( ButtonEvent e ))
2014-01-31 14:29:29 +01:00
{
this->privData.EventFunc = EventFunc;
}
2014-01-31 15:38:12 +01:00
template <typename owner>
unsigned int EventButton<owner>::GetID()
2014-01-31 14:29:29 +01:00
{
return this->privData.ID;
}
}
2014-01-31 15:38:12 +01:00
}
2014-01-31 15:38:12 +01:00
#endif