Merge pull request #999 from vlidholt/master

Adds support for labels in skysprites
This commit is contained in:
Viktor Lidholt 2015-09-01 16:47:44 -07:00
commit 5f46ec9920
5 changed files with 87 additions and 12 deletions

View File

@ -5,6 +5,7 @@ import 'dart:math' as math;
import 'dart:sky' as sky;
import 'package:sky/rendering/object.dart';
import 'package:sky/painting/text_style.dart';
import 'package:sky/widgets/framework.dart';
import 'package:skysprites/skysprites.dart';
import 'package:vector_math/vector_math.dart';

View File

@ -4,7 +4,7 @@ final double _gameSizeWidth = 320.0;
double _gameSizeHeight = 320.0;
final double _chunkSpacing = 640.0;
final int _chunksPerLevel = 5;
final int _chunksPerLevel = 6;
final bool _drawDebug = false;
@ -190,25 +190,22 @@ class GameDemoNode extends NodeWithSize {
}
void addLevelChunk(int chunk, double yPos) {
if (chunk == 0) {
// Leave the first chunk empty
return;
}
chunk -= 1;
int level = chunk ~/ _chunksPerLevel;
int part = chunk % _chunksPerLevel;
if (part == 0) {
LevelLabel lbl = new LevelLabel(_objectFactory, level + 1);
lbl.position = new Point(0.0, yPos + _chunkSpacing / 2.0 - 150.0);
_level.addChild(lbl);
} else if (part == 1) {
_objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
} else if (part == 1) {
_objectFactory.addEnemyScoutSwarm(4 + level * 2, yPos);
} else if (part == 2) {
_objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
_objectFactory.addEnemyScoutSwarm(4 + level * 2, yPos);
} else if (part == 3) {
_objectFactory.addEnemyDestroyerSwarm(2 + level, yPos);
_objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
} else if (part == 4) {
_objectFactory.addEnemyDestroyerSwarm(2 + level, yPos);
} else if (part == 5) {
_objectFactory.addAsteroids(10 + level * 4, yPos, 0.0 + (level * 0.2).clamp(0.0, 0.7));
}
}

View File

@ -86,6 +86,23 @@ abstract class GameObject extends Node {
}
}
class LevelLabel extends GameObject {
LevelLabel(GameObjectFactory f, int level) : super(f) {
canDamageShip = false;
canBeDamaged = false;
Label lbl = new Label(
"LEVEL $level",
new TextStyle(
textAlign: TextAlign.center,
color:new Color(0xffffffff),
fontSize: 24.0,
fontWeight: FontWeight.w600
));
addChild(lbl);
}
}
class Ship extends GameObject {
Ship(GameObjectFactory f) : super(f) {
// Add main ship sprite

58
skysprites/lib/label.dart Normal file
View File

@ -0,0 +1,58 @@
part of skysprites;
class Label extends Node {
Label(this._text, [this._textStyle]) {
if (_textStyle == null) {
_textStyle = new TextStyle();
}
}
String _text;
String get text => _text;
set text(String text) {
_text = text;
_painter = null;
}
TextStyle _textStyle;
TextStyle get textStyle => _textStyle;
set textStyle(TextStyle textStyle) {
_textStyle = textStyle;
_painter = null;
}
TextPainter _painter;
double _width;
void paint(PaintingCanvas canvas) {
if (_painter == null) {
PlainTextSpan textSpan = new PlainTextSpan(_text);
StyledTextSpan styledTextSpan = new StyledTextSpan(_textStyle, [textSpan]);
_painter = new TextPainter(styledTextSpan);
_painter.maxWidth = double.INFINITY;
_painter.minWidth = 0.0;
_painter.layout();
_width = _painter.maxContentWidth.ceil().toDouble();
_painter.maxWidth = _width;
_painter.minWidth = _width;
_painter.layout();
}
Offset offset = Offset.zero;
if (_textStyle.textAlign == TextAlign.center) {
offset = new Offset(-_width / 2.0, 0.0);
} else if (_textStyle.textAlign == TextAlign.right) {
offset = new Offset(-_width, 0.0);
}
_painter.paint(canvas, offset);
}
}

View File

@ -17,6 +17,7 @@ import 'package:sky/mojo/asset_bundle.dart';
import 'package:sky/mojo/shell.dart' as shell;
import 'package:sky/rendering/box.dart';
import 'package:sky/rendering/object.dart';
import 'package:sky/painting/text_painter.dart';
import 'package:sky/widgets/framework.dart';
import 'package:sky_services/media/media.mojom.dart';
import 'package:vector_math/vector_math.dart';
@ -26,6 +27,7 @@ part 'constraint.dart';
part 'action_spline.dart';
part 'color_secuence.dart';
part 'image_map.dart';
part 'label.dart';
part 'layer.dart';
part 'node.dart';
part 'node3d.dart';