From dd083533f4a9e39e7f27ff5aae50981f641bdc71 Mon Sep 17 00:00:00 2001 From: Erick Zanardo Date: Thu, 17 Mar 2022 15:53:44 -0300 Subject: [PATCH] feat: spaceship working --- .../components/spaceship/android-bottom.png | Bin 0 -> 9692 bytes .../components/spaceship/android-top.png | Bin 0 -> 3442 bytes lib/game/components/spaceship.dart | 61 +++++++++++++++++- lib/game/pinball_game.dart | 1 + 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 assets/images/components/spaceship/android-bottom.png create mode 100644 assets/images/components/spaceship/android-top.png diff --git a/assets/images/components/spaceship/android-bottom.png b/assets/images/components/spaceship/android-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..90dfdc010a490cf4b734ffdf4748187efc338503 GIT binary patch literal 9692 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 S;db6{6%39U>*XD_yZL|a0|#jU literal 0 HcmV?d00001 diff --git a/assets/images/components/spaceship/android-top.png b/assets/images/components/spaceship/android-top.png new file mode 100644 index 0000000000000000000000000000000000000000..92c99db77286eba49b4dd5316fd0779757ac0037 GIT binary patch literal 3442 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 UyEW@elK=n!07*qoM6N<$f*dqx-2eap literal 0 HcmV?d00001 diff --git a/lib/game/components/spaceship.dart b/lib/game/components/spaceship.dart index 6a2cff00..51f80fb7 100644 --- a/lib/game/components/spaceship.dart +++ b/lib/game/components/spaceship.dart @@ -4,9 +4,7 @@ import 'dart:async'; import 'dart:math'; import 'package:flame/components.dart'; -import 'package:flame_forge2d/body_component.dart'; import 'package:flame_forge2d/flame_forge2d.dart'; -import 'package:flutter/material.dart'; import 'package:pinball/game/game.dart'; const _spaceShipBits = 0x0002; @@ -72,6 +70,41 @@ class SpaceshipSauce extends BodyComponent { } } +class SpaceshipBridgeTop extends BodyComponent { + SpaceshipBridgeTop( + this.position, + ) : super(priority: 6); + + // TODO change to initial position + final Vector2 position; + + static const spritePath = 'components/spaceship/android-top.png'; + + @override + Future onLoad() async { + await super.onLoad(); + + final sprite = await gameRef.loadSprite(spritePath); + await add( + SpriteComponent( + sprite: sprite, + anchor: Anchor.center, + size: Vector2(Spaceship.size / 2.5 - 1, Spaceship.size / 5), + ), + ); + } + + @override + Body createBody() { + final bodyDef = BodyDef() + ..userData = this + ..position = position + Vector2(0, 5.5) + ..type = BodyType.static; + + return world.createBody(bodyDef); + } +} + class SpaceshipEntrance extends BodyComponent { SpaceshipEntrance(this.position); @@ -113,10 +146,32 @@ class SpaceshipBridge extends BodyComponent { // TODO change to initial position final Vector2 position; + static const spritePath = 'components/spaceship/android-bottom.png'; + + @override + Future onLoad() async { + await super.onLoad(); + + renderBody = false; + + final sprite = await gameRef.images.load(spritePath); + await add( + SpriteAnimationComponent.fromFrameData( + sprite, + SpriteAnimationData.sequenced( + amount: 14, + stepTime: 0.2, + textureSize: Vector2(160, 114), + ), + size: Vector2.all(Spaceship.size / 2.5), + anchor: Anchor.center, + ), + ); + } + @override Body createBody() { final circleShape = CircleShape()..radius = Spaceship.size / 5; - paint = Paint()..color = Colors.green; final bodyDef = BodyDef() ..userData = this diff --git a/lib/game/pinball_game.dart b/lib/game/pinball_game.dart index 9b273081..d8b5bad0 100644 --- a/lib/game/pinball_game.dart +++ b/lib/game/pinball_game.dart @@ -84,6 +84,7 @@ class PinballGame extends Forge2DGame unawaited(add(SpaceshipSauce(position))); unawaited(add(SpaceshipEntrance(position))); unawaited(add(SpaceshipBridge(position))); + unawaited(add(SpaceshipBridgeTop(position))); unawaited(add(SpaceshipHole(position - Vector2(5, 5)))); unawaited(add(SpaceshipHole(position - Vector2(-5, 5))));