From 429f0e2bf7bd4f693d16ea0626e63af48db5c7d2 Mon Sep 17 00:00:00 2001 From: Alec McEachran Date: Mon, 12 Aug 2013 15:03:39 -0700 Subject: [PATCH] Making low-level data types 3D-compatible. --- assets/numbers.png | Bin 0 -> 12883 bytes src/dust/camera/data/Camera.hx | 8 +++- .../control/CollectionListenersMap.hx | 3 +- src/dust/geom/data/Delta.hx | 40 ++++++++++++++---- src/dust/geom/data/Position.hx | 40 +++++++++++++----- src/dust/gui/data/Color.hx | 16 +++++++ src/dust/interactive/systems/OffsetSystem.hx | 2 +- .../interactive/systems/ReflectionSystem.hx | 2 +- src/dust/lists/SortedList.hx | 3 +- src/dust/multitouch/data/Touch.hx | 6 +-- src/dust/systems/impl/SystemMap.hx | 3 +- src/dust/systems/impl/Systems.hx | 13 +++++- test/dust/camera/data/CameraTest.hx | 8 ++-- 13 files changed, 107 insertions(+), 37 deletions(-) create mode 100644 assets/numbers.png diff --git a/assets/numbers.png b/assets/numbers.png new file mode 100644 index 0000000000000000000000000000000000000000..46bcd11cac6ac3bdea8eab2b4c5fceb7bbdbe950 GIT binary patch literal 12883 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 BN=pC$ literal 0 HcmV?d00001 diff --git a/src/dust/camera/data/Camera.hx b/src/dust/camera/data/Camera.hx index a473cee..5a93ca6 100644 --- a/src/dust/camera/data/Camera.hx +++ b/src/dust/camera/data/Camera.hx @@ -13,7 +13,10 @@ class Camera public var worldY:Float; public var scalar:Float; - public function new(screenCenterX:Int, screenCenterY:Int, scalar:Float = 1) + public var isPerspective:Bool; + public var fieldOfView:Float; + + public function new(screenCenterX:Int, screenCenterY:Int, scalar:Float = 1.0) { this.screenCenterX = screenCenterX; this.screenCenterY = screenCenterY; @@ -21,6 +24,9 @@ class Camera worldX = 0; worldY = 0; + + isPerspective = false; + fieldOfView = 110.0; } public function set(worldX:Float, worldY:Float) diff --git a/src/dust/collections/control/CollectionListenersMap.hx b/src/dust/collections/control/CollectionListenersMap.hx index b9d1d0f..e75a63e 100644 --- a/src/dust/collections/control/CollectionListenersMap.hx +++ b/src/dust/collections/control/CollectionListenersMap.hx @@ -9,8 +9,7 @@ class CollectionListenersMap var injector:Injector; var types:Array>; - @inject - public function new(injector:Injector) + @inject public function new(injector:Injector) { this.injector = injector; } diff --git a/src/dust/geom/data/Delta.hx b/src/dust/geom/data/Delta.hx index 64e4a02..a99a570 100644 --- a/src/dust/geom/data/Delta.hx +++ b/src/dust/geom/data/Delta.hx @@ -1,32 +1,42 @@ package dust.geom.data; -import dust.math.AnglesUtil; - class Delta { public static function fromPositions(a:Position, b:Position):Delta + { return new Delta(b.x - a.x, b.y - a.y, b.rotation - a.rotation); + } public static function addDeltas(a:Delta, b:Delta):Delta + { return new Delta(a.dx + b.dx, a.dy + b.dy, a.dr + b.dr); + } public static function subtractDeltas(a:Delta, b:Delta):Delta + { return new Delta(b.dx - a.dx, b.dy - a.dy, b.dr - a.dr); + } public static function dotProduct(a:Delta, b:Delta):Float - return a.dx * b.dx + a.dy * b.dy; + { + return a.dx * b.dx + a.dy * b.dy + a.dz * b.dz; + } public var dx:Float; public var dy:Float; + public var dz:Float; public var dr:Float; - public function new(dx:Float = 0.0, dy:Float = 0.0, dr:Float = 0.0) - set(dx, dy, dr); + public function new(dx:Float = 0.0, dy:Float = 0.0, dz:Float = 0.0, dr:Float = 0.0) + { + set(dx, dy, dz, dr); + } - inline public function set(dx:Float = 0.0, dy:Float = 0.0, dr:Float = 0.0) + inline public function set(dx:Float = 0.0, dy:Float = 0.0, dz:Float = 0.0, dr:Float = 0.0) { this.dx = dx; this.dy = dy; + this.dz = dz; this.dr = dr; } @@ -34,6 +44,7 @@ class Delta { this.dx += delta.dx; this.dy += delta.dy; + this.dz += delta.dz; this.dr += delta.dr; } @@ -41,6 +52,7 @@ class Delta { this.dx -= delta.dx; this.dy -= delta.dy; + this.dz -= delta.dz; this.dr -= delta.dr; } @@ -48,6 +60,7 @@ class Delta { dx *= value; dy *= value; + dz *= value; dr *= value; return this; } @@ -60,16 +73,21 @@ class Delta } inline public function clone():Delta - return new Delta(dx, dy, dr); + { + return new Delta(dx, dy, dz, dr); + } inline public function reset() { dx = 0.0; dy = 0.0; + dz = 0.0; } inline public function getMagnitude():Float - return Math.sqrt(dx * dx + dy * dy); + { + return Math.sqrt(dx * dx + dy * dy + dz * dz); + } inline public function setMagnitude(value:Float) { @@ -80,8 +98,12 @@ class Delta } inline public function normalize() + { multiply(1 / getMagnitude()); + } public function toString():String - return "[Delta dx=$dx, dy=$dy]"; + { + return "[Delta dx: $dx, dy: $dy, dz: $dz]"; + } } diff --git a/src/dust/geom/data/Position.hx b/src/dust/geom/data/Position.hx index d4fb6f0..a166c1a 100644 --- a/src/dust/geom/data/Position.hx +++ b/src/dust/geom/data/Position.hx @@ -3,49 +3,60 @@ package dust.geom.data; class Position { public static function areEqual(a:Position, b:Position):Bool + { return a.x == b.x && a.y == b.y; + } public static function areClose(a:Position, b:Position, threshold:Float):Bool { var dx = b.x - a.x; var dy = b.y - a.y; - return ((dx > 0 && dx < threshold) || (dx < 0 && dx > -threshold)) && - ((dy > 0 && dy < threshold) || (dy < 0 && dy > -threshold)); + var dz = b.z - a.z; + + return ((dx >= 0 && dx < threshold) || (dx < 0 && dx > -threshold)) && + ((dy >= 0 && dy < threshold) || (dy < 0 && dy > -threshold)) && + ((dz >= 0 && dz < threshold) || (dz < 0 && dz > -threshold)); } public static function squareDistance(a:Position, b:Position):Float { var dx = b.x - a.x; var dy = b.y - a.y; - return dx * dx + dy * dy; + var dz = b.z - a.z; + + return dx * dx + dy * dy + dz * dz; } public var x:Float; public var y:Float; + public var z:Float; public var rotation:Float; - public function new(x:Float = 0.0, y:Float = 0.0, rotation:Float = 0.0) + public function new(x:Float = 0.0, y:Float = 0.0, z:Float = 0.0, rotation:Float = 0.0) { this.x = x; this.y = y; + this.z = z; this.rotation = rotation; } - public function set(x:Float, y:Float) + public function set(x:Float, y:Float, z:Float) { #if debug - if (x != x || y != y) + if (x != x || y != y || z != z) throw "Position set to null!"; #end this.x = x; this.y = y; + this.z = z; } - public function offset(dx:Float, dy:Float):Position + public function offset(dx:Float, dy:Float, dz:Float):Position { x += dx; y += dy; + z += dz; return this; } @@ -53,27 +64,32 @@ class Position { x += delta.dx; y += delta.dy; + z += delta.dz; return this; } public function clone():Position - return new Position(x, y); + { + return new Position(x, y, z); + } public function setTo(position:Position):Position { this.x = position.x; this.y = position.y; + this.z = position.z; this.rotation = position.rotation; return this; } - public function setToPositionXY(position:Position) + public function setToPosition(position:Position) { this.x = position.x; this.y = position.y; + this.z = position.z; } - public function rotateAbout(angle:Float, center:Position) + public function rotate2DAbout(angle:Float, center:Position) { x -= center.x; y -= center.y; @@ -89,5 +105,7 @@ class Position } public function toString():String - return "[Position x=" + x + ", y=" + y + ", angle=" + rotation + "]"; + { + return '[Position x: $x, y: $y, z: $z, rotation: $rotation]'; + } } diff --git a/src/dust/gui/data/Color.hx b/src/dust/gui/data/Color.hx index ad94078..4bcf17f 100644 --- a/src/dust/gui/data/Color.hx +++ b/src/dust/gui/data/Color.hx @@ -2,6 +2,7 @@ package dust.gui.data; import flash.geom.ColorTransform; +// FIXME for OpenGL rendering, makes more sense it's stored internally as floats class Color { public var rgb:Int; @@ -63,6 +64,21 @@ class Color return this; } + inline public function getR():Float + { + return getRed() / 0xFF; + } + + inline public function getG():Float + { + return getGreen() / 0xFF; + } + + inline public function getB():Float + { + return getBlue() / 0xFF; + } + public function getWhiteTransform(alpha:Float = 1.0):ColorTransform { var r = getRed() / 0xFF; diff --git a/src/dust/interactive/systems/OffsetSystem.hx b/src/dust/interactive/systems/OffsetSystem.hx index 362c8de..a4505b3 100644 --- a/src/dust/interactive/systems/OffsetSystem.hx +++ b/src/dust/interactive/systems/OffsetSystem.hx @@ -32,6 +32,6 @@ class OffsetSystem implements System current.setTo(position); for (offset in offsets.offsets) - offset.offset(dx, dy); + offset.offset(dx, dy, 0); } } \ No newline at end of file diff --git a/src/dust/interactive/systems/ReflectionSystem.hx b/src/dust/interactive/systems/ReflectionSystem.hx index 8f568f0..4de406a 100644 --- a/src/dust/interactive/systems/ReflectionSystem.hx +++ b/src/dust/interactive/systems/ReflectionSystem.hx @@ -40,7 +40,7 @@ class ReflectionSystem implements System var x = center.x + (center.x - position.x) * scale; var y = center.y + (center.y - position.y) * scale; - target.set(x, y); + target.set(x, y, 0); } } } diff --git a/src/dust/lists/SortedList.hx b/src/dust/lists/SortedList.hx index 3fb100b..76dc04b 100644 --- a/src/dust/lists/SortedList.hx +++ b/src/dust/lists/SortedList.hx @@ -38,9 +38,10 @@ class SortedList list.head = item.prev; } - public function remove(data:T) + public function remove(data:T):T { list.remove(data); + return data; } public function iterator():Iterator diff --git a/src/dust/multitouch/data/Touch.hx b/src/dust/multitouch/data/Touch.hx index a8b836f..80577cd 100644 --- a/src/dust/multitouch/data/Touch.hx +++ b/src/dust/multitouch/data/Touch.hx @@ -30,10 +30,10 @@ class Touch public function init(id:Int, x:Float, y:Float, time:Float):Touch { this.id = id; - this.start.set(x, y); + this.start.set(x, y, 0); this.startTime = time; - this.current.set(x, y); + this.current.set(x, y, 0); this.currentTime = time; this.isCurrent = true; @@ -51,7 +51,7 @@ class Touch public function update(x:Float, y:Float, time:Float):Touch { - this.current.set(x, y); + this.current.set(x, y, 0); this.currentTime = time; return this; } diff --git a/src/dust/systems/impl/SystemMap.hx b/src/dust/systems/impl/SystemMap.hx index 40fa7e4..bced369 100644 --- a/src/dust/systems/impl/SystemMap.hx +++ b/src/dust/systems/impl/SystemMap.hx @@ -48,8 +48,7 @@ class SystemMap public function unmap(type:Class) { var mapping = getMapping(type); - if (mapping != null) - mappings.remove(mapping); + return mapping != null ? mappings.remove(mapping) : null; } function getMapping(type:Class):SystemMapping diff --git a/src/dust/systems/impl/Systems.hx b/src/dust/systems/impl/Systems.hx index 0c3dd1d..b28b53c 100644 --- a/src/dust/systems/impl/Systems.hx +++ b/src/dust/systems/impl/Systems.hx @@ -21,13 +21,22 @@ class Systems systemMap.setMetrics(metrics); public function map(type:Class, priority:Int):SystemMapping - return systemMap.map(type, priority); + { + var mapping = systemMap.map(type, priority); + if (areRunning) + mapping.apply(loop); + return mapping; + } public function hasMapping(type:Class):Bool return systemMap.hasMapping(type); public function unmap(type:Class) - systemMap.unmap(type); + { + var mapping = systemMap.unmap(type); + if (mapping != null) + mapping.clear(loop); + } public function setRate(millisecondsBetweenUpdates:Int) loop.setRate(millisecondsBetweenUpdates); diff --git a/test/dust/camera/data/CameraTest.hx b/test/dust/camera/data/CameraTest.hx index 4384348..8425af2 100644 --- a/test/dust/camera/data/CameraTest.hx +++ b/test/dust/camera/data/CameraTest.hx @@ -25,7 +25,7 @@ class CameraTest { camera.set(20, 60); - world.set(100, 100); + world.set(100, 100, 0); camera.toScreen(world, screen); Assert.areEqual(screenCenterX + 80, screen.x); @@ -37,7 +37,7 @@ class CameraTest camera.set(20, 60); camera.scalar = 0.5; - world.set(100, 100); + world.set(100, 100, 0); camera.toScreen(world, screen); Assert.areEqual(screenCenterX + 40, screen.x); @@ -48,7 +48,7 @@ class CameraTest { camera.set(20, 60); - screen.set(screenCenterX + 80, screenCenterY + 40); + screen.set(screenCenterX + 80, screenCenterY + 40, 0); camera.toWorld(screen, world); Assert.areEqual(100, world.x); @@ -60,7 +60,7 @@ class CameraTest camera.set(20, 60); camera.scalar = 0.5; - screen.set(screenCenterX + 40, screenCenterY + 20); + screen.set(screenCenterX + 40, screenCenterY + 20, 0); camera.toWorld(screen, world); Assert.areEqual(100, world.x);