From 9df64c5f97992978fb7256e988233f23d039cc1d Mon Sep 17 00:00:00 2001 From: Colin Noga Date: Fri, 10 Jun 2011 15:50:13 -0500 Subject: Added stupid event looper that is not working to sprite 79 --- src/eventlooper.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/eventlooper.cpp (limited to 'src') diff --git a/src/eventlooper.cpp b/src/eventlooper.cpp new file mode 100644 index 0000000..3c1fe7d --- /dev/null +++ b/src/eventlooper.cpp @@ -0,0 +1,104 @@ +#include +#include + +struct EventLooper { + u32 id; // 0x00 + u32 settings; // 0x04 + u16 name; // 0x08 + u8 _0A[6]; // 0x0A + u8 _10[0x9C]; // 0x10 + float x; // 0xAC + float y; // 0xB0 + float z; // 0xB4 + u8 _B8[0x318]; // 0xB8 + // Any variables you add to the class go here; starting at offset 0x3D0 + u64 eventFlag; // 0x3D0 + u8 delay; // 0x3D4 + u8 delayCount; // 0x3D7 +}; + +struct EventTable_t { + u64 events; + // ... +}; + +extern EventTable_t *EventTable; + +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->delayCount = 0; + + + OSReport("About to first update"); + + EventLooper_Update(self); + + return true; +} + +bool EventLooper_Execute(EventLooper *self) { + OSReport("Sprite Update"); + EventLooper_Update(self); + return true; +} + + +void EventLooper_Update(EventLooper *self) { + + + // Waiting for the right moment + if (self->delayCount < self->delay) + { + OSReport("Delaying: %d\n", self->delayCount); + + 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 + u64 evState = EventTable->events & self->eventFlag; + + // Turn off the old events + EventTable->events & (~self->eventFlag); + + // Shift them right if they can, if not, reset! + if (evState < eventFlag) + { + evState << 1; + EventTable->events = EventTable->events | evState; + } + + else + { + char eventStart = (self->settings >> 24) & 0xFF; + 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