[render] tankz colors

This commit is contained in:
2018-02-08 23:12:10 +03:00
parent dd1014e230
commit a7effef412
26 changed files with 66 additions and 61 deletions

View File

@@ -8,8 +8,9 @@ import flash.display.BitmapData;
class BitmapUtil { class BitmapUtil {
public static function colorize(data: BitmapData, color: Color):BitmapData { public static function colorize(data: BitmapData, color: Color):BitmapData {
if (color.zero) return data;
var result = data.clone(); var result = data.clone();
var transform = new ColorTransform(1, 1, 1, 1, color.red, color.green, color.blue, color.alpha); var transform = new ColorTransform(color.red / 255, color.green / 255, color.blue / 255, 1, 0, 0, 0, 0);
result.colorTransform(new Rectangle(0, 0, result.width, result.height), transform); result.colorTransform(new Rectangle(0, 0, result.width, result.height), transform);
return result; return result;
} }

View File

@@ -5,6 +5,7 @@ abstract Color(Int) {
public var red(get, never):Int; public var red(get, never):Int;
public var green(get, never):Int; public var green(get, never):Int;
public var blue(get, never):Int; public var blue(get, never):Int;
public var zero(get, never):Bool;
public inline function new(value:Int) { public inline function new(value:Int) {
this = value; this = value;
@@ -26,6 +27,15 @@ abstract Color(Int) {
return this & 255; return this & 255;
} }
private inline function get_zero():Bool {
return this == 0;
}
@:from
static public inline function fromInt(value:Int):Color {
return new Color(value);
}
@:from @:from
static public inline function fromString(value:String):Color { static public inline function fromString(value:String):Color {
return new Color(Std.parseInt('0x${value.split('#').pop()}')); return new Color(Std.parseInt('0x${value.split('#').pop()}'));

View File

@@ -155,32 +155,14 @@ class TankItem extends RenderItem<Tank, Sprite> {
} }
override public function redraw():Void { override public function redraw():Void {
// ToDo: ImageBundle tankView.frames = getFrames().map(function(src) return BitmapUtil.colorize(Assets.getBitmapData(src), value.color));
tankView.frames = getFrames().map(function(s) return BitmapUtil.colorize(Assets.getBitmapData(s), '#cc0000'));
}
public static function getTankFrames(team:TeamId, index:Int, type:TankType, hits:Int=0):Array<String> {
var group = type.group;
if (team == 'radiant') {
index = 0;
}
if (team == 'dire') {
index = 1;
}
if (team == 'human' || team == 'radiant' || team == 'dire') {
group = 'player';
}
if (team == 'bot') {
index = hits;
}
return [
'resources/images/tank/${group}/tank_${group.charAt(0)}${type.type}_${index}-0.png',
'resources/images/tank/${group}/tank_${group.charAt(0)}${type.type}_${index}-1.png',
];
} }
private function getFrames():Array<String> { private function getFrames():Array<String> {
return getTankFrames(value.playerId.team, value.playerId.index, value.config, value.hits); return [
'resources/image/tank/${value.config.skin}-0.png',
'resources/image/tank/${value.config.skin}-1.png',
];
} }
override public function update():Void { override public function update():Void {

View File

@@ -19,7 +19,6 @@ bricks:
teams: teams:
- id: human - id: human
spawnInterval: 0
tanks: tanks:
- {group: human, type: 0, rate: 1} - {group: human, type: 0, rate: 1}
- id: bot - id: bot
@@ -54,6 +53,7 @@ tanks:
<<: *bullet <<: *bullet
speed: 8.0 speed: 8.0
bullets: 1 bullets: 1
skin: pa
- type: 1 - type: 1
width: 40 width: 40
@@ -63,6 +63,7 @@ tanks:
<<: *bullet <<: *bullet
speed: 8.5 speed: 8.5
bullets: 1 bullets: 1
skin: pb
- type: 2 - type: 2
width: 40 width: 40
@@ -72,6 +73,7 @@ tanks:
<<: *bullet <<: *bullet
speed: 9.0 speed: 9.0
bullets: 2 bullets: 2
skin: pc
- type: 3 - type: 3
width: 42 width: 42
@@ -82,6 +84,8 @@ tanks:
speed: 9.0 speed: 9.0
piercing: 3 piercing: 3
bullets: 2 bullets: 2
hits: 1
skin: pd
bot: bot:
- type: 0 - type: 0
@@ -93,6 +97,7 @@ tanks:
speed: 7.0 speed: 7.0
bullets: 1 bullets: 1
score: 100 score: 100
skin: ba
- type: 1 - type: 1
width: 40 width: 40
@@ -103,6 +108,7 @@ tanks:
speed: 7.0 speed: 7.0
bullets: 1 bullets: 1
score: 200 score: 200
skin: bb
- type: 2 - type: 2
width: 38 width: 38
@@ -113,6 +119,7 @@ tanks:
speed: 9.0 speed: 9.0
bullets: 1 bullets: 1
score: 300 score: 300
skin: bc
- type: 3 - type: 3
width: 40 width: 40
@@ -124,3 +131,4 @@ tanks:
bullets: 1 bullets: 1
score: 400 score: 400
hits: 3 hits: 3
skin: bd

View File

@@ -19,17 +19,16 @@ bricks:
team_tanks: &team_tanks team_tanks: &team_tanks
tanks: tanks:
- {group: any, type: 0, rate: 0.25} - {group: any, type: 0, rate: 0.5}
- {group: any, type: 1, rate: 0.25} - {group: any, type: 1, rate: 0.5}
- {group: any, type: 2, rate: 0.25}
teams: teams:
- <<: *team_tanks - <<: *team_tanks
id: radiant id: radiant
spawnInterval: 0 color: 0xff5555
- <<: *team_tanks - <<: *team_tanks
id: dire id: dire
spawnInterval: 0 color: 0x5555ff
points: points:
- {team: radiant, type: eagle, index: -1, direction: right, x: 0, y: 28} - {team: radiant, type: eagle, index: -1, direction: right, x: 0, y: 28}
@@ -54,38 +53,21 @@ bullet: &bullet
tanks: tanks:
any: any:
- type: 0 - type: 0
width: 36 width: 38
height: 36 height: 36
speed: 2.5 speed: 2.0
bullet: bullet:
<<: *bullet <<: *bullet
speed: 8.0 speed: 10.0
bullets: 1 bullets: 1
skin: bc
- type: 1 - type: 1
width: 40 width: 40
height: 36 height: 36
speed: 3.0 speed: 4.0
bullet: bullet:
<<: *bullet <<: *bullet
speed: 8.5 speed: 7.0
bullets: 1 bullets: 1
skin: bb
- type: 2
width: 40
height: 36
speed: 3.0
bullet:
<<: *bullet
speed: 9.0
bullets: 2
- type: 3
width: 42
height: 38
speed: 2.9
bullet:
<<: *bullet
speed: 9.0
piercing: 3
bullets: 2

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1,5 +1,7 @@
package ru.m.tankz.config; package ru.m.tankz.config;
import ru.m.draw.Color;
typedef GameConfig = { typedef GameConfig = {
var levels: Int; var levels: Int;
@@ -48,6 +50,7 @@ typedef TankConfig = { > TankType,
var bullet:BulletConfig; var bullet:BulletConfig;
var bullets:Int; var bullets:Int;
var hits:Int; var hits:Int;
var skin:String;
} }
typedef TankSpawn = { > TankType, typedef TankSpawn = { > TankType,
@@ -58,8 +61,9 @@ typedef TankSpawn = { > TankType,
typedef TeamConfig = { typedef TeamConfig = {
var id:String; var id:String;
var size:Int; var size:Int;
var spawnInterval:Int;
var tanks:Array<TankSpawn>; var tanks:Array<TankSpawn>;
@:optional var spawnInterval:Int;
@:optional var color:Color;
} }

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.core; package ru.m.tankz.core;
import ru.m.draw.Color;
import ru.m.tankz.game.Game; import ru.m.tankz.game.Game;
import ru.m.geom.Point; import ru.m.geom.Point;
import ru.m.tankz.config.Config; import ru.m.tankz.config.Config;
@@ -11,6 +12,7 @@ import ru.m.geom.Direction;
class Tank extends MobileEntity { class Tank extends MobileEntity {
public var playerId(default, null):PlayerId; public var playerId(default, null):PlayerId;
public var config(default, set):TankConfig; public var config(default, set):TankConfig;
public var color(default, default):Color;
public var hits(default, default):Int; public var hits(default, default):Int;
private var bulletsCounter:Int = 0; private var bulletsCounter:Int = 0;

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.game; package ru.m.tankz.game;
import ru.m.draw.Color;
import ru.m.tankz.control.Control; import ru.m.tankz.control.Control;
import haxe.ds.Option; import haxe.ds.Option;
import ru.m.tankz.game.GameState.PlayerState; import ru.m.tankz.game.GameState.PlayerState;
@@ -13,8 +14,16 @@ class ClassicGame extends Game {
public static var HUMAN(default, never):TeamId = 'human'; public static var HUMAN(default, never):TeamId = 'human';
public static var BOT(default, never):TeamId = 'bot'; public static var BOT(default, never):TeamId = 'bot';
public static var PLAYER1(default, never):GameMode = [{team:HUMAN, type:Control.HUMAN, index:0}]; private static var PLAYER1_COLOR:Color = 0xffff55;
public static var PLAYER2(default, never):GameMode = [{team:HUMAN, type:Control.HUMAN, index:0}, {team:HUMAN, type:Control.HUMAN, index:1}]; private static var PLAYER2_COLOR:Color = 0x00ff00;
public static var PLAYER1(default, never):GameMode = [
{team:HUMAN, type:Control.HUMAN, color: PLAYER1_COLOR, index:0}
];
public static var PLAYER2(default, never):GameMode = [
{team:HUMAN, type:Control.HUMAN, color: PLAYER1_COLOR, index:0},
{team:HUMAN, type:Control.HUMAN, color: PLAYER2_COLOR, index:1}
];
private static var HUMAN_LIFE(default, never):Int = 3; private static var HUMAN_LIFE(default, never):Int = 3;
private static var BOT_LIFE(default, never):Int = 20; private static var BOT_LIFE(default, never):Int = 20;

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.game; package ru.m.tankz.game;
import ru.m.draw.Color;
import ru.m.tankz.control.Control; import ru.m.tankz.control.Control;
import haxe.ds.Option; import haxe.ds.Option;
import ru.m.tankz.game.Game; import ru.m.tankz.game.Game;
@@ -17,14 +18,17 @@ class DotaGame extends Game {
{team:RADIANT, type:Control.HUMAN, index:0} {team:RADIANT, type:Control.HUMAN, index:0}
]; ];
private static var PLAYER1_COLOR:Color = 0xff7777;
private static var PLAYER2_COLOR:Color = 0x7777ff;
public static var PLAYER2_COOP(default, never):GameMode = [ public static var PLAYER2_COOP(default, never):GameMode = [
{team:RADIANT, type:Control.HUMAN, index:0}, {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:0},
{team:RADIANT, type:Control.HUMAN, index:1} {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:1}
]; ];
public static var PLAYER2_VS(default, never):GameMode = [ public static var PLAYER2_VS(default, never):GameMode = [
{team:RADIANT, type:Control.HUMAN, index:0}, {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:0},
{team:DIRE, type:Control.HUMAN, index:0} {team:DIRE, type:Control.HUMAN, color: PLAYER2_COLOR, index:0}
]; ];
private static var TEAM_SIZE(default, never):Int = 5; private static var TEAM_SIZE(default, never):Int = 5;

View File

@@ -1,5 +1,6 @@
package ru.m.tankz.game; package ru.m.tankz.game;
import ru.m.draw.Color;
import haxe.ds.Option; import haxe.ds.Option;
import haxe.Timer; import haxe.Timer;
import promhx.Deferred; import promhx.Deferred;
@@ -31,6 +32,7 @@ typedef PlayerId = {
var team:TeamId; var team:TeamId;
var type:ControlType; var type:ControlType;
var index:Int; var index:Int;
@:optional var color:Color;
} }
@@ -65,6 +67,7 @@ class Game implements EngineListener {
var type:TankSpawn = types[Math.floor(Math.random() * types.length)]; var type:TankSpawn = types[Math.floor(Math.random() * types.length)];
var tankConfig:TankConfig = config.getTank(type.group, type.type); var tankConfig:TankConfig = config.getTank(type.group, type.type);
var tank = new Tank(playerId, tankConfig); var tank = new Tank(playerId, tankConfig);
tank.color = playerId.color.zero ? teams[playerId.team].config.color : playerId.color;
applyPoint(tank, point); applyPoint(tank, point);
return tank; return tank;
} }