Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 29 additions & 18 deletions source/funkin/backend/scripting/EventManager.hx
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,40 @@ import flixel.FlxState;
import funkin.backend.scripting.events.*;

final class EventManager {
// map doesn't work for that
public static var eventValues:Array<CancellableEvent> = [];
public static var eventKeys:Array<Class<CancellableEvent>> = [];
public static var eventCache:Map<String, CancellableEvent> = [];

public static function get<T:CancellableEvent>(cl:Class<T>):T {
var c:Class<CancellableEvent> = cast cl;
#if cpp
public static var cppEventCache:haxe.ds.ObjectMap<Dynamic, CancellableEvent> = new haxe.ds.ObjectMap();

var index = eventKeys.indexOf(c);
if (index < 0) {
eventKeys.push(c);
var ret;
eventValues.push(ret = Type.createInstance(c, []));
return cast ret;
public static inline function get<T:CancellableEvent>(cl:Class<T>):T {
var event:CancellableEvent = cppEventCache.get(cl);
if (event == null) {
event = Type.createInstance(cl, []);
cppEventCache.set(cl, event);
}

return cast eventValues[index];
return cast event;
}
#else
public static inline function get<T:CancellableEvent>(cl:Class<T>):T {
var className = Type.getClassName(cl);
var event = eventCache.get(className);
if (event == null) {
event = Type.createInstance(cl, []);
eventCache.set(className, event);
}
return cast event;
}
#end

public static function reset() {
for(v in eventValues)
v.destroy();
eventValues = [];
eventKeys = [];
#if cpp
cppEventCache = new haxe.ds.ObjectMap();
#else
for (event in eventCache) {
event.destroy();
}
eventCache = [];
#end
}

public static function init() {
Expand All @@ -35,4 +46,4 @@ final class EventManager {

private static inline function onStateSwitch(newState:FlxState)
reset();
}
}
2 changes: 1 addition & 1 deletion source/funkin/backend/utils/DiscordUtil.hx
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import flixel.sound.FlxSound;
import flixel.util.typeLimit.OneOfTwo;
import funkin.backend.scripting.*; // lazy
import funkin.backend.scripting.events.CancellableEvent;
import funkin.backend.scripting.events.discord.*;
import funkin.backend.scripting.events.discord.DiscordPresenceUpdateEvent;
import funkin.backend.system.macros.Utils;
import haxe.Json;
import openfl.display.BitmapData;
Expand Down