package_20 alternativa.tanks.game.subsystems.eventsystem

This commit is contained in:
Pyogenics
2025-01-27 18:09:36 +00:00
parent 608f91dc7a
commit 9d109fc043
11 changed files with 53 additions and 52 deletions

View File

@@ -2,8 +2,8 @@ package alternativa.tanks.game
{
import flash.display.Stage;
import package_18.name_44;
import package_20.name_179;
import package_20.name_56;
import alternativa.tanks.game.subsystems.eventsystem.EventSystem;
import alternativa.tanks.game.subsystems.eventsystem.IEventSystem;
import alternativa.tanks.game.subsystems.inputsystem.InputSystem;
import alternativa.tanks.game.subsystems.inputsystem.IInput;
import package_26.name_100;
@@ -47,7 +47,7 @@ package alternativa.tanks.game
private var inputSystem:InputSystem;
private var eventSystem:name_179;
private var eventSystem:EventSystem;
private var logicSystem1:name_177;
@@ -77,7 +77,7 @@ package alternativa.tanks.game
this.var_4.addTask(this.var_44);
this.inputSystem = new InputSystem(INPUT_SYSTEM_PRIORITY,stage);
this.var_4.addTask(this.inputSystem);
this.eventSystem = new name_179(EVENT_SYSTEM_PRIORITY);
this.eventSystem = new EventSystem(EVENT_SYSTEM_PRIORITY);
this.var_4.addTask(this.eventSystem);
this.logicSystem1 = new name_177(LOGIC_SYSTEM_1_PRIORITY,this);
this.var_4.addTask(this.logicSystem1);
@@ -163,7 +163,7 @@ package alternativa.tanks.game
return this.inputSystem;
}
public function name_61() : name_56
public function name_61() : IEventSystem
{
return this.eventSystem;
}

View File

@@ -0,0 +1,73 @@
package alternativa.tanks.game.subsystems.eventsystem
{
import alternativa.tanks.game.GameTask;
import package_108.name_373;
import package_108.name_374;
public class EventSystem extends GameTask implements IEventSystem
{
private var eventQueue1:name_374;
private var eventQueue2:name_374;
private var var_213:Object;
public function EventSystem(priority:int)
{
super(priority);
this.eventQueue1 = new name_374();
this.eventQueue2 = new name_374();
this.var_213 = new Object();
}
public function addEventListener(eventType:String, listener:IGameEventListener) : void
{
var listeners:name_374 = this.var_213[eventType];
if(listeners == null)
{
listeners = new name_374();
this.var_213[eventType] = listeners;
}
listeners.add(listener);
}
public function removeEventListener(eventType:String, listener:IGameEventListener) : void
{
var listeners:name_374 = this.var_213[eventType];
if(listeners != null)
{
listeners.remove(listener);
}
}
public function dispatchEvent(eventType:String, eventData:*) : void
{
this.eventQueue1.add(GameEvent.create(eventType,eventData));
}
override public function run() : void
{
var event:GameEvent = null;
var listeners:name_374 = null;
var iterator:name_373 = null;
var listener:IGameEventListener = null;
var tmp:name_374 = this.eventQueue1;
this.eventQueue1 = this.eventQueue2;
for(this.eventQueue2 = tmp; (event = GameEvent(this.eventQueue2.poll())) != null; )
{
listeners = this.var_213[event.eventType];
if(listeners != null)
{
iterator = listeners.listIterator();
while(iterator.hasNext())
{
listener = IGameEventListener(iterator.next());
listener.method_146(event.eventType,event.eventData);
}
}
event.destroy();
}
}
}
}

View File

@@ -0,0 +1,43 @@
package alternativa.tanks.game.subsystems.eventsystem
{
public class GameEvent
{
private static var pool:GameEvent;
public var eventType:String;
public var eventData:*;
public var next:GameEvent;
public function GameEvent(eventType:String, eventData:*)
{
super();
this.eventType = eventType;
this.eventData = eventData;
}
public static function create(eventType:String, eventData:*) : GameEvent
{
if(pool == null)
{
return new GameEvent(eventType,eventData);
}
var item:GameEvent = pool;
pool = item.next;
item.next = null;
item.eventType = eventType;
item.eventData = eventData;
return item;
}
public function destroy() : void
{
this.eventType = null;
this.eventData = null;
this.next = pool;
pool = this;
}
}
}

View File

@@ -0,0 +1,12 @@
package alternativa.tanks.game.subsystems.eventsystem
{
public interface IEventSystem
{
function addEventListener(param1:String, param2:IGameEventListener) : void;
function removeEventListener(param1:String, param2:IGameEventListener) : void;
function dispatchEvent(param1:String, param2:*) : void;
}
}

View File

@@ -0,0 +1,8 @@
package alternativa.tanks.game.subsystems.eventsystem
{
public interface IGameEventListener
{
function method_146(param1:String, param2:*) : void;
}
}