hi ich hab ne allgemeine frage, vll liegts dran, dass es vir uhr morgens ist, aber ich bin verwirrt.
also ich schreibe zur zeit an ner game engine, die event basiert ist. alles was die macht, soll durch events passieren, vom mesh laden bis zum frame rendern. warum usw ist erstmal nicht wichtig.
hierzu habe ich mir überlegt, dass ich structs verwende, die von einer grossen klasse, die von IEventReceiver geerbt hat, verschickt und ausgewertet werden.
das sieht dann so aus etwa, in einer extra datei:
Code:
struct tCustomEvent
{
customEventType type; //das ist ein enum, für jedes custom event gibts eins, zb frame rendern, mesh laden etc
}
struct tRenderFrameEvent : public tCustomEvent
{
tCustomEvent::type = CET_RENDER_FRAME;
bool useDebug;
}
soweit so gut.
benutzt wird das ganze so:
Code:
tRenderFrameStruct rfs;
rfs.useDebug = true;
sendOutEvent(rfs);
wobei sendOutEvent so funktioniert:
Code:
void app::sendOutEvent(const tCustomEvent& ev)
{
SEvent event;
event.EventType = ::EET_USER_EVENT;
event.UserEvent.UserData1 = ev.type;
event.UserEvent.UserData2 = (s32)&ev;
device->postEventFromUser(event);
};
so. das klappt wunderbar.
die events werden folgendermaßen abgefangen:
Code:
bool app::OnEvent(const SEvent& event)
{
switch(event.EventType)
{
case EET_USER_EVENT:
{
switch(event.UserEvent.UserData1)
{
case CET_CREATE_CAMERA:
{
#ifdef DEBUG
std::cout << "CREATECAMERASTRUCT RECEIVED" << std::endl;
#endif
//in dieser zeile klappt was nicht...
tCreateCamStruct* cStruct = (tCreateCamStruct*)event.UserEvent.UserData2;
switch(cStruct->typeOfCam)
{
case scene::ESNT_CAMERA_FPS:
{
//blablabla
return true;
};break;
default: return false;
};
};break;
//...............USW
der witz ist jetzt, dass das mist ding zwar den richtigen eventTyp rausfindet, aber beim typecast verbock ichs irgendwie.
wenn zb ein core::stringc im struct war, ist der leer, oder irgend ein enum hat auf einmal völlig falsche werte.
der zeiger auf cStruct hier ist nich null, das ist das komische.
wie muss ich casten?