From fe5ff40e8e6ab1cdc83df3263d3d16830e4ff18f Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Sat, 11 Jun 2011 13:09:29 -0500 Subject: Event looper is fully functional! --- src/eventlooper.cpp | 60 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 36 insertions(+), 24 deletions(-) (limited to 'src') diff --git a/src/eventlooper.cpp b/src/eventlooper.cpp index 3c1fe7d..755742d 100644 --- a/src/eventlooper.cpp +++ b/src/eventlooper.cpp @@ -13,6 +13,7 @@ struct EventLooper { u8 _B8[0x318]; // 0xB8 // Any variables you add to the class go here; starting at offset 0x3D0 u64 eventFlag; // 0x3D0 + u64 eventActive; // 0x3D0 u8 delay; // 0x3D4 u8 delayCount; // 0x3D7 }; @@ -29,27 +30,39 @@ void EventLooper_Update(EventLooper *self); bool EventLooper_Create(EventLooper *self) { - OSReport("Sprite Created"); char eventStart = (self->settings >> 24) & 0xFF; char eventEnd = (self->settings >> 16) & 0xFF; - OSReport("Mark 1"); - // Putting all the events into the flag int i; - int q; - for(i=eventStart;ieventFlag = q; - self->delay = ((self->settings) & FF) * 10; + self->delay = (((self->settings) & 0xFF) + 1) * 10; self->delayCount = 0; - - OSReport("About to first update"); + char tmpEvent= (self->settings >> 8) & 0xFF; + if (tmpEvent == 0) + { + self->eventActive = (u64)0xFFFFFFFFFFFFFFFF; + } + else + { + self->eventActive = (u64)1 << (tmpEvent - 1); + + } + + + if (EventTable->events & self->eventActive) + { + u64 evState = (u64)1 << (eventStart - 1); + EventTable->events = EventTable->events | evState; + } EventLooper_Update(self); @@ -57,7 +70,6 @@ bool EventLooper_Create(EventLooper *self) { } bool EventLooper_Execute(EventLooper *self) { - OSReport("Sprite Update"); EventLooper_Update(self); return true; } @@ -65,29 +77,31 @@ bool EventLooper_Execute(EventLooper *self) { void EventLooper_Update(EventLooper *self) { + if ((EventTable->events & self->eventActive) == 0) + return; // Waiting for the right moment if (self->delayCount < self->delay) { - OSReport("Delaying: %d\n", self->delayCount); +// OSReport("Delaying: %d / %d\n", self->delayCount, self->delay); self->delayCount = self->delayCount + 1; return; } - - OSReport("Event flag Start: %08x %08x\n", self->eventFlag >> 32, self->eventFlag & 0xFFFFFFFF); - OSReport("Event TableStart: %08x %08x\n", EventTable->events >> 32, EventTable->events & 0xFFFFFFFF); - // Find which event(s) is/are on + // Reset the delay + self->delayCount = 0; + + // Find which event(s) is/are on u64 evState = EventTable->events & self->eventFlag; // Turn off the old events - EventTable->events & (~self->eventFlag); + EventTable->events = EventTable->events & (~self->eventFlag); // Shift them right if they can, if not, reset! - if (evState < eventFlag) + evState = evState << 1; + if (evState < self->eventFlag) { - evState << 1; EventTable->events = EventTable->events | evState; } @@ -97,8 +111,6 @@ void EventLooper_Update(EventLooper *self) { evState = (u64)1 << (eventStart - 1); EventTable->events = EventTable->events | evState; } - - OSReport("Event flag End: %08x %08x\n", self->eventFlag >> 32, self->eventFlag & 0xFFFFFFFF); - OSReport("Event Table End: %08x %08x\n", EventTable->events >> 32, EventTable->events & 0xFFFFFFFF); - + + } -- cgit v1.2.3