Skip to content

Commit

Permalink
alchemy ds wip
Browse files Browse the repository at this point in the history
  • Loading branch information
Glidias committed Mar 18, 2012
1 parent d80d8bf commit 64c4f9a
Show file tree
Hide file tree
Showing 9 changed files with 145 additions and 34 deletions.
21 changes: 16 additions & 5 deletions hx/hashds/game/alchemy/A_Component.hx
@@ -1,4 +1,5 @@
package hashds.game.alchemy;
import de.polygonal.ds.IntIntHashTable;
import de.polygonal.ds.mem.IntMemory;
import de.polygonal.ds.mem.MemoryAccess;
import hashds.game.alchemy.ds.MemoryDS;
Expand All @@ -11,17 +12,23 @@ import hashds.game.ComponentID;
* @author Glenn Ko
*/

class A_Component extends A_Base
class A_Component extends A_Base, implements IComponentDS
{
private var _index:Int;
private var _id:Int;
private var _name:String;

public function new(name:String=null)
{
super();
_name = name;
_index = ComponentLookup.registerComponent(this);
_id = ComponentLookup.registerComponent(this);
}
/*
public function addDefault(hash:IntIntHashTable):Bool {
return false;
}
*/

public inline function init(allocateNumBlocks:Int, allocateAvailIndices:Int, useExistingMem:Bool=false, existingMem:MemoryDS=null):Void {
_init(allocateNumBlocks, allocateAvailIndices, useExistingMem, existingMem);
}
Expand All @@ -30,12 +37,16 @@ class A_Component extends A_Base
_mem.freeAddr(addr);
}

public function free(key:Int):Void {
_mem.freeAddr(key);
}


public function getId():Int {
return _index;
return _id;
}

public inline function getName():String
public function getName():String
{
return _name;
}
Expand Down
64 changes: 62 additions & 2 deletions hx/hashds/game/alchemy/A_Game.hx
@@ -1,4 +1,10 @@
package hashds.game.alchemy;
import de.polygonal.ds.IntIntHashTable;
import de.polygonal.ds.mem.IntMemory;
import flash.display.DisplayObject;
import flash.Vector;
import hashds.game.alchemy.components.ds.VectorComponent;
import hashds.game.alchemy.nodes.ExampleFactory;

