| Index: sky/examples/game/lib/transform_node.dart
|
| diff --git a/sky/examples/game/lib/transform_node.dart b/sky/examples/game/lib/transform_node.dart
|
| deleted file mode 100644
|
| index 07c08b6233dad84ed27b9996cfd719f4421f10a5..0000000000000000000000000000000000000000
|
| --- a/sky/examples/game/lib/transform_node.dart
|
| +++ /dev/null
|
| @@ -1,255 +0,0 @@
|
| -part of sprites;
|
| -
|
| -double degrees2radians(double degrees) => degrees * Math.PI/180.8;
|
| -
|
| -double radians2degrees(double radians) => radians * 180.0/Math.PI;
|
| -
|
| -class TransformNode {
|
| -
|
| - // Member variables
|
| -
|
| - SpriteBox _spriteBox;
|
| - TransformNode _parent;
|
| -
|
| - Vector2 _position;
|
| - double _rotation;
|
| -
|
| - bool _isMatrixDirty;
|
| - Matrix3 _transform;
|
| - Matrix3 _pivotTransform;
|
| -
|
| - double _width;
|
| - double _height;
|
| -
|
| - double _scaleX;
|
| - double _scaleY;
|
| -
|
| - Vector2 _pivot;
|
| -
|
| - bool visible;
|
| -
|
| - double _zPosition;
|
| - int _addedOrder;
|
| - int _childrenLastAddedOrder;
|
| - bool _childrenNeedSorting;
|
| -
|
| - List<TransformNode>_children;
|
| -
|
| - // Constructors
|
| -
|
| - TransformNode() {
|
| - _width = 0.0;
|
| - _height = 0.0;
|
| - _rotation = 0.0;
|
| - _pivot = new Vector2(0.0, 0.0);
|
| - _position = new Vector2(0.0, 0.0);
|
| - _scaleX = _scaleY = 1.0;
|
| - _isMatrixDirty = false;
|
| - _transform = new Matrix3.identity();
|
| - _pivotTransform = new Matrix3.identity();
|
| - _children = [];
|
| - _childrenNeedSorting = false;
|
| - _childrenLastAddedOrder = 0;
|
| - visible = true;
|
| - }
|
| -
|
| - // Property setters and getters
|
| -
|
| - SpriteBox get spriteBox => _spriteBox;
|
| -
|
| - TransformNode get parent => _parent;
|
| -
|
| - double get rotation => _rotation;
|
| -
|
| - void set rotation(double rotation) {
|
| - _rotation = rotation;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - Vector2 get position => _position;
|
| -
|
| - void set position(Vector2 position) {
|
| - _position = position;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - double get width => _width;
|
| -
|
| - void set width(double width) {
|
| - _width = width;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - double get height => _height;
|
| -
|
| - void set height(double height) {
|
| - _height = height;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - Vector2 get pivot => _pivot;
|
| -
|
| - void set pivot(Vector2 pivot) {
|
| - _pivot = pivot;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - double get zPosition => _zPosition;
|
| -
|
| - void set zPosition(double zPosition) {
|
| - _zPosition = zPosition;
|
| - if (_parent != null) {
|
| - _parent._childrenNeedSorting = true;
|
| - }
|
| - }
|
| -
|
| - double get scale {
|
| - assert(_scaleX == _scaleY);
|
| - return _scaleX;
|
| - }
|
| -
|
| - void set scale(double scale) {
|
| - _scaleX = _scaleY = scale;
|
| - _isMatrixDirty = true;
|
| - }
|
| -
|
| - List<TransformNode> get children => _children;
|
| -
|
| - // Adding and removing children
|
| -
|
| - void addChild(TransformNode child) {
|
| - assert(child._parent == null);
|
| -
|
| - _childrenNeedSorting = true;
|
| - _children.add(child);
|
| - child._parent = this;
|
| - child._spriteBox = this._spriteBox;
|
| - _childrenLastAddedOrder += 1;
|
| - child._addedOrder = _childrenLastAddedOrder;
|
| - }
|
| -
|
| - void removeChild(TransformNode child) {
|
| - if (_children.remove(child)) {
|
| - child._parent = null;
|
| - child._spriteBox = null;
|
| - }
|
| - }
|
| -
|
| - void removeFromParent() {
|
| - assert(_parent != null);
|
| - _parent.removeFromParent();
|
| - }
|
| -
|
| - void removeAllChildren() {
|
| - for (TransformNode child in _children) {
|
| - child._parent = null;
|
| - child._spriteBox = null;
|
| - }
|
| - _children = [];
|
| - _childrenNeedSorting = false;
|
| - }
|
| -
|
| - // Calculating the transformation matrix
|
| -
|
| - Matrix3 get transformMatrix {
|
| - if (!_isMatrixDirty) {
|
| - return _transform;
|
| - }
|
| -
|
| - Vector2 pivotInPoints = new Vector2(_width * _pivot[0], _height * _pivot[1]);
|
| -
|
| - double cx, sx, cy, sy;
|
| -
|
| - if (_rotation == 0) {
|
| - cx = 1.0;
|
| - sx = 0.0;
|
| - cy = 1.0;
|
| - sy = 0.0;
|
| - }
|
| - else {
|
| - double radiansX = degrees2radians(_rotation);
|
| - double radiansY = degrees2radians(_rotation);
|
| -
|
| - cx = Math.cos(radiansX);
|
| - sx = Math.sin(radiansX);
|
| - cy = Math.cos(radiansY);
|
| - sy = Math.sin(radiansY);
|
| - }
|
| -
|
| - // TODO: Add support for scale
|
| - double scaleX = 1.0;
|
| - double scaleY = 1.0;
|
| -
|
| - // Create transformation matrix for scale, position and rotation
|
| - _transform.setValues(cy * scaleX, sy * scaleX, 0.0,
|
| - -sx * scaleY, cx * scaleY, 0.0,
|
| - _position[0], _position[1], 1.0);
|
| -
|
| - if (_pivot.x != 0 || _pivot.y != 0) {
|
| - _pivotTransform.setValues(1.0, 0.0, 0.0, 0.0, 1.0, 0.0, pivotInPoints[0], pivotInPoints[1], 1.0);
|
| - _transform.multiply(_pivotTransform);
|
| - }
|
| -
|
| - return _transform;
|
| - }
|
| -
|
| - // Rendering
|
| -
|
| - void visit(PictureRecorder canvas) {
|
| - if (!visible) return;
|
| -
|
| - prePaint(canvas);
|
| - paint(canvas);
|
| - visitChildren(canvas);
|
| - postPaint(canvas);
|
| - }
|
| -
|
| - void prePaint(PictureRecorder canvas) {
|
| - canvas.save();
|
| -
|
| - canvas.translate(_position[0], _position[1]);
|
| - canvas.rotate(degrees2radians(_rotation));
|
| - canvas.scale(_scaleX, _scaleY);
|
| - canvas.translate(-_width*_pivot[0], -_height*_pivot[1]);
|
| -
|
| - // TODO: Use transformation matrix instead of individual calls
|
| -// List<double> matrix = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0];
|
| -// this.transformMatrix.copyIntoArray(matrix);
|
| -// canvas.concat(matrix);
|
| - }
|
| -
|
| - void paint(PictureRecorder canvas) {
|
| -
|
| - }
|
| -
|
| - void visitChildren(PictureRecorder canvas) {
|
| - // Sort children primarily by zPosition, secondarily by added order
|
| - if (_childrenNeedSorting) {
|
| - _children.sort((TransformNode a, TransformNode b) {
|
| - if (a._zPosition == b._zPosition) {
|
| - return b._addedOrder - a._addedOrder;
|
| - }
|
| - else if (a._zPosition > b._zPosition) {
|
| - return 1;
|
| - }
|
| - else {
|
| - return -1;
|
| - }
|
| - });
|
| - _childrenNeedSorting = false;
|
| - }
|
| -
|
| - // Visit each child
|
| - _children.forEach((child) => child.visit(canvas));
|
| - }
|
| -
|
| - void postPaint(PictureRecorder canvas) {
|
| - canvas.restore();
|
| - }
|
| -
|
| - // Receiving update calls
|
| -
|
| - void update(double dt) {
|
| -
|
| - }
|
| -}
|
|
|