| Index: sky/examples/game/lib/sprite_box.dart
|
| diff --git a/sky/examples/game/lib/sprite_box.dart b/sky/examples/game/lib/sprite_box.dart
|
| index 6e7b6868f401bdd48d09aeb99e904246ad3f3992..7c95ee79d9066d2f80aaf437f2211e518fe1f458 100644
|
| --- a/sky/examples/game/lib/sprite_box.dart
|
| +++ b/sky/examples/game/lib/sprite_box.dart
|
| @@ -11,8 +11,10 @@ enum SpriteBoxTransformMode {
|
|
|
| class SpriteBox extends RenderBox {
|
|
|
| + // Member variables
|
| +
|
| // Root node for drawing
|
| - TransformNode _rootNode;
|
| + Node _rootNode;
|
|
|
| // Tracking of frame rate and updates
|
| double _lastTimeStamp;
|
| @@ -22,7 +24,9 @@ class SpriteBox extends RenderBox {
|
| double _systemWidth;
|
| double _systemHeight;
|
|
|
| - SpriteBox(TransformNode rootNode, [SpriteBoxTransformMode mode = SpriteBoxTransformMode.nativePoints, double width=1024.0, double height=1024.0]) {
|
| + // Setup
|
| +
|
| + SpriteBox(Node rootNode, [SpriteBoxTransformMode mode = SpriteBoxTransformMode.nativePoints, double width=1024.0, double height=1024.0]) {
|
| assert(rootNode != null);
|
| assert(rootNode._spriteBox == null);
|
|
|
| @@ -40,30 +44,31 @@ class SpriteBox extends RenderBox {
|
| _scheduleTick();
|
| }
|
|
|
| - void _addSpriteBoxReference(TransformNode node) {
|
| + void _addSpriteBoxReference(Node node) {
|
| node._spriteBox = this;
|
| - for (TransformNode child in node._children) {
|
| + for (Node child in node._children) {
|
| _addSpriteBoxReference(child);
|
| }
|
| }
|
|
|
| + // Properties
|
| +
|
| double get systemWidth => _systemWidth;
|
| double get systemHeight => _systemHeight;
|
|
|
| - TransformNode get rootNode => _rootNode;
|
| + Node get rootNode => _rootNode;
|
|
|
| void performLayout() {
|
| size = constraints.constrain(Size.infinite);
|
| }
|
|
|
| + // Event handling
|
| +
|
| void handleEvent(Event event, BoxHitTestEntry entry) {
|
| - switch (event.type) {
|
| - case 'pointerdown':
|
| - print("pointerdown");
|
| - break;
|
| - }
|
| }
|
|
|
| + // Rendering
|
| +
|
| void paint(RenderObjectDisplayList canvas) {
|
| // Move to correct coordinate space before drawing
|
| double scaleX = 1.0;
|
| @@ -104,7 +109,6 @@ class SpriteBox extends RenderBox {
|
| scaleX = size.width/_systemWidth;
|
| scaleY = scaleX;
|
| _systemHeight = size.height/scaleX;
|
| - print("systemHeight: $_systemHeight");
|
| break;
|
| case SpriteBoxTransformMode.fixedHeight:
|
| scaleY = size.height/_systemHeight;
|
| @@ -129,6 +133,8 @@ class SpriteBox extends RenderBox {
|
| canvas.restore();
|
| }
|
|
|
| + // Updates
|
| +
|
| int _animationId = 0;
|
|
|
| void _scheduleTick() {
|
| @@ -151,4 +157,29 @@ class SpriteBox extends RenderBox {
|
| _rootNode.update(delta);
|
| _scheduleTick();
|
| }
|
| +
|
| + // Hit tests
|
| +
|
| + List<Node> findNodesAtPosition(Point position) {
|
| + assert(position != null);
|
| +
|
| + List<Node> nodes = [];
|
| +
|
| + // Traverse the render tree and find objects at the position
|
| + _addNodesAtPosition(_rootNode, position, nodes);
|
| +
|
| + return nodes;
|
| + }
|
| +
|
| + _addNodesAtPosition(Node node, Point position, List<Node> list) {
|
| + // Visit children first
|
| + for (Node child in node.children) {
|
| + _addNodesAtPosition(child, position, list);
|
| + }
|
| + // Do the hit test
|
| + Point posInNodeSpace = node.convertPointToNodeSpace(position);
|
| + if (node.hitTest(posInNodeSpace)) {
|
| + list.add(node);
|
| + }
|
| + }
|
| }
|
|
|