私の目標は、プレイヤーが歩いて何かを殺したり、アイテムや持っているものを手に入れたりするなど、何らかのイベントが発生することによってトリガーされるゲーム イベントを処理するシステムを作成することです。これを行うには、イベントがトリガーされたときに実行される仮想関数が必要です。これが私がやりたいことの要点です(現在の状態では機能しないことはわかっていますが、私の目標が何であるかを説明できる最良の方法です):
class EventManager
{
public:
typedef struct
{
virtual void run();
bool triggered;
std::string name;
} Event;
void newEvent(std::string eventName)
{
Event newEvent;
newEvent.name = eventName;
newEvent.triggered = false;
eventStack.push_back(newEvent);
}
void triggerEvent(std::string eventName)
{
std::vector<Event>::iterator itr;
for(itr = eventStack.begin(); itr != eventStack.end(); itr++)
{
if(itr->name == eventName) itr->triggered = true;
}
}
std::vector<Event> eventStack;
};
int main()
{
EventManager* myEventManager = 0;
myEventManager = new EventManager();
myEventManager->newEvent("Event1");
myEventManager->eventStack.back()::run()
{
std::cout << "Event1 has been triggered";
}
std::vector<EventManager::Event>::iterator itr;
for(itr = myEventManager->eventStack.begin(); itr != myEventManager->eventStack.end(); itr++)
{
if(itr->triggered)
{
itr->run();
itr->triggered = false;
}
}
return 0;
}
基本的に私の質問は、ライブラリのユーザーが、イベントごとにクラスや何かを書かなくても、イベントがトリガーされたときに何が起こるかを定義できるようにするにはどうすればよいですか?