/**
* ...
Expand All @@ -7,15 +13,69 @@ package hashds.game.alchemy;

class A_Game
{
private var _entC:Vector<IntIntHashTable>;
private var _entI:Int;
private var _entLen:Int;

private var _availEntIndices:IntMemory;
private var _ai:Int;

public function new()
private var _entHashSlotCount:Int;
private var _entHashCapacity:Int;
private var _allocateEntityAmt:Int;
private var _entAmtGrowShift:Int;



public function new(allocateEntityAmt:Int, allocateAvailIndices:Int, entHashSlotCount:Int=4, entHashCapacity:Int=4, entAmtGrowShift:Int=1)
{
_entHashSlotCount = entHashSlotCount;
_entHashCapacity = entHashCapacity;
_allocateEntityAmt = allocateEntityAmt;
_entAmtGrowShift = entAmtGrowShift;

_entC = new Vector<IntIntHashTable>(allocateEntityAmt);

for (i in 0...allocateEntityAmt) {
var hashTable:IntIntHashTable = new IntIntHashTable(entHashSlotCount, entHashCapacity);
hashTable.key = i;
_entC[i] = hashTable;
}
_entLen = allocateEntityAmt;
_entI = 0;

_ai = 0;
_availEntIndices = new IntMemory(allocateAvailIndices);
}

public inline function getNewComponentHash():IntIntHashTable {
if (_ai != 0) return _entC[ _availEntIndices.get(--_ai) ];
else {
if (_entI == _entLen) growEntC();
return _entC[_entI++];
}
}

public function getDataStructure(key:Dynamic):Void {
public function registerComponentHash(hash:IntIntHashTable):Void {

}

private function growEntC():Void
{
var newLen:Int = _entLen + (1 << _entAmtGrowShift);
_entC.length = newLen;
for (i in _entLen...newLen) {
var hashTable:IntIntHashTable = new IntIntHashTable(_entHashSlotCount, _entHashCapacity);
hashTable.key = i;
_entC[i] = hashTable;
}
_entLen = newLen;
}



public function getNode(nodeClass:Class<A_Node>):Dynamic {
return null;
}

}
16 changes: 8 additions & 8 deletions hx/hashds/game/alchemy/ComponentLookup.hx
Expand Up @@ -11,40 +11,40 @@ class ComponentLookup
{

private static var _INSTANCE:ComponentLookup = new ComponentLookup();
private var _list:Vector<A_Component>;
private var _list:Vector<IComponentDS>;
private var _hash:Dictionary;

private function new() {

_list = new Vector<A_Component>();
_list = new Vector<IComponentDS>();
_hash = new Dictionary();
}

private function register(comp:A_Component):Int {
private function register(comp:IComponentDS):Int {
var index:Int = _list.length;
_list.push(comp);
untyped _hash[getKeyForComponent(comp)] = comp;
return index;
}
private inline function getComponent(key:String):A_Component {
private inline function getComponent(key:String):Dynamic {
return untyped _hash[key];
}

public static inline function getKeyForComponent(comp:A_Component):String {
public static inline function getKeyForComponent(comp:IComponentDS):String {
return getKeyForComponentClasse(Type.getClass(comp), comp.getName());
}
public static inline function getKeyForComponentClasse(classe:Class<Dynamic>, name:String):String {
return Type.getClassName(classe) + (name != null ? "@" + name : "" );
}

public static function getComponentByKey(key:String):A_Component {
public static function getComponentByKey(key:String):Dynamic {
return _INSTANCE.getComponent(key);
}

public static function getList():Vector<A_Component> {
public static function getList():Vector<IComponentDS> {
return _INSTANCE._list;
}
public static function registerComponent(comp:A_Component):Int {
public static function registerComponent(comp:IComponentDS):Int {
return _INSTANCE.register(comp);
}

Expand Down
9 changes: 9 additions & 0 deletions hx/hashds/game/alchemy/HashDSAlchemy.hx
@@ -1,8 +1,13 @@
package hashds.game.alchemy;
import flash.display.DisplayObject;
import flash.errors.Error;
import hashds.game.alchemy.components.common.A_Float;
import hashds.game.alchemy.components.common.A_Tuple2;
import hashds.game.alchemy.components.common.A_Tuple3;
import hashds.game.alchemy.components.common.A_Tuple4;
import hashds.game.alchemy.components.ds.VectorComponent;
import hashds.game.alchemy.nodes.A_MovementNode;
import haxe.rtti.Meta;


/**
Expand All @@ -23,6 +28,10 @@ class HashDSAlchemy
A_Tuple4;

A_Node;

A_Game;

var test = new VectorComponent<DisplayObject>();
}

}
18 changes: 13 additions & 5 deletions hx/hashds/game/alchemy/components/common/A_Float.hx
@@ -1,4 +1,5 @@
package hashds.game.alchemy.components.common;
import de.polygonal.ds.IntIntHashTable;
import flash.Memory;
import hashds.game.alchemy.A_Component;

Expand All @@ -12,16 +13,23 @@ class A_Float extends A_Component
public static inline var BLOCK_SHIFT:Int = 2;
public static inline var BLOCK_SIZE:Int = (1 << BLOCK_SHIFT);

public function new()
public function new(name:String=null)
{
super();
super(name);
_blockSize = BLOCK_SIZE;
}

public inline function create(val:Float):Void {
var index:Int = getAvailableAddress();
set(index, val);
public inline function add(hash:IntIntHashTable, val:Float):Void {
var addr:Int = getAvailableAddress();
hash.set(_id, addr);
set(addr, val);
}
/*
override public function addDefault(hash:IntIntHashTable):Bool {
add(hash, 0);
return true;
}
*/


