Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(535)

Unified Diff: sky/examples/game/lib/sprite_box.dart

Issue 1180703002: Fixes matrix transformations in sprites (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
+ }
+ }
}

Powered by Google App Engine
This is Rietveld 408576698