Cleaned up the mess, at this time, only viable data get synced (_work directory for Gothic-data, miranda for mdc-scripts. Need to symlink files to a working directory.
129 lines
3.6 KiB
D
129 lines
3.6 KiB
D
/***********************************\
|
|
EVENTHANDLER
|
|
\***********************************/
|
|
|
|
//========================================
|
|
// [intern] PermMem Klasse
|
|
//========================================
|
|
instance lCEvent(zCArray);
|
|
|
|
func void lCEvent_Archiver(var zCArray this) {
|
|
var int i; i = 0;
|
|
while(i < this.numInArray);
|
|
PM_SaveFuncID(ConcatStrings("handler", IntToString(i)), MEM_ReadIntArray(this.array, i));
|
|
i += 1;
|
|
end;
|
|
};
|
|
|
|
func void lCEvent_Unarchiver(var zCArray arr) {
|
|
var int i; i = 0;
|
|
var int this; this = MEM_InstToPtr(arr);
|
|
while(true);
|
|
var string c; c = ConcatStrings("handler", IntToString(i));
|
|
if (!PM_Exists(c)) {
|
|
return;
|
|
};
|
|
MEM_ArrayInsert(this, PM_LoadFuncID(c));
|
|
i += 1;
|
|
end;
|
|
};
|
|
|
|
//========================================
|
|
// Event erstellen
|
|
//========================================
|
|
func int EventPtr_Create() {
|
|
return create(lCEvent);
|
|
};
|
|
func int Event_Create() {
|
|
return new(lCEvent);
|
|
};
|
|
|
|
//========================================
|
|
// Event löschen
|
|
//========================================
|
|
func void EventPtr_Delete(var int ptr) {
|
|
free(ptr, lCEvent);
|
|
};
|
|
func void Event_Delete(var int h) {
|
|
delete(h);
|
|
};
|
|
|
|
//========================================
|
|
// Hat das Event Listener?
|
|
//========================================
|
|
func int EventPtr_Empty(var int ptr) {
|
|
return (MEM_ArraySize(ptr) <= 0);
|
|
};
|
|
func int Event_Empty(var int h) {
|
|
return EventPtr_Empty(getPtr(h));
|
|
};
|
|
|
|
//========================================
|
|
// Event auf Listener prüfen
|
|
//========================================
|
|
func int EventPtr_HasI(var int ptr, var int id) {
|
|
return (MEM_ArrayIndexOf(ptr, id) >= 0);
|
|
};
|
|
func int EventPtr_Has(var int ptr, var func handler) {
|
|
return EventPtr_HasI(ptr, MEM_GetFuncID(handler));
|
|
};
|
|
func int Event_Has(var int h, var func handler) {
|
|
return EventPtr_HasI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
|
|
//========================================
|
|
// Listener hinzufügen
|
|
//========================================
|
|
func void EventPtr_AddI(var int ptr, var int id) {
|
|
MEM_ArrayInsert(ptr, id);
|
|
};
|
|
func void EventPtr_Add(var int ptr, var func handler) {
|
|
EventPtr_AddI(ptr, MEM_GetFuncID(handler));
|
|
};
|
|
func void Event_Add(var int h, var func handler) {
|
|
EventPtr_AddI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
|
|
//========================================
|
|
// Listener einmalig hinzufügen
|
|
//========================================
|
|
func void EventPtr_AddOnceI(var int ptr, var int id) {
|
|
if (!EventPtr_HasI(ptr, id)) {
|
|
EventPtr_AddI(ptr, id);
|
|
};
|
|
};
|
|
func void EventPtr_AddOnce(var int h, var func handler) {
|
|
EventPtr_AddOnceI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
func void Event_AddOnce(var int h, var func handler) {
|
|
EventPtr_AddOnceI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
|
|
//========================================
|
|
// Listener entfernen
|
|
//========================================
|
|
func void EventPtr_RemoveI(var int ptr, var int id) {
|
|
MEM_ArrayRemoveValueOnce(ptr, id);
|
|
};
|
|
func void EventPtr_Remove(var int h, var func handler) {
|
|
EventPtr_RemoveI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
func void Event_Remove(var int h, var func handler) {
|
|
EventPtr_RemoveI(getPtr(h), MEM_GetFuncID(handler));
|
|
};
|
|
|
|
//========================================
|
|
// Event feuern
|
|
//========================================
|
|
func void EventPtr_Execute(var int ptr, var int d) {
|
|
var zCArray a; a = _^(ptr);
|
|
var int i; i = 0;
|
|
while(i < a.numInArray);
|
|
d;
|
|
MEM_CallByID(MEM_ReadIntArray(a.array, i));
|
|
i += 1;
|
|
end;
|
|
};
|
|
func void Event_Execute(var int h, var int d) {
|
|
EventPtr_Execute(getPtr(h), d);
|
|
};
|