@field public inline function get(addr:Int):Float {
Expand Down
16 changes: 12 additions & 4 deletions hx/hashds/game/alchemy/components/common/A_Tuple2.hx
@@ -1,4 +1,5 @@
package hashds.game.alchemy.components.common;
import de.polygonal.ds.IntIntHashTable;
import flash.Memory;
import hashds.game.alchemy.A_Component;

Expand All @@ -13,16 +14,23 @@ class A_Tuple2 extends A_Component
public static inline var BLOCK_SHIFT:Int = 3;
public static inline var BLOCK_SIZE:Int = (1 << BLOCK_SHIFT);

public function new()
public function new(name:String=null)
{
super();
super(name);
_blockSize = BLOCK_SIZE;
}

public inline function create(x:Float, y:Float):Void {
public inline function add(hash:IntIntHashTable, x:Float=0, y:Float=0):Void {
var addr:Int = getAvailableAddress();
set(addr, x, y);
hash.set(_id, addr);
set(addr, x, y);
}
/*
override public function addDefault(hash:IntIntHashTable):Bool {
add(hash);
return true;
}
*/

@field public inline function get_x(addr:Int):Float {
return Memory.getFloat(addr);
Expand Down
15 changes: 11 additions & 4 deletions hx/hashds/game/alchemy/components/common/A_Tuple3.hx
@@ -1,4 +1,5 @@
package hashds.game.alchemy.components.common;
import de.polygonal.ds.IntIntHashTable;
import de.polygonal.ds.mem.IntMemory;
import flash.Memory;
import hashds.game.alchemy.A_Component;
Expand All @@ -14,17 +15,23 @@ class A_Tuple3 extends A_Component
public static inline var BLOCK_SIZE:Int = 12;


public function new()
public function new(name:String=null)
{
super();
super(name);
_blockSize = BLOCK_SIZE;
}

public inline function create(x:Float, y:Float, z:Float):Void {
public inline function add(hash:IntIntHashTable, x:Float=0, y:Float=0, z:Float=0):Void {
var addr:Int = getAvailableAddress();
hash.set(_id, addr);
set(addr, x, y, z);
}

/*
override public function addDefault(hash:IntIntHashTable):Bool {
add(hash);
return true;
}
*/
@field public inline function get_x(addr:Int):Float {
return Memory.getFloat(addr);
}
Expand Down
14 changes: 11 additions & 3 deletions hx/hashds/game/alchemy/components/common/A_Tuple4.hx
@@ -1,4 +1,5 @@
package hashds.game.alchemy.components.common;
import de.polygonal.ds.IntIntHashTable;
import flash.Memory;
import hashds.game.alchemy.A_Component;

Expand All @@ -13,15 +14,22 @@ class A_Tuple4 extends A_Component
public static inline var BLOCK_SHIFT:Int = 4;
public static inline var BLOCK_SIZE:Int = (1 << BLOCK_SHIFT);

public function new()
public function new(name:String=null)
{
super();
super(name);
_blockSize = BLOCK_SIZE;
}
public inline function create(x:Float, y:Float, z:Float, w:Float):Void {
public inline function add(hash:IntIntHashTable, x:Float=0, y:Float=0, z:Float=0, w:Float=0):Void {
var addr:Int = getAvailableAddress();
hash.set(_id, addr);
set(addr, x, y, z, w);
}
/*
override public function addDefault(hash:IntIntHashTable):Bool {
add(hash);
return true;
}
*/

@field public inline function get_x(addr:Int):Float {
return Memory.getFloat( addr );
Expand Down
6 changes: 3 additions & 3 deletions hx/hashds/game/alchemy/nodes/A_MovementNode.hx
Expand Up @@ -12,9 +12,9 @@ import hashds.game.alchemy.components.common.A_Tuple2;

class A_MovementNode extends A_Node
{
@component('position') public var position:A_Tuple2;
@component('velocity') public var velocity:A_Tuple2;
@component('rotation') public var rotation:A_Tuple2;
@component(0,'position') public var position:A_Tuple2;
@component(1,'velocity') public var velocity:A_Tuple2;
@component(2,'rotation') public var rotation:A_Tuple2;

public function new()
{
Expand Down

0 comments on commit 64c4f9a

Please sign in to comment.