staging #20

Merged
marco merged 52 commits from staging into master 2021-10-09 18:48:59 +00:00
7 changed files with 131 additions and 34 deletions
Showing only changes of commit a4269c43c5 - Show all commits

View File

@ -48,16 +48,13 @@ class BugHolder {
if (random.nextInt(100) > 25) {
return true;
} else {
int nearestPlatform = level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);
if (platform != null && platform.prohibitObstacles) {
return false;
}
double xCoordinate = -100;
if (level == 0) {

View File

@ -45,13 +45,7 @@ class CoinHolder {
if (random.nextInt(100) > 25) {
return true;
} else {
int nearestPlatform = level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);

View File

@ -210,7 +210,7 @@ class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
circuitBackground.render(canvas);
fireworks.renderText(canvas);
super.render(canvas);
final fpsCount = fps(1);
final fpsCount = fps(10000);
fireworksPaint.render(
canvas,
fpsCount.toString(),
@ -300,6 +300,8 @@ class MyGame extends BaseGame with PanDetector, TapDetector, KeyboardEvents {
if (!playingMusic && kIsWeb) {
playMusic();
}
print(event.data.logicalKey.keyId);
print(event.data.keyLabel);
if (event is RawKeyUpEvent) {
keyboardKey = null;
switch (event.data.keyLabel) {

View File

@ -13,6 +13,7 @@ enum PlatformState {
class Platform extends MovingObject {
int row = 0;
bool prohibitObstacles = false;
List<Function> removeChildren = [];
Platform(MyGame gameRef) : super(gameRef) {

View File

@ -1,6 +1,8 @@
import 'dart:math';
import 'package:firo_runner/bug.dart';
import 'package:firo_runner/main.dart';
import 'package:firo_runner/wire.dart';
import 'package:flame/flame.dart';
import 'package:firo_runner/platform.dart';
import 'package:flame/extensions.dart';
@ -44,6 +46,50 @@ class PlatformHolder {
}
}
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]) {
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();
}
}
for (Wire wire in gameRef.wireHolder.wires[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();
}
}
} else {
int nearestPlatform = getNearestPlatform(i);
for (Platform platform in platforms[nearestPlatform]) {
if (platform.sprite.x >= currentPlatform.sprite.x &&
platform.sprite.x <
currentPlatform.sprite.x + 4 * currentPlatform.sprite.width) {
platform.remove();
platform.prohibitObstacles = true;
}
}
}
}
}
int getNearestPlatform(int level) {
return level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
}
void generatePlatforms(MyGame gameRef) {
while (!generatePlatform(gameRef, 2)) {
timeSinceLastTopHole++;
@ -58,8 +104,12 @@ class PlatformHolder {
.nextInt(timeSinceLastBottomHole > 0 ? timeSinceLastBottomHole : 1);
if (topChance > 50) {
removeUnfairObstacles(
gameRef, platforms[2][platforms[2].length - 4], 0, 4);
// Create an opening in the top.
remove(platforms[2], platforms[2].length - 2);
remove(platforms[2], platforms[2].length - 2);
timeSinceLastTopHole = 0;
}
if (bottomChance > 30) {
@ -70,10 +120,15 @@ class PlatformHolder {
}
int lastToRemove = platforms[5].length - 3;
int firstToRemove = platforms[5].length - 10;
removeUnfairObstacles(gameRef, platforms[5][lastToRemove - 1], 3, 7);
remove(platforms[5], lastToRemove);
remove(platforms[5], lastToRemove);
removeUnfairObstacles(gameRef, platforms[5][firstToRemove - 1], 3, 7);
remove(platforms[5], firstToRemove);
remove(platforms[5], firstToRemove);
timeSinceLastBottomHole = 0;
}
}

View File

@ -82,7 +82,7 @@ class Runner extends Component with HasGameRef<MyGame> {
// sprite.position,
Vector2(sprite.x, (level - 1) * gameRef.blockSize),
],
speed: 150,
duration: 0.25,
curve: Curves.bounceIn,
onComplete: () {
updateLevel();
@ -91,6 +91,10 @@ class Runner extends Component with HasGameRef<MyGame> {
));
break;
case "double_jump":
if (belowPlatform()) {
break;
}
sprite.clearEffects();
if (level - 1 < 0) {
break;
}
@ -104,22 +108,31 @@ class Runner extends Component with HasGameRef<MyGame> {
curve: Curves.ease,
onComplete: () {
updateLevel();
this.event("float");
if (onTopOfPlatform()) {
this.event("run");
} else {
this.event("float");
}
},
));
break;
case "fall":
sprite.clearEffects();
runnerState = event;
sprite.current = RunnerState.fall;
sprite.addEffect(MoveEffect(
path: [
Vector2(sprite.x, (level + 1) * gameRef.blockSize),
],
speed: 100,
duration: 0.2,
curve: Curves.ease,
onComplete: () {
updateLevel();
this.event("float");
if (onTopOfPlatform()) {
this.event("run");
} else {
this.event("fall");
}
},
));
break;
@ -136,23 +149,36 @@ class Runner extends Component with HasGameRef<MyGame> {
sprite.current = RunnerState.float;
sprite.addEffect(MoveEffect(
path: [sprite.position],
speed: 500,
duration: 1.5,
curve: Curves.ease,
onComplete: () {
updateLevel();
runnerState = event;
sprite.current = RunnerState.float;
if (onTopOfPlatform()) {
this.event("run");
} else {
this.event("fall");
}
},
));
break;
case "duck":
runnerState = event;
sprite.current = RunnerState.duck;
sprite.addEffect(MoveEffect(
path: [sprite.position],
duration: 1.5,
curve: Curves.linear,
onComplete: () {
this.event("run");
},
));
break;
case "die":
if (dead) {
return;
}
sprite.clearEffects();
updateLevel();
runnerState = event;
sprite.current = RunnerState.die;
gameRef.die();
@ -161,6 +187,8 @@ class Runner extends Component with HasGameRef<MyGame> {
if (dead) {
return;
}
sprite.clearEffects();
updateLevel();
runnerState = event;
sprite.current = RunnerState.electrocute;
gameRef.die();
@ -169,6 +197,8 @@ class Runner extends Component with HasGameRef<MyGame> {
if (dead) {
return;
}
sprite.clearEffects();
updateLevel();
runnerState = event;
sprite.current = RunnerState.glitch;
gameRef.die();
@ -189,6 +219,7 @@ class Runner extends Component with HasGameRef<MyGame> {
} else if (runnerState == "float" && previousState == "jump") {
event("double_jump");
} else if (runnerState == "duck") {
sprite.clearEffects();
event("run");
}
break;
@ -196,8 +227,10 @@ class Runner extends Component with HasGameRef<MyGame> {
if (runnerState == "run") {
event("duck");
} else if (runnerState == "float" && onTopOfPlatform()) {
sprite.clearEffects();
event("run");
} else if (runnerState == "float") {
sprite.clearEffects();
event("fall");
}
break;
@ -207,10 +240,10 @@ class Runner extends Component with HasGameRef<MyGame> {
}
break;
case "center":
if (runnerState == "fall") {
updateLevel();
event("float");
}
// if (runnerState == "fall") {
// updateLevel();
// event("float");
// }
break;
}
}
@ -252,6 +285,24 @@ class Runner extends Component with HasGameRef<MyGame> {
return onTopOfPlatform;
}
bool belowPlatform() {
Rect runnerRect = sprite.toRect();
bool belowPlatform = false;
for (List<Platform> platformLevel in gameRef.platformHolder.platforms) {
for (Platform p in platformLevel) {
String side = p.intersect(runnerRect);
if (side == "none") {
Rect belowRunner = Rect.fromLTRB(runnerRect.left, runnerRect.top - 1,
runnerRect.right, runnerRect.bottom);
if (p.intersect(belowRunner) == "bottom") {
belowPlatform = true;
}
}
}
}
return belowPlatform;
}
void intersecting() {
if (gameRef.gameState.isPaused) {
return;
@ -268,7 +319,7 @@ class Runner extends Component with HasGameRef<MyGame> {
onTopOfPlatform = true;
}
} else if (side == "bottom") {
event("die");
// event("die");
return;
}
}

View File

@ -41,16 +41,13 @@ class WireHolder {
if (random.nextInt(100) > 100) {
return true;
} else {
int nearestPlatform = level <= 0
? 0
: level <= 3
? 2
: level <= 6
? 5
: 8;
int nearestPlatform = gameRef.platformHolder.getNearestPlatform(level);
Platform? platform =
gameRef.platformHolder.getPlatformOffScreen(nearestPlatform);
if (platform != null && platform.prohibitObstacles) {
return false;
}
double xCoordinate = -100;
if (level == 0) {