Skip to content

Commit

Permalink
Add added/removed signals on the NodeList class.
Browse files Browse the repository at this point in the history
  • Loading branch information
richardlord committed Jan 9, 2012
1 parent 7d8e591 commit 999f090
Show file tree
Hide file tree
Showing 21 changed files with 131 additions and 39 deletions.
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ bin-release/*
.sourceMate
.sourceMateMetadataSettings

# IntelliJ
.idea
*.iml
*.ipr
*.iws

# OS X
Icon
Thumbs.db
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.richardlord.asteroids
{
import flash.display.DisplayObjectContainer;
import net.richardlord.ash.core.Game;
import net.richardlord.ash.tick.FrameTickProvider;
import net.richardlord.asteroids.components.GameState;
Expand All @@ -11,9 +12,8 @@ package net.richardlord.asteroids
import net.richardlord.asteroids.systems.MovementSystem;
import net.richardlord.asteroids.systems.RenderSystem;
import net.richardlord.asteroids.systems.SystemPriorities;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

import flash.display.DisplayObjectContainer;


public class Asteroids
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ package net.richardlord.asteroids

public function destroyEntity( entity : Entity ) : void
{
if ( entity.has( Display ) )
{
var display : Display = entity.get( Display );
display.displayObject.parent.removeChild( display.displayObject );
}
game.removeEntity( entity );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.GunControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.GunControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class GunControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.MotionControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.MotionControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class MotionControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,18 @@ package net.richardlord.asteroids.systems
override public function addToGame( game : Game ) : void
{
nodes = game.getFamily( RenderNode );
nodes.nodeAdded.add( addToDisplay );
nodes.nodeRemoved.add( removeFromDisplay );
}

private function addToDisplay( node : RenderNode ) : void
{
container.addChild( node.display.displayObject );
}

private function removeFromDisplay( node : RenderNode ) : void
{
container.removeChild( node.display.displayObject );
}

override public function update( time : Number ) : void
Expand All @@ -40,10 +52,6 @@ package net.richardlord.asteroids.systems
displayObject = display.displayObject;
position = node.position;

if( !displayObject.parent )
{
container.addChild( displayObject );
}
displayObject.x = position.position.x;
displayObject.y = position.position.y;
displayObject.rotation = position.rotation * 180 / Math.PI;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* THE SOFTWARE.
*/

