[client] resource images rename
@@ -21,7 +21,7 @@ const generate = () => function generate() {
|
||||
]);
|
||||
};
|
||||
|
||||
const build = (platform) => function build() {
|
||||
const build = (platform, values) => function build() {
|
||||
const argv = yargs.argv;
|
||||
return gulp.src('.')
|
||||
.pipe(new Haxe().openfl({
|
||||
@@ -29,6 +29,7 @@ const build = (platform) => function build() {
|
||||
platform: platform,
|
||||
version: version,
|
||||
debug: argv.dev,
|
||||
values: values
|
||||
}))
|
||||
.pipe(gulp.dest(`target/${platform}`));
|
||||
};
|
||||
@@ -87,6 +88,7 @@ const buildDeb = gulp.series(
|
||||
exports['client:flash:html'] = gulp.parallel(flashIndex, flashJs);
|
||||
exports['client:flash'] = gulp.series(prepare(Haxe.ID), generate(), build('flash'), exports['client:flash:html']);
|
||||
exports['client:html5'] = gulp.series(prepare(Haxe.ID), generate(), build('html5'));
|
||||
exports['client:html5-dom'] = gulp.series(prepare(Haxe.ID), generate(), build('html5', {dom:true}));
|
||||
exports['client:linux'] = gulp.series(prepare(Haxe.ID), generate(), build('linux'));
|
||||
exports['client:webapp'] = webapp;
|
||||
exports['client:deb'] = buildDeb;
|
||||
@@ -108,9 +110,9 @@ const testFlash = function() {
|
||||
.pipe(debug());
|
||||
};
|
||||
|
||||
const testHtml5 = function() {
|
||||
const testHtml5 = (dom) => function() {
|
||||
return gulp.series(
|
||||
build('html5'),
|
||||
build('html5', {dom:dom}),
|
||||
() => gulp.src('target/html5').pipe(webserver({
|
||||
host: 'localhost', port: 3000,
|
||||
open: true,
|
||||
@@ -130,7 +132,8 @@ const testLinux = gulp.series(
|
||||
|
||||
|
||||
exports['client:flash:test'] = gulp.series(prepare(Haxe.ID, FlashPlayer.ID), testFlash);
|
||||
exports['client:html5:test'] = gulp.series(prepare(Haxe.ID), testHtml5);
|
||||
exports['client:html5:test'] = gulp.series(prepare(Haxe.ID), testHtml5());
|
||||
exports['client:html5-dom:test'] = gulp.series(prepare(Haxe.ID), testHtml5(true));
|
||||
exports['client:linux:test'] = gulp.series(prepare(Haxe.ID), testLinux);
|
||||
exports['client:test'] = exports['client:flash:test'];
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "tankz",
|
||||
"version": "0.6.3",
|
||||
"version": "0.6.4",
|
||||
"private": true,
|
||||
"devDependencies": {
|
||||
"ansi-colors": "^1.0.1",
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<haxeflag name="-D" value="native-trace"/>
|
||||
<!--<haxeflag name="-D" value="proto_debug"/>-->
|
||||
<haxeflag name="-dce" value="no"/>
|
||||
<haxeflag name="-D" value="dom"/>
|
||||
<!--<haxeflag name="-D" value="dom"/>-->
|
||||
<haxeflag name="--macro" value="yield.parser.Parser.auto()"/>
|
||||
<!--<template path="src/client/webapp/index_template.html" rename="index.html"/>-->
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ views:
|
||||
pHeight: 100
|
||||
skin:
|
||||
$type: haxework.gui.skin.BitmapSkin
|
||||
image: "@asset:image:resources/images/background.png"
|
||||
image: "@asset:image:resources/image/ui/background.png"
|
||||
fillType: REPEAT
|
||||
views:
|
||||
- id: start
|
||||
|
||||
@@ -4,9 +4,9 @@ button:
|
||||
height: 60
|
||||
skin:
|
||||
$type: haxework.gui.skin.ButtonBitmapSkin
|
||||
upImage: "@asset:image:resources/images/control/button_normal.png"
|
||||
downImage: "@asset:image:resources/images/control/button_down.png"
|
||||
overImage: "@asset:image:resources/images/control/button_over.png"
|
||||
upImage: "@asset:image:resources/image/ui/button/normal.png"
|
||||
downImage: "@asset:image:resources/image/ui/button/down.png"
|
||||
overImage: "@asset:image:resources/image/ui/button/over.png"
|
||||
fillType: NINEPATH
|
||||
fontFamily: "@res:text:font"
|
||||
fontEmbed: true
|
||||
|
||||
@@ -3,7 +3,7 @@ pWidth: 100
|
||||
pHeight: 100
|
||||
views:
|
||||
- $type: haxework.gui.ImageView
|
||||
image: "@asset:image:resources/images/logo/logo.png"
|
||||
image: "@asset:image:resources/image/ui/logo.png"
|
||||
contentSize: true
|
||||
bottomMargin: 15
|
||||
- $type: haxework.gui.LabelView
|
||||
|
||||
@@ -12,7 +12,8 @@ import ru.m.tankz.Type;
|
||||
|
||||
class AnimateBundle {
|
||||
|
||||
private static function buildAnimate(template:String, sequence:Array<Int>):OnceAnimate {
|
||||
private static function buildAnimate(name:String, sequence:Array<Int>):OnceAnimate {
|
||||
var template:String = 'resources/image/animate/${name}/%index%.png';
|
||||
var frames = [for (i in sequence) ({
|
||||
image: Assets.getBitmapData(StringTools.replace(template, '%index%', Std.string(i))),
|
||||
length: 1
|
||||
@@ -21,32 +22,41 @@ class AnimateBundle {
|
||||
}
|
||||
|
||||
public static function tankSpawn():OnceAnimate {
|
||||
return buildAnimate('resources/images/tank/appear/appear-%index%.png', [
|
||||
return buildAnimate('appear', [
|
||||
0, 1, 2, 3, 3, 4, 5, 5, 6
|
||||
]);
|
||||
}
|
||||
|
||||
public static function tankBoom():OnceAnimate {
|
||||
return buildAnimate('resources/images/tank/kaboom/kaboom-%index%.png', [
|
||||
return buildAnimate('boom', [
|
||||
0, 1, 2, 3, 4, 4, 4, 1, 4, 4, 7, 7, 8, 9, 9
|
||||
]);
|
||||
}
|
||||
|
||||
public static function bulletBoom():OnceAnimate {
|
||||
return buildAnimate('resources/images/bullet/boom/boom-%index%.png', [
|
||||
return buildAnimate('boom-sm', [
|
||||
0, 1, 1, 0, 0, 1
|
||||
]);
|
||||
}
|
||||
|
||||
public static function tankProtect():Animate {
|
||||
return new Animate([for (i in 0...2) ({
|
||||
image: Assets.getBitmapData('resources/images/tank/protect/protect-${i}.png'),
|
||||
image: Assets.getBitmapData('resources/image/animate/protect/${i}.png'),
|
||||
length: 5
|
||||
})]);
|
||||
}
|
||||
|
||||
public static function tankFrames(tank:Tank):Array<Frame> {
|
||||
var colors:Array<Color> = [tank.color, tank.bonus ? 0xff00aa : tank.color];
|
||||
var color:Color = switch (tank.hits) {
|
||||
case 1: 0x869C43;
|
||||
case 2: 0xDEAF80;
|
||||
case 3: 0x5EA67A;
|
||||
case _: tank.color;
|
||||
}
|
||||
var colors:Array<Color> = [color, color];
|
||||
if (tank.bonus) {
|
||||
colors[1] = 0xff00aa;
|
||||
}
|
||||
return [for (i in 0...2) ({
|
||||
image: BitmapUtil.colorize(Assets.getBitmapData('resources/image/tank/${tank.config.skin}-${i}.png'), colors[i]),
|
||||
length: 3
|
||||
|
||||
@@ -119,13 +119,13 @@ class Render extends SpriteView implements EngineListener {
|
||||
case EntityType.BONUS(bonus):
|
||||
var item = new BonusItem(bonus);
|
||||
items.set(bonus.key, item);
|
||||
entryLayer.addChild(item.view);
|
||||
upperLayer.addChild(item.view);
|
||||
item.update();
|
||||
case _:
|
||||
}
|
||||
}
|
||||
|
||||
public function onChange(entity:EntityType):Void {}
|
||||
public function onChange(entity:EntityType, ?change:EntityChange):Void {}
|
||||
|
||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||
switch [entity, with] {
|
||||
@@ -154,7 +154,7 @@ class Render extends SpriteView implements EngineListener {
|
||||
}
|
||||
case EntityType.BONUS(bonus):
|
||||
if (items.exists(bonus.key)) {
|
||||
entryLayer.removeChild(items.get(bonus.key).view);
|
||||
upperLayer.removeChild(items.get(bonus.key).view);
|
||||
items.remove(bonus.key);
|
||||
}
|
||||
case _:
|
||||
|
||||
@@ -242,7 +242,9 @@ class TankItem extends RenderItem<Tank, Sprite> {
|
||||
class BulletItem extends BitmapItem<Bullet> {
|
||||
|
||||
override private function getImage():String {
|
||||
return 'resources/images/bullet/bullet_${value.config.piercing > 1 ? 1 : 0}.png';
|
||||
var type:String = 'normal';
|
||||
if (value.config.piercing > 0) type = 'piercing';
|
||||
return 'resources/image/bullet/${type}.png';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -25,6 +25,7 @@ player:
|
||||
- {type: human0, rate: 1, protect: 5}
|
||||
bot: &bot
|
||||
control: bot
|
||||
color: 0xFFFFFF
|
||||
life: -1
|
||||
tanks:
|
||||
- {type: bot0, rate: 0.25, bonus: 0.25}
|
||||
|
||||
|
Before Width: | Height: | Size: 110 B After Width: | Height: | Size: 110 B |
|
Before Width: | Height: | Size: 141 B After Width: | Height: | Size: 141 B |
|
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
|
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
|
Before Width: | Height: | Size: 186 B After Width: | Height: | Size: 186 B |
|
Before Width: | Height: | Size: 144 B After Width: | Height: | Size: 144 B |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 4.8 KiB After Width: | Height: | Size: 4.8 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 292 B After Width: | Height: | Size: 292 B |
|
Before Width: | Height: | Size: 386 B After Width: | Height: | Size: 386 B |
|
Before Width: | Height: | Size: 389 B After Width: | Height: | Size: 389 B |
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 375 B |
|
Before Width: | Height: | Size: 9.8 KiB After Width: | Height: | Size: 9.8 KiB |
|
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
@@ -1,7 +1,7 @@
|
||||
package ru.m.tankz.engine;
|
||||
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.geom.Line;
|
||||
import ru.m.geom.Point;
|
||||
import ru.m.tankz.config.Config;
|
||||
import ru.m.tankz.control.Control;
|
||||
import ru.m.tankz.core.Bullet;
|
||||
@@ -12,9 +12,15 @@ import ru.m.tankz.core.Tank;
|
||||
import ru.m.tankz.map.LevelMap;
|
||||
|
||||
|
||||
enum EntityChange {
|
||||
DEATH;
|
||||
HIT;
|
||||
}
|
||||
|
||||
|
||||
interface EngineListener {
|
||||
public function onSpawn(entity:EntityType):Void;
|
||||
public function onChange(entity:EntityType):Void;
|
||||
public function onChange(entity:EntityType, ?change:EntityChange):Void;
|
||||
public function onCollision(entity:EntityType, with:EntityType):Void;
|
||||
public function onDestroy(entity:EntityType):Void;
|
||||
}
|
||||
@@ -29,7 +35,7 @@ class CollisionProcessor implements EngineListener {
|
||||
|
||||
public function onSpawn(entity:EntityType):Void {}
|
||||
|
||||
public function onChange(entity:EntityType):Void {}
|
||||
public function onChange(entity:EntityType, ?change:EntityChange):Void {}
|
||||
|
||||
public function onCollision(entity:EntityType, with:EntityType):Void {
|
||||
switch [entity, with] {
|
||||
@@ -47,7 +53,7 @@ class CollisionProcessor implements EngineListener {
|
||||
if (!tank.protect.active) {
|
||||
if (tank.hits > 0) {
|
||||
tank.hits--;
|
||||
engine.change(tank);
|
||||
engine.change(tank, EntityChange.HIT);
|
||||
} else {
|
||||
engine.destroy(tank);
|
||||
}
|
||||
@@ -63,7 +69,7 @@ class CollisionProcessor implements EngineListener {
|
||||
engine.destroy(bullet);
|
||||
if (!eagle.protect.active) {
|
||||
eagle.death = true;
|
||||
engine.change(eagle);
|
||||
engine.change(eagle, EntityChange.DEATH);
|
||||
}
|
||||
case _:
|
||||
}
|
||||
@@ -101,9 +107,9 @@ class Engine implements ControlHandler {
|
||||
for (l in listeners) l.onSpawn(type);
|
||||
}
|
||||
|
||||
public function change(entity:Entity):Void {
|
||||
public function change(entity:Entity, ?change:EntityChange):Void {
|
||||
var type = EntityTypeResolver.of(entity);
|
||||
for (l in listeners) l.onChange(type);
|
||||
for (l in listeners) l.onChange(type, change);
|
||||
}
|
||||
|
||||
public function destroy(entity:Entity):Void {
|
||||
|
||||
@@ -158,13 +158,18 @@ class Game implements EngineListener {
|
||||
}
|
||||
}
|
||||
|
||||
public function onChange(entity:EntityType):Void {
|
||||
switch (entity) {
|
||||
case EntityType.EAGLE(eagle):
|
||||
public function onChange(entity:EntityType, ?change:EntityChange):Void {
|
||||
switch [entity, change] {
|
||||
case [EntityType.EAGLE(eagle), EntityChange.DEATH]:
|
||||
if (eagle.death) {
|
||||
lose(eagle.team);
|
||||
deferred.resolve(state);
|
||||
}
|
||||
case [EntityType.TANK(tank), EntityChange.HIT]:
|
||||
if (tank.bonus) {
|
||||
tank.bonus = false;
|
||||
spawnBonus();
|
||||
}
|
||||
case _:
|
||||
}
|
||||
}
|
||||
@@ -197,7 +202,9 @@ class Game implements EngineListener {
|
||||
if (!team.isAlive) {
|
||||
lose(team.id);
|
||||
}
|
||||
if (tank.bonus) spawnBonus();
|
||||
if (tank.bonus) {
|
||||
spawnBonus();
|
||||
}
|
||||
deferred.resolve(state);
|
||||
case _:
|
||||
}
|
||||
|
||||