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

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

Issue 1151793003: Adds (somewhat crappy) controls to example game (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/game_world.dart
diff --git a/sky/examples/game/lib/game_world.dart b/sky/examples/game/lib/game_world.dart
index 2101512992d37770000f09a082979f9e426a8c68..233541054f525f8be28b37588e577bd7a167937f 100644
--- a/sky/examples/game/lib/game_world.dart
+++ b/sky/examples/game/lib/game_world.dart
@@ -4,32 +4,49 @@ class GameWorld extends TransformNode {
World world;
List<Body> bodies = [];
- Image _image;
+ Body _bodyShip;
+
+ Image _imgBg;
+ Image _imgAsteroid;
+ Image _imgShip;
+
+ double _steeringInput;
+ double _thrustInput;
+ double _lastSteeringSpeed = 0.0;
GameWorld(ImageMap images) {
this.width = 1024.0;
this.height = 1024.0;
-
+
+ // Fetch images
+ _imgBg = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/resources-auto/BurnTexture.png"];
+ _imgAsteroid = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resources-auto/asteroid_big_002.png"];
+ _imgShip = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resources-auto/GG_blueship_Lv3.png"];
+
+ // Create the physics world
world = new World.withGravity(new Vector2(0.0, 0.0));
- // Load and add background
- Image imgBg = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/resources-auto/BurnTexture.png"];
- SpriteNode sprtBg = new SpriteNode.withImage(imgBg);
- sprtBg.width = width;
- sprtBg.height = height;
- sprtBg.pivot = new Vector2(0.0, 0.0);
- this.children.add(sprtBg);
-
- // Load asteroid image
- _image = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resources-auto/asteroid_big_002.png"];
+ // Add a background
+ addBackground();
// Add some asteroids to the game world
- for (int i = 0; i < 50; i++) {
+ for (int i = 0; i < 5; i++) {
addAsteroid(10.0);
}
- for (int i = 0; i < 50; i++) {
+ for (int i = 0; i < 5; i++) {
addAsteroid(20.0);
}
+
+ // Add ship
+ addShip();
+ }
+
+ void addBackground() {
+ SpriteNode sprtBg = new SpriteNode.withImage(_imgBg);
+ sprtBg.width = width;
+ sprtBg.height = height;
+ sprtBg.pivot = new Vector2(0.0, 0.0);
+ this.children.add(sprtBg);
}
void addAsteroid([double radius=20.0]) {
@@ -62,19 +79,78 @@ class GameWorld extends TransformNode {
// Add to list
bodies.add(body);
-
- SpriteNode sprt = new SpriteNode.withImage(_image);
+
+ // Create sprite
+ SpriteNode sprt = new SpriteNode.withImage(_imgAsteroid);
+ sprt.width = radius*2;
+ sprt.height = radius*2;
+// sprt.colorOverlay = new Color(0x33ff0000);
+// sprt.transferMode = TransferMode.plusMode;
+ body.userData = sprt;
+ this.children.add(sprt);
+ }
+
+ void addShip() {
+ double radius = 30.0;
+
+ // Create shape
+ final CircleShape shape = new CircleShape();
+ shape.radius = radius;
+
+ // Define fixture (links body and shape)
+ final FixtureDef activeFixtureDef = new FixtureDef();
+ activeFixtureDef.restitution = 1.0;
+ activeFixtureDef.density = 0.05;
+ activeFixtureDef.shape = shape;
+
+ // Define body
+ final BodyDef bodyDef = new BodyDef();
+ bodyDef.type = BodyType.DYNAMIC;
+ bodyDef.position = new Vector2(0.0, 30.0);
+ bodyDef.linearDamping = 0.0;
+ bodyDef.angularDamping = 0.95;
+
+ // Create body and fixture from definitions
+ final Body body = world.createBody(bodyDef);
+ body.createFixtureFromFixtureDef(activeFixtureDef);
+
+ // Center on screen
+ body.setTransform(new Vector2(width/2.0, height/2.0), 90.0);
+
+ // Add to list
+ bodies.add(body);
+ _bodyShip = body;
+
+ // Create sprite
+ SpriteNode sprt = new SpriteNode.withImage(_imgShip);
sprt.width = radius*2;
sprt.height = radius*2;
- sprt.colorOverlay = new Color(0x33ff0000);
- sprt.transferMode = TransferMode.plusMode;
+ sprt.position = new Vector2(width/2.0, height/2.0);
body.userData = sprt;
this.children.add(sprt);
}
void update(double dt) {
+ // Apply thrust
+ if (_thrustInput != null) {
+ double force = _thrustInput*10000.0;
+ double rad = degrees2radians(_bodyShip.getAngle());
+ _bodyShip.applyLinearImpulse(new Vector2(Math.cos(rad)*force, Math.sin(rad)*force), new Vector2(0.0, 0.0), true);
+ }
+
+ // Simulate world
world.stepDt(1.0/60.0, 10, 10); // Pass in dt
-
+
+ // Apply stearing
+ if (_steeringInput != null) {
+ _lastSteeringSpeed = _steeringInput * 4.0;
+ }
+ else {
+ _lastSteeringSpeed *= 0.75;
+ }
+ _bodyShip.setTransform(_bodyShip.position, _bodyShip.getAngle() + _lastSteeringSpeed);
+
+ // Update all sprites
bodies.forEach(updateBody);
}
@@ -100,4 +176,16 @@ class GameWorld extends TransformNode {
sprt.position = body.position;
sprt.rotation = body.getAngle();
}
-}
+
+ void controlSteering(double input) {
+ _steeringInput = input;
+ }
+
+ void controlThrust(double input) {
+ _thrustInput = input;
+ }
+
+ void controlFire() {
+
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698