package net.richardlord.utils
package net.richardlord.input
{
import flash.events.KeyboardEvent;
import flash.events.Event;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ package net.richardlord.asteroids

public function destroyEntity( entity : Entity ) : void
{
if ( entity.has( Display ) )
{
var display : Display = entity.get( Display );
display.displayObject.parent.removeChild( display.displayObject );
}
game.removeEntity( entity );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ package net.richardlord.asteroids
import net.richardlord.asteroids.systems.MovementSystem;
import net.richardlord.asteroids.systems.RenderSystem;
import net.richardlord.asteroids.systems.SystemPriorities;
import net.richardlord.utils.KeyPoll;

import net.richardlord.input.KeyPoll;
import org.swiftsuspenders.Injector;


public class StartAsteroids
{
[Inject]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.GunControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.GunControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class GunControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.MotionControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.MotionControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class MotionControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package net.richardlord.asteroids.systems
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import net.richardlord.ash.core.NodeList;
import net.richardlord.ash.core.System;
import net.richardlord.asteroids.components.Display;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.RenderNode;

import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;


public class RenderSystem extends System
{
Expand All @@ -17,6 +18,23 @@ package net.richardlord.asteroids.systems
[Inject(nodeType="net.richardlord.asteroids.nodes.RenderNode")]
public var nodes : NodeList;

[PostConstruct]
public function setUpListeners() : void
{
nodes.nodeAdded.add( addToDisplay );
nodes.nodeRemoved.add( removeFromDisplay );
}

private function addToDisplay( node : RenderNode ) : void
{
container.addChild( node.display.displayObject );
}

private function removeFromDisplay( node : RenderNode ) : void
{
container.removeChild( node.display.displayObject );
}

override public function update( time : Number ) : void
{
var node : RenderNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* THE SOFTWARE.
*/

package net.richardlord.utils
package net.richardlord.input
{
import flash.events.KeyboardEvent;
import flash.events.Event;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package net.richardlord.asteroids
{
import flash.display.DisplayObjectContainer;
import net.richardlord.ash.core.Game;
import net.richardlord.ash.integration.swiftsuspenders.SwiftSuspendersGame;
import net.richardlord.ash.tick.FrameTickProvider;
Expand All @@ -12,11 +13,10 @@ package net.richardlord.asteroids
import net.richardlord.asteroids.systems.MovementSystem;
import net.richardlord.asteroids.systems.RenderSystem;
import net.richardlord.asteroids.systems.SystemPriorities;
import net.richardlord.utils.KeyPoll;

import net.richardlord.input.KeyPoll;
import org.swiftsuspenders.Injector;

import flash.display.DisplayObjectContainer;


public class Asteroids
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ package net.richardlord.asteroids

public function destroyEntity( entity : Entity ) : void
{
if ( entity.has( Display ) )
{
var display : Display = entity.get( Display );
display.displayObject.parent.removeChild( display.displayObject );
}
game.removeEntity( entity );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.GunControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.GunControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class GunControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ package net.richardlord.asteroids.systems
import net.richardlord.asteroids.components.MotionControls;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.MotionControlNode;
import net.richardlord.utils.KeyPoll;
import net.richardlord.input.KeyPoll;

public class MotionControlSystem extends System
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
package net.richardlord.asteroids.systems
{
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import net.richardlord.ash.core.NodeList;
import net.richardlord.ash.core.System;
import net.richardlord.asteroids.components.Display;
import net.richardlord.asteroids.components.Position;
import net.richardlord.asteroids.nodes.RenderNode;

import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;


public class RenderSystem extends System
{
Expand All @@ -17,6 +18,23 @@ package net.richardlord.asteroids.systems
[Inject(nodeType="net.richardlord.asteroids.nodes.RenderNode")]
public var nodes : NodeList;

[PostConstruct]
public function setUpListeners() : void
{
nodes.nodeAdded.add( addToDisplay );
nodes.nodeRemoved.add( removeFromDisplay );
}

private function addToDisplay( node : RenderNode ) : void
{
container.addChild( node.display.displayObject );
}

private function removeFromDisplay( node : RenderNode ) : void
{
container.removeChild( node.display.displayObject );
}

override public function update( time : Number ) : void
{
var node : RenderNode;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
* THE SOFTWARE.
*/

package net.richardlord.utils
package net.richardlord.input
{
import flash.events.KeyboardEvent;
import flash.events.Event;
Expand Down
12 changes: 12 additions & 0 deletions src/net/richardlord/ash/core/NodeList.as
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
package net.richardlord.ash.core
{
import net.richardlord.ash.signals.Signal1;

public class NodeList
{
public var head : *;
public var tail : *;

public var nodeAdded : Signal1;
public var nodeRemoved : Signal1;

public function NodeList()
{
nodeAdded = new Signal1( Node );
nodeRemoved = new Signal1( Node );
}

public function add( node : Node ) : void
{
if( ! head )
Expand All @@ -18,6 +28,7 @@ package net.richardlord.ash.core
node.previous = tail;
tail = node;
}
nodeAdded.dispatch( node );
}

public function remove( node : Node ) : void
Expand All @@ -40,6 +51,7 @@ package net.richardlord.ash.core
{
node.next.previous = node.previous;
}
nodeRemoved.dispatch( node );
}

public function get empty() : Boolean
Expand Down
45 changes: 45 additions & 0 deletions test/src/net/richardlord/ash/core/FamilyTests.as
Original file line number Diff line number Diff line change
Expand Up @@ -194,6 +194,51 @@ package net.richardlord.ash.core
}
assertThat( entities, emptyArray() );
}

[Test]
public function addingNodeTriggersAddedSignal() : void
{
var nodes : NodeList = new NodeList();
var node : MockNode = new MockNode();
nodes.nodeAdded.add( async.add() );
nodes.add( node );
}

[Test]
public function removingNodeTriggersRemovedSignal() : void
{
var nodes : NodeList = new NodeList();
var node : MockNode = new MockNode();
nodes.add( node );
nodes.nodeRemoved.add( async.add() );
nodes.remove( node );
}

private var tempNode : Node;

[Test]
public function componentAddedSignalContainsCorrectParameters() : void
{
var nodes : NodeList = new NodeList();
tempNode = new MockNode();
nodes.nodeAdded.add( async.add( testSignalContent, 10 ) );
nodes.add( tempNode );
}

[Test]
public function componentRemovedSignalContainsCorrectParameters() : void
{
var nodes : NodeList = new NodeList();
tempNode = new MockNode();
nodes.add( tempNode );
nodes.nodeRemoved.add( async.add( testSignalContent, 10 ) );
nodes.remove( tempNode );
}

private function testSignalContent( signalNode : Node ) : void
{
assertThat( signalNode, sameInstance( tempNode ) );
}
}
}
import net.richardlord.ash.core.Node;
Expand Down

0 comments on commit 999f090

Please sign in to comment.