Jesus4Lyf
Good Idea™
- Reaction score
- 396
Event
Version 1.0.1
See attached SC2Lib file.
Mimics the old Warcraft III Event system.
Example:
Trigger:
- EventExampleInit
- Events
- Timer - Elapsed time is 1.0 Game Time seconds
- Local Variables
- MyEvent = 0 <Integer>
- Conditions
- Actions
- Variable - Set MyEvent = (CreateEvent())
- TriggerRegisterEvent(MyEvent, EventExample)
- FireEvent(MyEvent)
- General - Wait 1.0 Game Time seconds
- TriggerRegisterEvent(MyEvent, EventExample)
- FireEvent(MyEvent)
- Events
Trigger:
- EventExample
- Events
- Local Variables
- Conditions
- Actions
- UI - Display "Test" for (All players) to Subtitle area
Will create a new event, register it for the trigger, then fire it, wait one second, register it again so it's there twice, and fire it again.
Result:
Test
<pause of 1 second>
Test
Test
Old Event
Version 1.0.0
Code:
JASS:
typedef int Event;
static const int MAX_EVENTS=128;
// Stack
static Event[MAX_EVENTS] Event__Stack;
static Event Event__Stacked=0;
static Event Event__StackNext=0;
static Event Event__Alloc(){
if (Event__Stacked==0){
Event__StackNext+=1;
return Event__StackNext;
}
Event__Stacked-=1;
return Event__Stack[Event__Stacked];
}
static void Event__Dealloc(Event ev){
Event__Stack[Event__Stacked]=ev;
Event__Stacked=Event__Stacked+1;
}
static Event[MAX_EVENTS] Event__Next;
static Event[MAX_EVENTS] Event__Prev;
static trigger[MAX_EVENTS] Event__Trig;
// Funcs
Event CreateEvent(){
Event ev=Event__Alloc();
Event__Next[ev]=ev;
Event__Prev[ev]=ev;
return ev;
}
void TriggerAddEvent(trigger trig, Event ev){
Event node=Event__Alloc();
// node.trig=trig;
Event__Trig[node]=trig;
// ev.prev.next=node;
Event__Next[Event__Prev[ev]]=node;
// node.prev=ev.prev;
Event__Prev[node]=Event__Prev[ev];
// node.next=ev;
Event__Next[node]=ev;
// ev.prev=node;
Event__Prev[ev]=node;
}
void FireEvent(Event ev, bool testConds, bool runActions){
Event node=Event__Next[ev];
while (node!=ev){
// TriggerExecute(Event__Trig[node],testConds,runActions); // unfortunately doesn't work, yet.
node=Event__Next[node];
}
}
This is an Event simulation module, since Blizzard doesn't seem interested in providing us one, yet. There is one problem. I can't get the [LJASS]TriggerExecute(Event__Trig[node],testConds,runActions);[/LJASS] native to work in BETA, yet. But I thought this would serve as interesting code for people to marvel at, and might demonstrate the way we will have to code Galaxy scripts in the future.
This is pretty similar to the Warcraft III Event system.
(So, to clarify, this doesn't quite work yet as it can't actually execute the triggers, since the native appears to be missing in the BETA, although the signature for it is floating around. Every other line compiles OK. :thup
Attachments
-
3.6 KB Views: 330