Cleaning up the code so it is more generalized.

This commit is contained in:
Marco Salazar 2021-09-16 15:15:32 -06:00
parent 5e48cb0444
commit 42873d274a
12 changed files with 177 additions and 342 deletions

View File

@ -42,12 +42,4 @@ class Bug extends MovingObject {
gameRef.blockSize,
);
}
double getRightEnd() {
return sprite.position.x + sprite.width;
}
void remove() {
sprite.remove();
}
}

View File

@ -1,5 +1,4 @@
import 'dart:math';
import 'package:firo_runner/holder.dart';
import 'package:firo_runner/platform.dart';
import 'package:flame/extensions.dart';
import 'package:flame/flame.dart';
@ -7,30 +6,16 @@ import 'package:flame/flame.dart';
import 'package:firo_runner/bug.dart';
import 'package:firo_runner/main.dart';
class BugHolder {
class BugHolder extends Holder {
late Image bug;
late Image breaking;
Random random = Random();
late List<List<Bug>> bugs = [];
Future loadBugs() async {
@override
Future load() async {
bug = await Flame.images.load("bug-frames.png");
breaking = await Flame.images.load("bug-break-frames.png");
}
void setUp() {
for (int i = 0; i < bugs.length; i++) {
for (int j = 0; j < bugs[i].length; j++) {
remove(bugs[i], j);
}
}
bugs = [];
for (int i = 0; i < 9; i++) {
bugs.add([]);
}
}
getBug(String state) {
switch (state) {
case "normal":
@ -41,14 +26,14 @@ class BugHolder {
}
bool generateBug(MyGame gameRef, int level, bool force) {
if (bugs[level].isNotEmpty) {
if (objects[level].isNotEmpty) {
return false;
}
if (random.nextInt(100) > 25) {
return true;
} else {
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
int nearestPlatform = getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);
@ -72,59 +57,15 @@ class BugHolder {
return false;
}
bugs[level].add(bug);
objects[level].add(bug);
gameRef.add(bug.sprite);
if (platform != null) {
platform.removeChildren.add(() {
bugs[level].remove(bug);
objects[level].remove(bug);
bug.remove();
});
}
return false;
}
}
int totalBugs() {
int total = 0;
for (List<Bug> levelBugs in bugs) {
total += levelBugs.length;
}
return total;
}
void update(double dt) {
for (List<Bug> bugLevel in bugs) {
for (Bug p in bugLevel) {
p.update(dt);
}
}
}
void remove(List<Bug> levelHolder, int j) {
levelHolder[j].remove();
levelHolder[j].sprite.remove();
levelHolder.removeAt(j);
}
void removePast(MyGame gameRef) {
for (List<Bug> bugLevel in bugs) {
for (int i = 0; i < bugLevel.length;) {
if (bugLevel[i].sprite.x + bugLevel[i].sprite.width < 0) {
remove(bugLevel, i);
continue;
}
i++;
}
}
}
void resize(Vector2 newSize, double xRatio, double yRatio) {
for (List<Bug> platformLevel in bugs) {
for (Bug p in platformLevel) {
p.resize(newSize, xRatio, yRatio);
p.sprite.y = (p.sprite.position.y / p.gameRef.blockSize).round() *
p.gameRef.blockSize;
}
}
}
}

View File

@ -32,12 +32,4 @@ class Coin extends MovingObject {
gameRef.blockSize * (platform.width / platform.height / 14),
);
}
double getRightEnd() {
return sprite.position.x + sprite.width;
}
void remove() {
sprite.remove();
}
}

View File

@ -1,5 +1,4 @@
import 'dart:math';
import 'package:firo_runner/holder.dart';
import 'package:flame/flame.dart';
import 'package:firo_runner/coin.dart';
@ -7,45 +6,31 @@ import 'package:firo_runner/main.dart';
import 'package:flame/extensions.dart';
import 'package:firo_runner/platform.dart';
class CoinHolder {
class CoinHolder extends Holder {
late Image coin;
Random random = Random();
late List<List<Coin>> coins = [];
Future loadCoins() async {
@override
Future load() async {
coin = await Flame.images.load("coin-frames.png");
}
void setUp() {
for (int i = 0; i < coins.length; i++) {
for (int j = 0; j < coins[i].length; j++) {
remove(coins[i], j);
}
}
coins = [];
for (int i = 0; i < 9; i++) {
coins.add([]);
}
}
getCoin() {
Image getCoin() {
return coin;
}
bool generateCoin(MyGame gameRef, int level, bool force) {
if (totalCoins() > 5) {
if (total() > 5) {
return false;
}
if (coins[level].isNotEmpty) {
if (objects[level].isNotEmpty) {
return false;
}
if (random.nextInt(100) > 25) {
return true;
} else {
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
int nearestPlatform = getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);
@ -66,51 +51,9 @@ class CoinHolder {
return false;
}
coins[level].add(coin);
objects[level].add(coin);
gameRef.add(coin.sprite);
}
return false;
}
int totalCoins() {
int total = 0;
for (List<Coin> levelCoins in coins) {
total += levelCoins.length;
}
return total;
}
void update(double dt) {
for (List<Coin> coinLevel in coins) {
for (Coin p in coinLevel) {
p.update(dt);
}
}
}
void remove(List<Coin> levelHolder, int j) {
levelHolder[j].remove();
levelHolder[j].sprite.remove();
levelHolder.removeAt(j);
}
void removePast(MyGame gameRef) {
for (List<Coin> coinLevel in coins) {
for (int i = 0; i < coinLevel.length;) {
if (coinLevel[i].sprite.x + coinLevel[i].sprite.width < 0) {
remove(coinLevel, i);
continue;
}
i++;
}
}
}
void resize(Vector2 newSize, double xRatio, double yRatio) {
for (List<Coin> coinLevel in coins) {
for (Coin p in coinLevel) {
p.resize(newSize, xRatio, yRatio);
}
}
}
}

67
lib/holder.dart Normal file
View File

@ -0,0 +1,67 @@
import 'dart:math';
import 'package:firo_runner/moving_object.dart';
import 'package:firo_runner/main.dart';
import 'package:flame/extensions.dart';
class Holder {
Random random = Random();
late List<List<MovingObject>> objects = [];
Future load() async {}
void setUp() {
for (int i = 0; i < objects.length; i++) {
for (int j = 0; j < objects[i].length; j++) {
remove(objects[i], j);
}
}
objects = [];
for (int i = 0; i < 9; i++) {
objects.add([]);
}
}
int total() {
int total = 0;
for (List<MovingObject> levelObjects in objects) {
total += levelObjects.length;
}
return total;
}
void update(double dt) {
for (List<MovingObject> objectLevel in objects) {
for (MovingObject p in objectLevel) {
p.update(dt);
}
}
}
void remove(List<MovingObject> levelHolder, int j) {
levelHolder[j].remove();
levelHolder.removeAt(j);
}
void removePast(MyGame gameRef) {
for (List<MovingObject> objectLevel in objects) {
for (int i = 0; i < objectLevel.length;) {
if (objectLevel[i].sprite.x + objectLevel[i].sprite.width < 0) {
remove(objectLevel, i);
continue;
}
i++;
}
}
}
void resize(Vector2 newSize, double xRatio, double yRatio) {
for (List<MovingObject> platformLevel in objects) {
for (MovingObject p in platformLevel) {
p.resize(newSize, xRatio, yRatio);
}
}
}
}

View File

@ -5,6 +5,7 @@ import 'package:firo_runner/circuit_background.dart';
import 'package:firo_runner/coin_holder.dart';
import 'package:firo_runner/firework.dart';
import 'package:firo_runner/game_state.dart';
import 'package:firo_runner/moving_object.dart';
import 'package:firo_runner/platform.dart';
import 'package:firo_runner/platform_holder.dart';
import 'package:firo_runner/wire.dart';
@ -18,8 +19,6 @@ import 'package:flame/keyboard.dart';
import 'package:flame_audio/flame_audio.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:firo_runner/bug.dart';
import 'package:firo_runner/coin.dart';
import 'package:firo_runner/runner.dart';
import 'package:flutter/foundation.dart' show kIsWeb;
@ -48,6 +47,16 @@ void main() async {
runApp(GameWidget(game: myGame));
}
int getNearestPlatform(int level) {
return level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
}
class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
TextPaint fireworksPaint = TextPaint(
config: const TextPaintConfig(
@ -85,13 +94,13 @@ class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
circuitBackground = CircuitBackground(this);
await circuitBackground.load();
platformHolder = PlatformHolder();
await platformHolder.loadPlatforms();
await platformHolder.load();
coinHolder = CoinHolder();
await coinHolder.loadCoins();
await coinHolder.load();
wireHolder = WireHolder();
await wireHolder.loadWires();
await wireHolder.load();
bugHolder = BugHolder();
await bugHolder.loadBugs();
await bugHolder.load();
fireworks = Firework(this);
await fireworks.load();
@ -143,24 +152,24 @@ class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
3 * rect.top - 2 * rect.bottom - 1,
3 * rect.right - 2 * rect.left + 1,
3 * rect.bottom - 2 * rect.top + 1);
for (List<Wire> wireLevel in wireHolder.wires) {
for (Wire wire in wireLevel) {
for (List<MovingObject> wireLevel in wireHolder.objects) {
for (MovingObject wire in wireLevel) {
if (wire.intersect(obstacleBounds) != "none") {
return true;
}
}
}
for (List<Coin> coinLevel in coinHolder.coins) {
for (Coin coin in coinLevel) {
for (List<MovingObject> coinLevel in coinHolder.objects) {
for (MovingObject coin in coinLevel) {
if (coin.intersect(obstacleBounds) != "none") {
return true;
}
}
}
for (List<Bug> bugLevel in bugHolder.bugs) {
for (Bug bug in bugLevel) {
for (List<MovingObject> bugLevel in bugHolder.objects) {
for (MovingObject bug in bugLevel) {
if (bug.intersect(obstacleBounds) != "none") {
return true;
}
@ -204,8 +213,8 @@ class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
runner.setUp();
fillScreen();
platformHolder.platforms[2][0].sprite.current = PlatformState.left;
platformHolder.platforms[5][0].sprite.current = PlatformState.left;
platformHolder.objects[2][0].sprite.current = PlatformState.left;
platformHolder.objects[5][0].sprite.current = PlatformState.left;
}
@override

View File

@ -26,6 +26,14 @@ class MovingObject {
sprite.position = sprite.position - Vector2(velocity * dt, 0);
}
double getRightEnd() {
return sprite.position.x + sprite.width;
}
void remove() {
sprite.remove();
}
String intersect(Rect other) {
final collision = sprite.toRect().intersect(other);
if (!collision.isEmpty) {

View File

@ -78,11 +78,13 @@ class Platform extends MovingObject {
);
}
double getRightEnd() {
return sprite.position.x + sprite.width;
@override
void remove() {
removeChildrenObjects();
super.remove();
}
void remove() {
void removeChildrenObjects() {
if (removeChildren.isNotEmpty) {
for (Function removeChild in removeChildren) {
removeChild();
@ -92,7 +94,7 @@ class Platform extends MovingObject {
@override
void update(double dt) {
List<Platform> platformLevel = gameRef.platformHolder.platforms[row];
List<MovingObject> platformLevel = gameRef.platformHolder.objects[row];
int index = platformLevel.indexOf(this);
Vector2 right = Vector2(-200, -200);
if (index + 1 < platformLevel.length) {

View File

@ -1,13 +1,11 @@
import 'dart:math';
import 'package:firo_runner/bug.dart';
import 'package:firo_runner/holder.dart';
import 'package:firo_runner/main.dart';
import 'package:firo_runner/wire.dart';
import 'package:firo_runner/moving_object.dart';
import 'package:flame/flame.dart';
import 'package:firo_runner/platform.dart';
import 'package:flame/extensions.dart';
class PlatformHolder {
class PlatformHolder extends Holder {
late Image l1;
late Image l2;
late Image m1;
@ -16,12 +14,11 @@ class PlatformHolder {
late Image r2;
late Image o1;
late Image o2;
late List<List<Platform>> platforms = [];
int timeSinceLastTopHole = 0;
int timeSinceLastBottomHole = 0;
Random random = Random();
Future loadPlatforms() async {
@override
Future load() async {
l1 = await Flame.images.load('platform-left-nowire-frames.png');
l2 = await Flame.images.load('platform-left-wire-frames.png');
m1 = await Flame.images.load('platform-mid-nowire-frames.png');
@ -32,47 +29,40 @@ class PlatformHolder {
o2 = await Flame.images.load('platform-single-wire-frames.png');
}
@override
void setUp() {
timeSinceLastTopHole = 0;
timeSinceLastBottomHole = 0;
for (int i = 0; i < platforms.length; i++) {
for (int j = 0; j < platforms[i].length; j++) {
remove(platforms[i], j);
}
}
platforms = [];
for (int i = 0; i < 9; i++) {
platforms.add([]);
}
super.setUp();
}
void removeUnfairObstacles(
MyGame gameRef, Platform currentPlatform, int from, int to) {
for (int i = from; i <= to; i++) {
if (i == 0) {
for (Bug bug in gameRef.bugHolder.bugs[0]) {
List<MovingObject> bugLevel = gameRef.bugHolder.objects[0];
for (MovingObject bug in gameRef.bugHolder.objects[0]) {
if (bug.sprite.x >= currentPlatform.sprite.x &&
bug.sprite.x <
currentPlatform.sprite.x + 4 * currentPlatform.sprite.width) {
gameRef.bugHolder.bugs[0].remove(bug);
bug.remove();
gameRef.bugHolder.remove(bugLevel, bugLevel.indexOf(bug));
}
}
for (Wire wire in gameRef.wireHolder.wires[0]) {
List<MovingObject> wireLevel = gameRef.wireHolder.objects[0];
for (MovingObject wire in gameRef.wireHolder.objects[0]) {
if (wire.sprite.x >= currentPlatform.sprite.x &&
wire.sprite.x <
currentPlatform.sprite.x + 4 * currentPlatform.sprite.width) {
gameRef.wireHolder.wires[0].remove(wire);
wire.remove();
gameRef.wireHolder.remove(wireLevel, wireLevel.indexOf(wire));
}
}
} else {
int nearestPlatform = getNearestPlatform(i);
for (Platform platform in platforms[nearestPlatform]) {
for (MovingObject platform in objects[nearestPlatform]) {
if (platform.sprite.x >= currentPlatform.sprite.x &&
platform.sprite.x <
currentPlatform.sprite.x + 4 * currentPlatform.sprite.width) {
platform.remove();
(platform as Platform).removeChildrenObjects();
platform.prohibitObstacles = true;
}
}
@ -80,16 +70,6 @@ class PlatformHolder {
}
}
int getNearestPlatform(int level) {
return level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
}
void generatePlatforms(MyGame gameRef) {
while (!generatePlatform(gameRef, 2)) {
timeSinceLastTopHole++;
@ -105,29 +85,31 @@ class PlatformHolder {
if (topChance > 50) {
removeUnfairObstacles(
gameRef, platforms[2][platforms[2].length - 4], 0, 4);
gameRef, objects[2][objects[2].length - 4] as Platform, 0, 4);
// Create an opening in the top.
remove(platforms[2], platforms[2].length - 2);
remove(platforms[2], platforms[2].length - 2);
remove(objects[2], objects[2].length - 2);
remove(objects[2], objects[2].length - 2);
timeSinceLastTopHole = 0;
}
if (bottomChance > 30) {
Platform start = platforms[5].elementAt(platforms[5].length - 10);
Platform start = objects[5].elementAt(objects[5].length - 10) as Platform;
generatePlatform(gameRef, 8, xPosition: start.sprite.position.x);
for (int i = 0; i < 8; i++) {
generatePlatform(gameRef, 8);
}
int lastToRemove = platforms[5].length - 3;
int firstToRemove = platforms[5].length - 10;
int lastToRemove = objects[5].length - 3;
int firstToRemove = objects[5].length - 10;
removeUnfairObstacles(gameRef, platforms[5][lastToRemove - 1], 3, 7);
remove(platforms[5], lastToRemove);
remove(platforms[5], lastToRemove);
removeUnfairObstacles(
gameRef, objects[5][lastToRemove - 1] as Platform, 3, 7);
remove(objects[5], lastToRemove);
remove(objects[5], lastToRemove);
removeUnfairObstacles(gameRef, platforms[5][firstToRemove - 1], 3, 7);
remove(platforms[5], firstToRemove);
remove(platforms[5], firstToRemove);
removeUnfairObstacles(
gameRef, objects[5][firstToRemove - 1] as Platform, 3, 7);
remove(objects[5], firstToRemove);
remove(objects[5], firstToRemove);
timeSinceLastBottomHole = 0;
}
@ -135,8 +117,8 @@ class PlatformHolder {
bool generatePlatform(MyGame gameRef, int level, {double xPosition = 0}) {
double xCoordinate = xPosition;
if (platforms[level].isNotEmpty && xPosition == 0) {
xCoordinate = platforms[level].last.getRightEnd();
if (objects[level].isNotEmpty && xPosition == 0) {
xCoordinate = objects[level].last.getRightEnd();
}
if (xCoordinate > gameRef.size.x + 2000) {
@ -146,64 +128,30 @@ class PlatformHolder {
platform.setPosition(xCoordinate, gameRef.blockSize * level);
platform.row = level;
gameRef.add(platform.sprite);
platforms[level].add(platform);
objects[level].add(platform);
return false;
}
}
void update(double dt) {
for (List<Platform> platformLevel in platforms) {
for (Platform p in platformLevel) {
p.update(dt);
}
}
}
void remove(List<Platform> levelHolder, int j) {
levelHolder[j].remove();
levelHolder[j].sprite.remove();
levelHolder.removeAt(j);
}
void removePast(MyGame gameRef) {
for (List<Platform> platformLevel in platforms) {
while (platformLevel.isNotEmpty &&
platformLevel[0].sprite.position.x + platformLevel[0].sprite.width <
0) {
remove(platformLevel, 0);
}
}
}
double getFlushX() {
Platform platform =
platforms[2].firstWhere((element) => element.sprite.x > 0, orElse: () {
return platforms[5].firstWhere((element) => element.sprite.x > 0,
MovingObject platform =
objects[2].firstWhere((element) => element.sprite.x > 0, orElse: () {
return objects[5].firstWhere((element) => element.sprite.x > 0,
orElse: () {
return platforms[8].firstWhere((element) => element.sprite.x > 0);
return objects[8].firstWhere((element) => element.sprite.x > 0);
});
});
return platform.sprite.x;
}
Platform? getPlatformOffScreen(int level) {
for (int i = 0; i < platforms[level].length; i++) {
Platform p = platforms[level][i];
for (int i = 0; i < objects[level].length; i++) {
Platform p = objects[level][i] as Platform;
if (p.sprite.x > p.gameRef.size.x) {
int chosenIndex = random.nextInt(platforms[level].length - i) + i;
return platforms[level][chosenIndex];
int chosenIndex = random.nextInt(objects[level].length - i) + i;
return objects[level][chosenIndex] as Platform;
}
}
return null;
}
void resize(Vector2 newSize, double xRatio, double yRatio) {
for (List<Platform> platformLevel in platforms) {
for (Platform p in platformLevel) {
p.resize(newSize, xRatio, yRatio);
p.sprite.y = (p.sprite.position.y / p.gameRef.blockSize).round() *
p.gameRef.blockSize;
}
}
}
}

View File

@ -1,11 +1,9 @@
import 'package:firo_runner/bug.dart';
import 'package:firo_runner/coin.dart';
import 'package:firo_runner/wire.dart';
import 'package:firo_runner/moving_object.dart';
import 'package:firo_runner/main.dart';
import 'package:flame/effects.dart';
import 'package:flame/extensions.dart';
import 'package:flutter/material.dart';
import 'package:firo_runner/platform.dart';
import 'package:flame/components.dart';
@ -278,8 +276,8 @@ class Runner extends Component with HasGameRef<MyGame> {
bool onTopOfPlatform() {
Rect runnerRect = sprite.toRect();
bool onTopOfPlatform = false;
for (List<Platform> platformLevel in gameRef.platformHolder.platforms) {
for (Platform p in platformLevel) {
for (List<MovingObject> platformLevel in gameRef.platformHolder.objects) {
for (MovingObject p in platformLevel) {
String side = p.intersect(runnerRect);
if (side == "none") {
Rect belowRunner = Rect.fromLTRB(runnerRect.left, runnerRect.top,
@ -296,8 +294,8 @@ class Runner extends Component with HasGameRef<MyGame> {
bool belowPlatform() {
Rect runnerRect = sprite.toRect();
bool belowPlatform = false;
for (List<Platform> platformLevel in gameRef.platformHolder.platforms) {
for (Platform p in platformLevel) {
for (List<MovingObject> platformLevel in gameRef.platformHolder.objects) {
for (MovingObject p in platformLevel) {
String side = p.intersect(runnerRect);
if (side == "none") {
Rect belowRunner = Rect.fromLTRB(runnerRect.left, runnerRect.top - 1,
@ -318,7 +316,7 @@ class Runner extends Component with HasGameRef<MyGame> {
Rect runnerRect = sprite.toRect();
bool onTopOfPlatform = this.onTopOfPlatform();
for (List<Coin> coinLevel in gameRef.coinHolder.coins) {
for (List<MovingObject> coinLevel in gameRef.coinHolder.objects) {
for (int i = 0; i < coinLevel.length;) {
if (coinLevel[i].intersect(runnerRect) != "none") {
gameRef.gameState.numCoins++;
@ -332,7 +330,7 @@ class Runner extends Component with HasGameRef<MyGame> {
}
}
for (List<Wire> wireLevel in gameRef.wireHolder.wires) {
for (List<MovingObject> wireLevel in gameRef.wireHolder.objects) {
for (int i = 0; i < wireLevel.length; i++) {
if (wireLevel[i].intersect(runnerRect) != "none") {
event("electrocute");
@ -341,7 +339,7 @@ class Runner extends Component with HasGameRef<MyGame> {
}
}
for (List<Bug> bugLevel in gameRef.bugHolder.bugs) {
for (List<MovingObject> bugLevel in gameRef.bugHolder.objects) {
for (int i = 0; i < bugLevel.length; i++) {
String intersectState = bugLevel[i].intersect(runnerRect);
if (bugLevel[i].sprite.current == BugState.breaking) {

View File

@ -32,14 +32,6 @@ class Wire extends MovingObject {
);
}
double getRightEnd() {
return sprite.position.x + sprite.width;
}
void remove() {
sprite.remove();
}
@override
String intersect(Rect other) {
Rect currentRect = sprite.toRect();

View File

@ -1,5 +1,4 @@
import 'dart:math';
import 'package:firo_runner/holder.dart';
import 'package:firo_runner/platform.dart';
import 'package:flame/flame.dart';
@ -7,41 +6,27 @@ import 'package:firo_runner/wire.dart';
import 'package:firo_runner/main.dart';
import 'package:flame/extensions.dart';
class WireHolder {
class WireHolder extends Holder {
late Image wire;
Random random = Random();
late List<List<Wire>> wires = [];
Future loadWires() async {
@override
Future load() async {
wire = await Flame.images.load("wire-frames.png");
}
void setUp() {
for (int i = 0; i < wires.length; i++) {
for (int j = 0; j < wires[i].length; j++) {
remove(wires[i], j);
}
}
wires = [];
for (int i = 0; i < 9; i++) {
wires.add([]);
}
}
getWire() {
return wire;
}
bool generateWire(MyGame gameRef, int level, bool force) {
if (wires[level].isNotEmpty) {
if (objects[level].isNotEmpty) {
return false;
}
if (random.nextInt(100) > 100) {
return true;
} else {
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
int nearestPlatform = getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);
@ -73,57 +58,15 @@ class WireHolder {
return false;
}
wires[level].add(wire);
objects[level].add(wire);
gameRef.add(wire.sprite);
if (platform != null) {
platform.removeChildren.add(() {
wires[level].remove(wire);
objects[level].remove(wire);
wire.remove();
});
}
return false;
}
}
int totalWires() {
int total = 0;
for (List<Wire> levelWires in wires) {
total += levelWires.length;
}
return total;
}
void update(double dt) {
for (List<Wire> wireLevel in wires) {
for (Wire p in wireLevel) {
p.update(dt);
}
}
}
void remove(List<Wire> levelHolder, int j) {
levelHolder[j].remove();
levelHolder[j].sprite.remove();
levelHolder.removeAt(j);
}
void removePast(MyGame gameRef) {
for (List<Wire> wireLevel in wires) {
for (int i = 0; i < wireLevel.length;) {
if (wireLevel[i].sprite.x + wireLevel[i].sprite.width < 0) {
remove(wireLevel, i);
continue;
}
i++;
}
}
}
void resize(Vector2 newSize, double xRatio, double yRatio) {
for (List<Wire> platformLevel in wires) {
for (Wire p in platformLevel) {
p.resize(newSize, xRatio, yRatio);
}
}
}
}