124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			124 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package iron; | ||
|  | 
 | ||
|  | import iron.object.Object; | ||
|  | 
 | ||
|  | class Trait { | ||
|  | 
 | ||
|  | 	public var name: String = ""; | ||
|  | 
 | ||
|  |     /** | ||
|  |       Object this trait belongs to. | ||
|  |     **/ | ||
|  | 	public var object: Object; | ||
|  | 
 | ||
|  | 	var _add: Array<Void->Void> = null; | ||
|  | 	var _init: Array<Void->Void> = null; | ||
|  | 	var _remove: Array<Void->Void> = null; | ||
|  | 	var _update: Array<Void->Void> = null; | ||
|  | 	var _lateUpdate: Array<Void->Void> = null; | ||
|  | 	var _render: Array<kha.graphics4.Graphics->Void> = null; | ||
|  | 	var _render2D: Array<kha.graphics2.Graphics->Void> = null; | ||
|  | 
 | ||
|  | 	public function new() {} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Remove the trait from the object. | ||
|  |     **/ | ||
|  | 	public function remove() { | ||
|  | 		object.removeTrait(this); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Trait is added to an object. | ||
|  |     **/ | ||
|  | 	public function notifyOnAdd(f: Void->Void) { | ||
|  | 		if (_add == null) _add = []; | ||
|  | 		_add.push(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Object which this trait belongs to is added to scene. | ||
|  |     **/ | ||
|  | 	public function notifyOnInit(f: Void->Void) { | ||
|  | 		if (_init == null) _init = []; | ||
|  | 		_init.push(f); | ||
|  | 		App.notifyOnInit(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Object which this trait belongs to is removed from scene. | ||
|  |     **/ | ||
|  | 	public function notifyOnRemove(f: Void->Void) { | ||
|  | 		if (_remove == null) _remove = []; | ||
|  | 		_remove.push(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Add game logic handler. | ||
|  |     **/ | ||
|  | 	public function notifyOnUpdate(f: Void->Void) { | ||
|  | 		if (_update == null) _update = []; | ||
|  | 		_update.push(f); | ||
|  | 		App.notifyOnUpdate(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Remove game logic handler. | ||
|  |     **/ | ||
|  | 	public function removeUpdate(f: Void->Void) { | ||
|  | 		_update.remove(f); | ||
|  | 		App.removeUpdate(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Add late game logic handler. | ||
|  |     **/ | ||
|  | 	public function notifyOnLateUpdate(f: Void->Void) { | ||
|  | 		if (_lateUpdate == null) _lateUpdate = []; | ||
|  | 		_lateUpdate.push(f); | ||
|  | 		App.notifyOnLateUpdate(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Remove late game logic handler. | ||
|  |     **/ | ||
|  | 	public function removeLateUpdate(f: Void->Void) { | ||
|  | 		_lateUpdate.remove(f); | ||
|  | 		App.removeLateUpdate(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Add render handler. | ||
|  |     **/ | ||
|  | 	public function notifyOnRender(f: kha.graphics4.Graphics->Void) { | ||
|  | 		if (_render == null) _render = []; | ||
|  | 		_render.push(f); | ||
|  | 		App.notifyOnRender(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Remove render handler. | ||
|  |     **/ | ||
|  | 	public function removeRender(f: kha.graphics4.Graphics->Void) { | ||
|  | 		_render.remove(f); | ||
|  | 		App.removeRender(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Add 2D render handler. | ||
|  |     **/ | ||
|  | 	public function notifyOnRender2D(f: kha.graphics2.Graphics->Void) { | ||
|  | 		if (_render2D == null) _render2D = []; | ||
|  | 		_render2D.push(f); | ||
|  | 		App.notifyOnRender2D(f); | ||
|  | 	} | ||
|  | 
 | ||
|  |     /** | ||
|  |       Remove 2D render handler. | ||
|  |     **/ | ||
|  | 	public function removeRender2D(f: kha.graphics2.Graphics->Void) { | ||
|  | 		_render2D.remove(f); | ||
|  | 		App.removeRender2D(f); | ||
|  | 	} | ||
|  | } |