flutter/examples/game/lib/player_state.dart
Hixie a6c473ea95 Strong modeify the examples
This makes skyanalyzer also check the examples, and fixes everything it
found there.
2015-10-23 18:13:25 -07:00

181 lines
5.1 KiB
Dart

part of game;
class PlayerState extends Node {
PlayerState(this._sheetUI, this._sheetGame) {
// Score display
_spriteBackgroundScore = new Sprite(_sheetUI["scoreboard.png"]);
_spriteBackgroundScore.pivot = new Point(1.0, 0.0);
_spriteBackgroundScore.scale = 0.35;
_spriteBackgroundScore.position = new Point(240.0, 10.0);
addChild(_spriteBackgroundScore);
_scoreDisplay = new ScoreDisplay(_sheetUI);
_scoreDisplay.position = new Point(-13.0, 49.0);
_spriteBackgroundScore.addChild(_scoreDisplay);
// Coin display
_spriteBackgroundCoins = new Sprite(_sheetUI["coinboard.png"]);
_spriteBackgroundCoins.pivot = new Point(1.0, 0.0);
_spriteBackgroundCoins.scale = 0.35;
_spriteBackgroundCoins.position = new Point(105.0, 10.0);
addChild(_spriteBackgroundCoins);
_coinDisplay = new ScoreDisplay(_sheetUI);
_coinDisplay.position = new Point(-13.0, 49.0);
_spriteBackgroundCoins.addChild(_coinDisplay);
}
final SpriteSheet _sheetUI;
final SpriteSheet _sheetGame;
int laserLevel = 0;
static const double normalScrollSpeed = 2.0;
double scrollSpeed = normalScrollSpeed;
double _scrollSpeedTarget = normalScrollSpeed;
EnemyBoss boss;
Sprite _spriteBackgroundScore;
ScoreDisplay _scoreDisplay;
Sprite _spriteBackgroundCoins;
ScoreDisplay _coinDisplay;
int get score => _scoreDisplay.score;
set score(int score) {
_scoreDisplay.score = score;
flashBackgroundSprite(_spriteBackgroundScore);
}
int get coins => _coinDisplay.score;
void addCoin(Coin c) {
// Animate coin to the top of the screen
Point startPos = convertPointFromNode(Point.origin, c);
Point finalPos = new Point(30.0, 30.0);
Point middlePos = new Point((startPos.x + finalPos.x) / 2.0 + 50.0,
(startPos.y + finalPos.y) / 2.0);
List<Point> path = <Point>[startPos, middlePos, finalPos];
Sprite sprite = new Sprite(_sheetGame["coin.png"]);
sprite.scale = 0.7;
ActionSpline spline = new ActionSpline((Point a) { sprite.position = a; }, path, 0.5);
spline.tension = 0.25;
ActionTween rotate = new ActionTween((double a) { sprite.rotation = a; }, 0.0, 360.0, 0.5);
ActionTween scale = new ActionTween((double a) { sprite.scale = a; }, 0.7, 1.2, 0.5);
ActionGroup group = new ActionGroup(<Action>[spline, rotate, scale]);
sprite.actions.run(new ActionSequence(<Action>[
group,
new ActionRemoveNode(sprite),
new ActionCallFunction(() {
_coinDisplay.score += 1;
flashBackgroundSprite(_spriteBackgroundCoins);
})
]));
addChild(sprite);
}
void activatePowerUp(PowerUpType type) {
if (type == PowerUpType.shield) {
_shieldFrames += 300;
} else if (type == PowerUpType.sideLaser) {
_sideLaserFrames += 300;
} else if (type == PowerUpType.speedLaser) {
_speedLaserFrames += 300;
} else if (type == PowerUpType.speedBoost) {
_speedBoostFrames += 150;
}
}
int _shieldFrames = 0;
bool get shieldActive => _shieldFrames > 0 || _speedBoostFrames > 0;
bool get shieldDeactivating =>
math.max(_shieldFrames, _speedBoostFrames) > 0 && math.max(_shieldFrames, _speedBoostFrames) < 60;
int _sideLaserFrames = 0;
bool get sideLaserActive => _sideLaserFrames > 0;
int _speedLaserFrames = 0;
bool get speedLaserActive => _speedLaserFrames > 0;
int _speedBoostFrames = 0;
bool get speedBoostActive => _speedBoostFrames > 0;
void flashBackgroundSprite(Sprite sprite) {
sprite.actions.stopAll();
ActionTween flash = new ActionTween(
(Color a) { sprite.colorOverlay = a; },
new Color(0x66ccfff0),
new Color(0x00ccfff0),
0.3);
sprite.actions.run(flash);
}
void update(double dt) {
if (_shieldFrames > 0)
_shieldFrames--;
if (_sideLaserFrames > 0)
_sideLaserFrames--;
if (_speedLaserFrames > 0)
_speedLaserFrames--;
if (_speedBoostFrames > 0)
_speedBoostFrames--;
// Update speed
if (boss != null) {
Point globalBossPos = boss.convertPointToBoxSpace(Point.origin);
if (globalBossPos.y > (_gameSizeHeight - 400.0))
_scrollSpeedTarget = 0.0;
else
_scrollSpeedTarget = normalScrollSpeed;
} else {
if (speedBoostActive)
_scrollSpeedTarget = normalScrollSpeed * 6.0;
else
_scrollSpeedTarget = normalScrollSpeed;
}
scrollSpeed = GameMath.filter(scrollSpeed, _scrollSpeedTarget, 0.1);
}
}
class ScoreDisplay extends Node {
ScoreDisplay(this._sheetUI);
int _score = 0;
int get score => _score;
set score(int score) {
_score = score;
_dirtyScore = true;
}
SpriteSheet _sheetUI;
bool _dirtyScore = true;
void update(double dt) {
if (_dirtyScore) {
removeAllChildren();
String scoreStr = _score.toString();
double xPos = -37.0;
for (int i = scoreStr.length - 1; i >= 0; i--) {
String numStr = scoreStr.substring(i, i + 1);
Sprite numSprite = new Sprite(_sheetUI["number_$numStr.png"]);
numSprite.position = new Point(xPos, 0.0);
addChild(numSprite);
xPos -= 37.0;
}
_dirtyScore = false;
}
}
}