From ff3e636635c2c40e4ae64ab6486b0041b38fbf53 Mon Sep 17 00:00:00 2001 From: Viktor Lidholt Date: Mon, 5 Oct 2015 16:13:32 -0700 Subject: [PATCH] Makes physics bodies fixture elements settable --- .../flutter_sprites/lib/physics_body.dart | 74 ++++++++++++++++--- 1 file changed, 65 insertions(+), 9 deletions(-) diff --git a/packages/flutter_sprites/lib/physics_body.dart b/packages/flutter_sprites/lib/physics_body.dart index e9446b65e1f..d42fa8d98b4 100644 --- a/packages/flutter_sprites/lib/physics_body.dart +++ b/packages/flutter_sprites/lib/physics_body.dart @@ -9,10 +9,10 @@ class PhysicsBody { PhysicsBody(this.shape, { this.tag: null, this.type: PhysicsBodyType.dynamic, - this.density: 1.0, - this.friction: 0.0, - this.restitution: 0.0, - this.isSensor: false, + double density: 1.0, + double friction: 0.0, + double restitution: 0.0, + bool isSensor: false, this.linearVelocity: Offset.zero, this.angularVelocity: 0.0, this.linearDampening: 0.0, @@ -23,7 +23,12 @@ class PhysicsBody { this.bullet: false, this.active: true, this.gravityScale: 1.0 - }); + }) { + this.density = density; + this.friction = friction; + this.restitution = restitution; + this.isSensor = isSensor; + } Object tag; @@ -31,10 +36,61 @@ class PhysicsBody { PhysicsBodyType type; - double density; - double friction; - double restitution; - bool isSensor; + double _density; + + double get density => _density; + + set density(double density) { + _density = density; + + if (_body == null) + return; + for(box2d.Fixture f = _body.getFixtureList(); f != null; f = f.getNext()) { + f.setDensity(density); + } + } + + double _friction; + + double get friction => _friction; + + set friction(double friction) { + _friction = friction; + + if (_body == null) + return; + for(box2d.Fixture f = _body.getFixtureList(); f != null; f = f.getNext()) { + f.setFriction(friction); + } + } + + double _restitution; + + double get restitution => _restitution; + + set restitution(double restitution) { + _restitution = restitution; + + if (_body == null) + return; + for(box2d.Fixture f = _body.getFixtureList(); f != null; f = f.getNext()) { + f.setRestitution(restitution); + } + } + + bool _isSensor; + + bool get isSensor => _isSensor; + + set isSensor(bool isSensor) { + _isSensor = isSensor; + + if (_body == null) + return; + for(box2d.Fixture f = _body.getFixtureList(); f != null; f = f.getNext()) { + f.setSensor(isSensor); + } + } Offset linearVelocity; double angularVelocity;