package ds2d.core
{
import ash.core.ComponentMatchingFamily;
import ash.core.Engine;
import ash.core.Node;
import de.polygonal.ds.Itr;
import de.polygonal.ds.LinkedQueue;
public class DS2DComponentMatchingFamily extends ComponentMatchingFamily
{
private var engine:Engine;
public function DS2DComponentMatchingFamily( nodeClass:Class, engine:Engine )
{
super( nodeClass, engine );
this.engine = engine;
nodeList.nodeRemoved.add( delNode );
}
private var q:LinkedQueue = new LinkedQueue();
private function delNode( node:Node ):void
{
q.enqueue( node );
if ( !bListenerAdded )
{
bListenerAdded = true;
engine.updateComplete.add( sanitize );
}
}
private var bListenerAdded:Boolean;
private function sanitize():void
{
var itr:Itr = q.iterator();
while ( itr.hasNext())
sanitizeNode( itr.next() as Node );
q.clear( true );
engine.updateComplete.remove( sanitize );
bListenerAdded = false;
}
private function sanitizeNode( node:Node ):void
{
var componentClass:*;
for ( componentClass in components )
{
// ComponentPool.dispose( node[ components[ componentClass ]]);
node[ components[ componentClass ]] = null;
}
node.entity = null;
}
}
}