From a7effef412446fca3be27b7af6f265cd1ce18b3b Mon Sep 17 00:00:00 2001 From: shmyga Date: Thu, 8 Feb 2018 23:12:10 +0300 Subject: [PATCH] [render] tankz colors --- src/client/haxe/ru/m/draw/BitmapUtil.hx | 3 +- src/client/haxe/ru/m/draw/Color.hx | 10 +++++ .../haxe/ru/m/tankz/render/RenderItem.hx | 28 +++--------- src/client/resources/classic/config.yaml | 10 ++++- src/client/resources/dota/config.yaml | 40 +++++------------- src/client/resources/image/tank/ba-0.png | Bin 0 -> 1902 bytes src/client/resources/image/tank/ba-1.png | Bin 0 -> 1925 bytes src/client/resources/image/tank/bb-0.png | Bin 0 -> 1405 bytes src/client/resources/image/tank/bb-1.png | Bin 0 -> 1502 bytes src/client/resources/image/tank/bc-0.png | Bin 0 -> 1967 bytes src/client/resources/image/tank/bc-1.png | Bin 0 -> 1957 bytes src/client/resources/image/tank/bd-0.png | Bin 0 -> 1113 bytes src/client/resources/image/tank/bd-1.png | Bin 0 -> 1125 bytes src/client/resources/image/tank/pa-0.png | Bin 0 -> 1682 bytes src/client/resources/image/tank/pa-1.png | Bin 0 -> 1665 bytes src/client/resources/image/tank/pb-0.png | Bin 0 -> 1431 bytes src/client/resources/image/tank/pb-1.png | Bin 0 -> 1429 bytes src/client/resources/image/tank/pc-0.png | Bin 0 -> 1638 bytes src/client/resources/image/tank/pc-1.png | Bin 0 -> 1635 bytes src/client/resources/image/tank/pd-0.png | Bin 0 -> 1525 bytes src/client/resources/image/tank/pd-1.png | Bin 0 -> 1506 bytes src/common/haxe/ru/m/tankz/config/Config.hx | 6 ++- src/common/haxe/ru/m/tankz/core/Tank.hx | 2 + .../haxe/ru/m/tankz/game/ClassicGame.hx | 13 +++++- src/common/haxe/ru/m/tankz/game/DotaGame.hx | 12 ++++-- src/common/haxe/ru/m/tankz/game/Game.hx | 3 ++ 26 files changed, 66 insertions(+), 61 deletions(-) create mode 100644 src/client/resources/image/tank/ba-0.png create mode 100644 src/client/resources/image/tank/ba-1.png create mode 100644 src/client/resources/image/tank/bb-0.png create mode 100644 src/client/resources/image/tank/bb-1.png create mode 100644 src/client/resources/image/tank/bc-0.png create mode 100644 src/client/resources/image/tank/bc-1.png create mode 100644 src/client/resources/image/tank/bd-0.png create mode 100644 src/client/resources/image/tank/bd-1.png create mode 100644 src/client/resources/image/tank/pa-0.png create mode 100644 src/client/resources/image/tank/pa-1.png create mode 100644 src/client/resources/image/tank/pb-0.png create mode 100644 src/client/resources/image/tank/pb-1.png create mode 100644 src/client/resources/image/tank/pc-0.png create mode 100644 src/client/resources/image/tank/pc-1.png create mode 100644 src/client/resources/image/tank/pd-0.png create mode 100644 src/client/resources/image/tank/pd-1.png diff --git a/src/client/haxe/ru/m/draw/BitmapUtil.hx b/src/client/haxe/ru/m/draw/BitmapUtil.hx index f112f48..a29ae45 100644 --- a/src/client/haxe/ru/m/draw/BitmapUtil.hx +++ b/src/client/haxe/ru/m/draw/BitmapUtil.hx @@ -8,8 +8,9 @@ import flash.display.BitmapData; class BitmapUtil { public static function colorize(data: BitmapData, color: Color):BitmapData { + if (color.zero) return data; 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); return result; } diff --git a/src/client/haxe/ru/m/draw/Color.hx b/src/client/haxe/ru/m/draw/Color.hx index 7f4a352..da7ee6c 100644 --- a/src/client/haxe/ru/m/draw/Color.hx +++ b/src/client/haxe/ru/m/draw/Color.hx @@ -5,6 +5,7 @@ abstract Color(Int) { public var red(get, never):Int; public var green(get, never):Int; public var blue(get, never):Int; + public var zero(get, never):Bool; public inline function new(value:Int) { this = value; @@ -26,6 +27,15 @@ abstract Color(Int) { 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 static public inline function fromString(value:String):Color { return new Color(Std.parseInt('0x${value.split('#').pop()}')); diff --git a/src/client/haxe/ru/m/tankz/render/RenderItem.hx b/src/client/haxe/ru/m/tankz/render/RenderItem.hx index 772598c..31d5bc9 100644 --- a/src/client/haxe/ru/m/tankz/render/RenderItem.hx +++ b/src/client/haxe/ru/m/tankz/render/RenderItem.hx @@ -155,32 +155,14 @@ class TankItem extends RenderItem { } override public function redraw():Void { - // ToDo: ImageBundle - 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 { - 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', - ]; + tankView.frames = getFrames().map(function(src) return BitmapUtil.colorize(Assets.getBitmapData(src), value.color)); } private function getFrames():Array { - 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 { diff --git a/src/client/resources/classic/config.yaml b/src/client/resources/classic/config.yaml index 0a7dc05..5d0c9d4 100644 --- a/src/client/resources/classic/config.yaml +++ b/src/client/resources/classic/config.yaml @@ -19,7 +19,6 @@ bricks: teams: - id: human - spawnInterval: 0 tanks: - {group: human, type: 0, rate: 1} - id: bot @@ -54,6 +53,7 @@ tanks: <<: *bullet speed: 8.0 bullets: 1 + skin: pa - type: 1 width: 40 @@ -63,6 +63,7 @@ tanks: <<: *bullet speed: 8.5 bullets: 1 + skin: pb - type: 2 width: 40 @@ -72,6 +73,7 @@ tanks: <<: *bullet speed: 9.0 bullets: 2 + skin: pc - type: 3 width: 42 @@ -82,6 +84,8 @@ tanks: speed: 9.0 piercing: 3 bullets: 2 + hits: 1 + skin: pd bot: - type: 0 @@ -93,6 +97,7 @@ tanks: speed: 7.0 bullets: 1 score: 100 + skin: ba - type: 1 width: 40 @@ -103,6 +108,7 @@ tanks: speed: 7.0 bullets: 1 score: 200 + skin: bb - type: 2 width: 38 @@ -113,6 +119,7 @@ tanks: speed: 9.0 bullets: 1 score: 300 + skin: bc - type: 3 width: 40 @@ -124,3 +131,4 @@ tanks: bullets: 1 score: 400 hits: 3 + skin: bd diff --git a/src/client/resources/dota/config.yaml b/src/client/resources/dota/config.yaml index f5dd432..5fb237b 100644 --- a/src/client/resources/dota/config.yaml +++ b/src/client/resources/dota/config.yaml @@ -19,17 +19,16 @@ bricks: team_tanks: &team_tanks tanks: - - {group: any, type: 0, rate: 0.25} - - {group: any, type: 1, rate: 0.25} - - {group: any, type: 2, rate: 0.25} + - {group: any, type: 0, rate: 0.5} + - {group: any, type: 1, rate: 0.5} teams: - <<: *team_tanks id: radiant - spawnInterval: 0 + color: 0xff5555 - <<: *team_tanks id: dire - spawnInterval: 0 + color: 0x5555ff points: - {team: radiant, type: eagle, index: -1, direction: right, x: 0, y: 28} @@ -54,38 +53,21 @@ bullet: &bullet tanks: any: - type: 0 - width: 36 + width: 38 height: 36 - speed: 2.5 + speed: 2.0 bullet: <<: *bullet - speed: 8.0 + speed: 10.0 bullets: 1 + skin: bc - type: 1 width: 40 height: 36 - speed: 3.0 + speed: 4.0 bullet: <<: *bullet - speed: 8.5 + speed: 7.0 bullets: 1 - - - 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 \ No newline at end of file + skin: bb diff --git a/src/client/resources/image/tank/ba-0.png b/src/client/resources/image/tank/ba-0.png new file mode 100644 index 0000000000000000000000000000000000000000..51192e5641710fd5e8dbf4ce0657e7d122378f65 GIT binary patch literal 1902 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 LNkvXXu0mjf$ce;7 literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bb-0.png b/src/client/resources/image/tank/bb-0.png new file mode 100644 index 0000000000000000000000000000000000000000..7bf3b5f5f7e08f646d5a581b49dddc3030c662c2 GIT binary patch literal 1405 zcmV-@1%mpCP)VJWsydA-jeCyPl?S5VfI-g>CiAvi#K2wk%5n51JkVu2v5`pbbDTG!4Nrxzpve z`)22q7CMs}b*>F}-k)F+BC^3OM(=&)qqz0bY($Mes`=d;(0m9g9l6ngIETAX)27l)$KsVvjF6Q_@! z(F3%cI(4dp0Q>J-AC(Xx#Ak)}rGM*guikSTW9)r1iE2VY$g%`V8GNz?o6QPF85rlF zjDa%_#u*r6NRHn@Ix~lv%p4-IF~r9vOHjh+6onoDhYA1*AuYwc)uBqXZf=CjDS&eh z#uzx~i^@x5)sh!P z?w#1$P`hleA>fAkI&573$g02=$|X3kd)GFE%5{gDp=^4=it+$jw`>AqOxHA%$s#fK zFBC<^RC*SI-43TVo4R%*f zrwbN~1)?ZI(=-48Aq0dFtO?{C4RaIoO*+om@g)2k&YjEh^Zb+q59*?JBM^o^rk|U#r z4ZgnTS<`TwGyFH5GJO8`khyLz0K64TKv7lQ%G);8W8a=_hTE-TaG#twhvaQ@Uk@mD0un;{0Q43!t189d z^_v*D5?Rry&Wt$Frx&+$b#=X^0j3U4_d}YdO>vEMkN$dG_t;5-?RyV4)U3hNZ4I3@ zmHy6vEW+UsV0Sp+5CmMhI@GIkaPP5NE#WfRjesm7;1%I^I`f{vNWAZQEE&}~xc3BP z5oKNx0oe_Y=*EtghQ4jh8>3#YH!92WF+ISCf4{9p4*^%J2OjW$7%AHsvd1ga00000 LNkvXXu0mjfsbitR literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bb-1.png b/src/client/resources/image/tank/bb-1.png new file mode 100644 index 0000000000000000000000000000000000000000..f3648cba73531617eff20217c6b557bf29d1b16c GIT binary patch literal 1502 zcmV<41tI#0P)4-;alAA3IuTMH_)DW1 zeRIC={ASLXbG~mxDwQ%r=?p{Z41*V@I6pc~d$NT)k}b3+n|bz`Cj{%1N~KOs%;dV3 zeKHKCr-+0@v?p7ZkJhHHhmIaSz1F9{zyI)jesN&6pTTs7%O!hlUjtA6@e1QX-{h^*lU2lUyv8 z(Ap5I3(>Zt0l&|O$0L}{6?pf~tQY!3~Hgct%t<=f`RQgQlYd)Duq@Wr4>pkCa32q6fd(_yv*=uma**ICY00%!+{>)r3yeH zM8`(HI}^=x?rSF$44}0}DTUVhn(Otpoz2^>+74-kM>G8CUmr7?aR>Dnx}5+w{E9pG z@1g6SgIM9(jhbz$)*X%fwEJET+;QuceO&=>Z)@fIyKlQ8u(b*WYIyX%yGS%RPBmBg zoQ#bPaXRnZi&DzbX|Y&hJo^phvQ4hAM8NMS81S<#8pb1_##^y{U(vCL5A(|tf1xa$ zV^;-uu=7q=hflt|$gfWPfmqZc7O{x0oMTao`9f*M7AD{Yw65?E1#0L%+`(`E{y|lM z6+?XMEjtO(@68Y7o?fEZ6%7_auo&s+-ppfQjwRu8m)L>)on?0(gCX zYAtujeQi6cic>MfiR~?}bMMasXNgDaszijaRYxJ8$FeLe%fc9Q<#@6?#_hXzFE35T z5DkZtPY=9yd{aO-eev~p)nKa%219r}9>U=;#uxyE5C|b?ibpwm?=^EhIW{)dd)MAmtidQu`m2vIxXOI23YB;SGm+}j)_dgw}ZrCdTFOH5=wr$78ckONC z*kku^8dP8?6&5fK3pK#-_%stU?(l0>F~qi%41RH*{d?OT9UeS#H}@Udz?6Y%>8 z2K-mHxJ`xIw~E^f(h!*%e&=r~K4OC0LlkJo$s1>n?d zjyK=?h^Z~SxwU|4AnDd%d@{@1Qz=?+Nw8yk6H=}WtJbb5zf#M#xrGA5V_D98{xwp$ z4?BQCq#Xf;5Pd-JM$Wb^8T{%3=Z1!_tE#I;8v2~CtYkKgAb z7O7=hBuud^`=;mf>9vJ>Q_M;x8tZ#j+h^u3Q7%i8E%CmN_Fd`rWOMqd#~*oZJ)qAR z(~B`=zR6eoev4W`o_*$t7uGwaQmL+qnOt%vS7829k&%g6BH<8GD?~%RMSE*gpUdyJ zo}qLGr8Lv?1pq?9njT?57zTg}z?=Tx%y)n{s+%70|4BVF{jKub%7 literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bc-0.png b/src/client/resources/image/tank/bc-0.png new file mode 100644 index 0000000000000000000000000000000000000000..7c4b37cd196f4c1aabead490a5af3653f29d728d GIT binary patch literal 1967 zcmV;g2T=HlP)*gj%GyLWRdh0v;;y01^@p zAPC|GilDAUP#`Ex(k5yX3mcLml7=QE4G3HPa_!1%d+q)9?%cUEJk0KRX4j4FT^-x}`1rU5@W1zS{Opfo0DR@ZUcUO+BLF<}lal~^e0!GfKlL~O=dax6 z<*Ro9_}-I;d1#>5!*$#L^yFnGr{@9q?Q>7jY!inL9XiB4ni>v=0Z7DSZ0qd?AfqK| z;VrDUEA3zzE$QHic&vl#w(spqQ)`$24z`iz5w>+pSBK*k*4ynB*23Mw*0S&IPNUnp zHYY3;3IPz0McJCQ9jB8CT6hb~W|9t;P9_{Y9*cHx-S*jxhKUcr!8RmpHDU(aoE0Zl z)6>Mdk}+4r5)Ph-M?1J~``&I1H5dTyHtQg-wY=kv_YFLCweBp>ARE@6^} zAqzr?<99DS|Kg^FoqPGhv$`QqxL4oX)59lr??g+kE#{;8OfJu#FJEVRZmBKGVrcTU z-)|^#3c$sSmktUkCfsRBr!@}j{}g_|&zbPunH=?o&O)IC7KDNUlCdz+Pyp2jSf;~W zTrM&C%Ii$eEjhw;VHBk4AAD!*`Qm!Q?ER>iqi#@3C3*bd=bcFap8MrVW^+rVlX23i zxP5KA*J2@%H2~7d7|$GijGv#pOm4YsPopTBY3e6{r(1JbmNftjwhQx(jg1{^fAHw1 z_jyP^{`G0znwnm3ktk}2P$cS%BcUM2zVulyM^Q%lKKJB6Ypm<~h_34s?cE0)bsP5g zZ6U3tobhZf&&4Zmt}Ck5;>k2VpKsM)kH*70`n)7nb>=LUN)(I5j;^)~+uFay={Pn>;wcDN~n`F#F|0F_FGLZS2bwnJEZD_2)GEexPo zEV8h$a9_4y3o8Ix3#iss=*pxW!v4Lx`0KShn{ryOuMi9d$z(Dpio(h5e)8xY6-ryg% z-*%3%hLC5!{f#gG2w-Yz3Qf~Gg!zE8Zs5J?87kG9Gv2><7yI@+uwhZPY8fGfGyZU) zz>WXD@8Kw>>CCBV8mUyOqx&q&8nrAuyYJeKo9Ozg^B;WY>pZYEyRIlp)Tx$MU9B{9 z{xo*O%fXtMz4`~|SnBTX9!;my!|h!GxbW($&l*CWa34v%*&g=qd&F}jz46u*xqOjO zFhD4v+Si~;C=ehXR`Fqa&dXDmu6vFoVMv5-4!t|R{(0#f;%CoactJ=x(q6(0J-nOU zI|ny)h`;>zH@R|i(y1;SVZs=hy!5*bRT!SK=Pzf@9n%eSw7u*}#A7`4-~b=%%c8m> z=FwPQ7E1|b>@?GX^aYK4y{!vc6VtAVOOg{ z+RucLygf6wW}&DX@|KX+$fgTLA;iJ89=v}2Un9j*b-1pJLD>{wm(ZqjZ%B!7m)6pB z1gk#(d+Ahi;=AAa+Gx9PRaFa$qTExcQmIrd0AWbVwFY2+5k*4w$HY>}{^?NtK9Vu} zV`8NtSZUaAZ6X>Xp!z*rw|%KvcRofkNvHCdh{xmi{_mpEu*KBsI8I zW^;?qWFa*Jz;dxdzE}ldTQ*HJ9Q1JA_Vf8=XA!ZG{pZVuzLM(oIsoO$3NyJp0E%T2 z3)#nL3rohr^rY++FBQtnG#8PI2JvBfxNiGgzCfvJ&#^t5x*uUxX69_iv7n!xlwD=C zu&z{$o&A}nu#$ss?@1C;6%W^KpIaZu|MA0(1EifMdUr=84$soV`Z|vPoKa3-ejh!Ilao2QOEuq+=lu z*KI$)xXf(MPJ0X6q_CQ^N0tgbj*}J^^eZl5Wd|=;YSf#1Z!P=WV!^@hQ&^Rm=3BK? zEV+c)SS;jU6;>=cc)3!gUXOdYZu?w**}*p>?Emn3=0iIzq&)xt002ovPDHLkV1itL B-H`wQ literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bc-1.png b/src/client/resources/image/tank/bc-1.png new file mode 100644 index 0000000000000000000000000000000000000000..5eae1c7aaf958419634ff9e28c4cfc4732a2c84e GIT binary patch literal 1957 zcmV;W2U_@vP)M95^0>ailVAbB4{h5st}M05=c#`fZL`B#3eyoZ~+qG z0tpom1{9QtlEy)9X_{84no2dIiWQnxiJRag>omLZ?#}M)|C}?!#q7@R+Qyz7>1g)6 ze*K;2ob&C@ca*88ziR>P*p}u;-+l^!v+rK!9~b`vzz@ImBoA&M0pNQ-KY<(X)tgy< z`PcIRJp1@AzVgIF0Q};_n_Rn<1K^W$zgO6xsS_hZ0E`SK2?PQFq!KYYdNdMtbhqAU zBx?$#R#ha4>#i#pzPDuIc|9oR&BWrMMB&n`rnaCRZoJxZ6}Xhb+# zDiQ73u>`7bz$I8a7h>T+f8MnBe7zjo%o~-~`Z+d~Bp3|30~;T)R~GaSbdM(<#ZtUL z=XiVoxb;R*9B(q#O@;Jef@s8W1*R-#S1bV4>md@f12kF&jh3({3;IyK_QYDHjvKF# zl1jY=K)|OGXdhpt-b6^Vy~v@Be=bs~_(5mTe)@bqu6(d?sH|6~O=(i8H>M3kBn)XH zghWV*lop1R2w~b!DG}1d>+vqBs&~ndCKF@B7hd@K(-%7NV?Lj&-2zxced2GYzuIbv zhH6^5>g)R zPGEx#r4sCXV3J_KPcj}sO1Y-r$>mwmbl$skjm6t{>5X9n8pp59z5J3}FmLC>?Cji& z(lU>kriC;uOw(e^=m`7wJaghVV%G8XCfxcy8-0w`t;fS}*Ub60ZzmNUXQ+*yw z>CUNX8l_TcO;>?_uq~r~L0)}po=UAjG8SU0~h(sc6AMamqKA%4Z&}cN! zG;MRR)lIL~?;8xDR4TFFPPlCGAQLkYt` zFPEHgz1iZ8`H%ZNrlmM@CK3ta@%WmqDvB~=SsbJ1IOqSpz+-zK#_P4q;Fq3%7QI?0 zlPhcprI-d4P4CmrzI&OX-d(6=Sz4o7pXrQ;hK3e|5C_-90+^fo=Zl7v$9t=Uk@PTo z_v}Jdz0QmJM&>S8KFQ$ssrUy}{JsI_84e7fDyHMD)asl%_b(O}Gwqn7bBsrq-kSOK zhAX6}x;S%o?vE`Yj`Wu=l09G8$^X8}?&UwZfm#Cw z@RyUPcMB0_zAksvdCWdHh?Xp@3+h<6DWhz=M7P|1x>53xHg{=qzHhre?Bv zz`n!|$L$w*LDR{!1II%?JlLyr>(wiD$E#Q-VZZ%K&gM1B)rL#3yLo42Q(IE)$;x!} zZNoAAs=e!Oy?UkUXknk1;kbSK&aP$RyM383FeyQXN8h7($mtc48yzy9)Mx){ELPystRgz)**6r4-SE`P-Jsoqrxs@Wz z*`hnJPA>SoO3!4vlOuYiMx&iiZoPV?=4b_N*zsmpG)H#XoXa6-wnUSib1!o3;M|WgZG-7gnCN00000NkvXXu0mjfSuDRd literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bd-0.png b/src/client/resources/image/tank/bd-0.png new file mode 100644 index 0000000000000000000000000000000000000000..a1bcb780a496231b12a1e4831333747ec6f63d39 GIT binary patch literal 1113 zcmV-f1g86mP) zO>7%Q7=|Cm>-G9)2yuX@2kuCqN*t=5 z5T_vE&|bJAKq5*@0f`HdasUOTK#~eO*tH$o$=cpobJ*Q+-2AkTvT69F(SG~xyfg2- z-`G3ro1L9)11v1%xpZ{~fD4o3j2uk^@b<@702mogapC+q04`nmo`vOA06u;HJYMn@ zP169-qY<*{q|9C1#nOXuiKPeQtT!zHyyi=R(P)IB^q|aL+{IGK0g0uO132U3HD3t^ zgSP5On5@%5kA!h?7fUB}iKPbzz~=|RYktSUh+xREI2zgPfQ=>k!yN|(<0ye(w*wyW zJ9|(-Hsh>d^B!`saImw7k^_Xpp{@zM;!A;TpTB#P1_MrsY)n&?u1y}(&8`W&;>$f~ z7zTw~e_{&3@=Za@bega*x6R!?7N+R*H-**Vn!hihZ%*@PL(-gC=8{i`njnWeKD&3U|#|cxq(Q(kdicRjA zLdY>%LU8j|;jRw0gf*7?;md0P%1*0@#riq(%xQ!W``SMI?CYM~?AvP@4k~tZaHsg> z>NjY?0O6oYNK*-Ix`ySwhUV{Mtx~=}0+aE6Qi&K3I4#w6RngTD(U97cKs^%T;bTWI zg~h~~Q=@NQ|6*?fy^513vP^&Uo_l+_*=z!bNT6w&R4SD%_<;yiRh48iiDg;5_VPI_ ztBqx~5te1=?KZKfM!CFoOL#6&Q51%Uhvof?&po+qKf^G{=kr_no+)#p(P%I~Kfh#t7C!5##@Gx@^quQ~D*fvr~SEWqO8 z;^@-SvV71oP5vzu_x+pXUgC{co*(^SX4)2L7{)AsuIoLo&Z`(d{rF|WFaTR104)o& zcm{x@nFJ9{1>m>8asY%im1CI%0DtFhvu@bOp+}F~oVw9uDR+C{_)=h_VgDV}>Kok3 z7Xe7<8j7zCAhB39L?#{qV6|ALQriIFp$Frh@}+~dT3vQHkr_Z!d|eYXj0i^7{_JqMH2!cQIkMr0w})nSY9F&II1_Wr?fxbyo5PnJ0A3 znZU;S5V(Ew#S$y|lI@Jg{O%IxiZVBhuw5bt)BHZU+SNi?;$HLbC~-mNhM{*k5Y_yf fN>q}#*Zltg1%MuBzjq;-00000NkvXXu0mjf1fVBJ literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/bd-1.png b/src/client/resources/image/tank/bd-1.png new file mode 100644 index 0000000000000000000000000000000000000000..cd2a6838c38ee5a1e27e433e956d538c757b1c7c GIT binary patch literal 1125 zcmV-r1e*JaP) zPiP!f9LGP?nPg^ncC*QDx>=hwZN@T`X-cqlz- zPeJt1dhqNYFr=|4s9+$7nrP7`!QHS)cC)j|YHdZ%5 z*nB1H0lJcLR8{pVXa`9K2y$^fijR%!(I6i-U+MNNPPRoiDoAypw5W{^=mH-b)9W1w zm#<_qUR6X4HGz$+_=fr7H^5daR~V*JOSM|@q9pBx(-J8M~D+;;;cqPmVHT!*YW2QAMH-yPB5jM%_i!t3)~ z7J^&zg>4yF?3A8MWQmM2lzb^t+RV9^5;W!S@KYb3{cCc*+ zVcTxoaY)28icPje=mHf*p{J)Ocs~F5!%cCfX_C+9H}gYN=0&wyWol|_*Zj~0%Cby4 zoko^r9LHf|a;E7Lw?$R@d%O2vAi&DXO7JH6?5l5^zUodMJHp`UQ~!;?y9rrQNF)-Q z@&`uXAG0~$d~Xy>2!_t|jlA&e&?M|a;A_u4amQDkCOg!ss~DEF{a|%buB`F>)HF3q zaPy~MCtn_Z>dvQ`t>X3JC$~MZSk*PELhN+trt$wh&6G+j+_?GOo*!6uEU;FqoduYg zndzIGn-4l_mPKK4Y0tk&?j~M*X0Y$wu~ApxY_2d4;K;2zt}d+TKXu~DY_0%+H1Wff z0}$0(IhsiV@K_jCYYRMzmZ$+(6hIRJ#s4+K_C9W(2GPzm}b_Uz^DX+9nZ9* zDN@4(VeyqY4rfC9@Uo7(X;)*wcn=2a?d~Dgs5Yya0fUx<>T;AP`hY(b&RS&St zTz=WD%*&N4tN7S*WtC)H^Ck$FugvG%3N%>?Dp)8K@$-JpFe*XLFe;d4)Lo*G`GJEm rO|G+eIjF30i3&m6G~*2pgvI{{D4r*yiK^F300000NkvXXu0mjfr@11{ literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/pa-0.png b/src/client/resources/image/tank/pa-0.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8bd0ea34bd41c2f362f2ff4a797967b616e4b3 GIT binary patch literal 1682 zcmV;D25tF?P)bX7vP1tCy-pp`h3(^f*z{~dGiJU zkWQyDH#Y|WV2rKZxpU_s&I~Ocj{^VOf0u+lJ?PeI5#v1<)5>Nl40Snif4|x~@Z2RkB1XW{jcL zYQc3~eEReW^?DtgbNIeb;SoYW*L94KkHfZY_wHQ)Ewgb*vz8$m)cN2Hg0--qXUa9x+Y_q{wEaLx;l9zFUC5yuaNHa9na z^*ryj5MoA>uq+Gtd>)o%fiXq|{;a;x?$8q2|4jPRHy4@~Sak(O80uLCQg+k%lC_ea78 zh(hqe)vH%&{^7$1?C1I9{}kSzznY&J{tw{PE~*XvO~3mdwwBb&{lQmJ5KVglE% zUq`pwgN!Gj0C4<*DH%k+T(>yD0&qLvV7nuf{ANu*LKjE|3piDjzQ>e|Sp z{=Y`KT&89JUxxO*PSk>+Tv;+V4i66_D@-I3NG6l0R;xHYJ(Vk%dLCn}wz#9Jr<@!cTSk=g*&CV~p(t8|V4+=P^4w+t=a4y1nOlC>D!owOVJp zJvirujg5^zA~#n6xOeZ~uA(T*!Btl(mGJJ}yS|WwjY_3LE9S-FmLs@95AArKx3a#z{yFjn?cm_xH(4WO9x%qBC<;D){J31H zR0_3PEz%ZNUaG1hpU-dIym|9+unx)QD-(QncJ}iiLP8RfFEYmHMbGolYPIm~+c%WU zWt^Ox3?!s!8m6YEkk98aJv|LoRcZemEVO~Pv^Fy{^W)iG)(g%#)ecS5sF`*;9dOQ( z&1UJRLYQo~+lA+OXfzry41>DAOman0MjwNuV!26|2SOP>nHN&wFxhsyO-ao;CvP+w zjUSqJC?Tn!*Xz-57u&Y!<%`6E cI>J2kFK^QN_`L>EOaK4?07*qoM6N<$f|acs?EnA( literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/pa-1.png b/src/client/resources/image/tank/pa-1.png new file mode 100644 index 0000000000000000000000000000000000000000..edf381c4ddaa1c69b8d50b0712d7cfd34b3d344c GIT binary patch literal 1665 zcmV-{27dX8P)G05DCHNEn7e@+honnk2U@3!HNRAemtpgq0)- z-9}eJmSxe4@p!y1p)fWqPb3nMWx0b;5CqYLlF1~oHw=SLD&(eVlKj75ZQF*bs)Pps z&N*QtH5C4cZQE$K+oT~OkHXrv-GSA0y@ODAk4O#ay58XzVwk20P18Cw)DIgrnV5^e zvMkdcy#{GWRn?A@gw-tw4T248E(n4S4JnF3dqfga6opQrsw$~F7K_36eK?MTFJHdE zbzORyF@_)rz!-z7s>ozA7#$tO*w`2(Ng`7ULYk&QQI!6KQmIryEQDP}xNdK6=f8ga zI#({2Cq2&tV+@>gFvjQ!f`DY7KYs>e3?m~WNG6jnuU@^ncyeFMvV;P*yAkT@SL3!8ym& z)D+I2KaY4k4oQ-_noXw z#bObrX~MQ`n5GHKvY=@i48x%4%jI&YR4Qb)&=_WnJq7U7KpNtlFNXhd;lc%)zkmN8 zTU%Q_Hwo7}MNx3-)T!IHR0^e137Jd=mo8m`@B0wJAs$6h z3is~a`@JtAS(b-IM1)HL0POGY51K-tsw&3D#xOKAgwfH_Ua;YExqLs;ssFFBx3@=O z|06>^&KE~vp@=Nu8{fWt8+gNbJdQ*nfpWQwX0r(Z6mgt$$g+Ht&*vBW5|Sk8RajUq zmuY_H%o)6U_ii9Ej^iK*0_^YaV{2;*j^l_-9ZsaLZr!@|pl_7jxN&0x02Mpeb>K-YC}&QYt?sBYD2H5?oq z^!nc1z@_6jmlT@K=DJ9d;%;^N^l55gEz9a!?ZZ*li_D`(k0RTUj^cX#`t^z=Nd?9j zX=-PkpeRb;bS zOioT>Vq&5rxr%*-Rz*}#O-+4&x35;KbY~K`1K;;Mt}wDJBb&`)czC!kR@_!R&x5!W zgzs*QG0IOpFN%UtxS%!~4RTI##Sy<=^uxwtF(M)SNgP0wB+D#6YF*bQZG>;5QP{Bd9LFKe2~&HXN7zUW znWjlEHX02&Ng|P;m!q(nrja&W*G0Wv2LK`##zqoqwOUB0({wr^Po+|1hA3=UbCpVk z2nk27*XxAsSvnlYp@ld}yE^d8D!x00000 LNkvXXu0mjf9@z93 literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/pb-0.png b/src/client/resources/image/tank/pb-0.png new file mode 100644 index 0000000000000000000000000000000000000000..6f9d3e22634ab5e85479abd2be1edf87159ac0ee GIT binary patch literal 1431 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 k=Qa<@)H+}PsQ3Z$Z*tP4a zTW=gm6~}*lo9VfGJc;d%FT`ZMCeeyS7{U^P;ze8}o&X8uk-UI-K&wTpkoX4sz-6C! z;Avl%kFXCRWF;^QMoCziIBUGIo!E};nelYby}PP-=$?tawr6^nJyNS{PM!a$f7Piu zeX6v#-$VgSC$rp|xdOm@n=5S99RS|?!fOC*)g9j3Tmj(L%oV1SSpa_XXo+F)=FgTi zdWf0L763@vX-K4lb~;biv;vDzXQ1fV8p%voKPvq`;Sw110ggy5PNYq`h!%n!@=hOgjaJ8I@qTag~Y$ z7)EMtk=aXEG0Yg~MkI`x&leT})b{E%;GKQ|%TAFSeF;rBkitg@A1QsL5Nz#j;5F-K zV%Jtby#I~YfAl7RL9`X@CQ0?juif;7yxR>=7-BCBrJf$4aQO!DWCr{;_+Ib`@7V8( zQ{>V18k>iE!8SM&VqXg0_^sbFF@IY0C`S1&-sHlK9}v%u_O;C=Gko>pt9)hZl~enF z_X}=*rUVmH^Q5Nc2k{BO#r!z4x$`IVO6iM(_~}W|EKHKS_RWEa9hKK6=NJ$3U`G^c zaS$IpcWU}e-#W9e(x@VR4;_VtB6)`0jp@tWbBhS25W#+4R6D!^6iPcFCB;PsP=84{ zJ7}#2Br_ld%f)S^k_e@k9iM%7B0u(ID1urn9^^J)`Qcw85j!ekVit4#0hFJE-)8yo zKk%i%lajwa`rEs|`aO}HM#_V&c4J_ID&n`cpPcDMwOeRpWh6Fpy*8;3=3E z7NVPz3#hr&wb%08C$ana@vOX6Ill5;@Z;qPrzX=OGtV zOAF%{Ul`Qg+iLw`G+$?Rc-#N&5(N0p*MG?JM<1|T+(w*%(WN9^*(X`v3lxWYaJV0d z$lwGwR}il(V1$)#JeJ_b)z`uIIIQd=yf(U0=!B2(NLBWOyeVHyp{ncLd%l4{BBaDu zid*0R`Qp$70c!vLfb7DzPv}QdxznqeQ{$G**CS;mJmK@_kN-un;hyNzG&vB# zNF#b~k*D|mM0sPSukG&PKJWi$iAu9}YJWS%Km@hMCx5sJpsg%j(>GV&Ijf@X=(Tu) z%-H8hW=2uMNBJH~dX&n0Z0&8}HtWZ$=p$|2ia+`BPu{+5Vs=BP&Hl9Kel(Q|_r&-t zY_9g5k=Ly8{K-eBp6Yxhdt&G2uU}M3yQ?&X(7Kg>@4FetDFI;B9WuQvKLZ)bPvAHu za#jpI>Z#6g4gj$IHrdHJ45e_r7VYrhowMRdrD#b(#cN@p$QTxerXiK$AUw?LXrxRF zsT38jMN5hkcsrHFaSlk?X{@N{V#g^0AWaKx^d$_STrE)z^V;OdH~>|@&9g9NTuA3h zhehcA;d3+~Wm>$P4h~goNAOpV;Mb~U8jUJrQbxa7=&Yb-#lZ-!%xZ24r*pRwUIO{; zCLLQ})4O*o!{Q?l3|7#JCA!Y)ZW*UjVx{u{h*pD+t+4Fi3jz#_?@O>!31$_Kry!XF zpz4&Uw8A_#G7-$WS)*g?+ZhnS_jXu(UxKb1%qruzpc$NF8?_Q{qZ(K=gSTk7bZkYo h0Kv^M!{YnN{{S)EjldEw9Ekt`002ovPDHLkV1k2HBa{FD literal 0 HcmV?d00001 diff --git a/src/client/resources/image/tank/pd-0.png b/src/client/resources/image/tank/pd-0.png new file mode 100644 index 0000000000000000000000000000000000000000..64d60861ea2b273fb1f9ee56a3a37f69a3690d0d GIT binary patch literal 1525 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 TankType, var bullet:BulletConfig; var bullets:Int; var hits:Int; + var skin:String; } typedef TankSpawn = { > TankType, @@ -58,8 +61,9 @@ typedef TankSpawn = { > TankType, typedef TeamConfig = { var id:String; var size:Int; - var spawnInterval:Int; var tanks:Array; + @:optional var spawnInterval:Int; + @:optional var color:Color; } diff --git a/src/common/haxe/ru/m/tankz/core/Tank.hx b/src/common/haxe/ru/m/tankz/core/Tank.hx index 5e4740b..f5a7e62 100755 --- a/src/common/haxe/ru/m/tankz/core/Tank.hx +++ b/src/common/haxe/ru/m/tankz/core/Tank.hx @@ -1,5 +1,6 @@ package ru.m.tankz.core; +import ru.m.draw.Color; import ru.m.tankz.game.Game; import ru.m.geom.Point; import ru.m.tankz.config.Config; @@ -11,6 +12,7 @@ import ru.m.geom.Direction; class Tank extends MobileEntity { public var playerId(default, null):PlayerId; public var config(default, set):TankConfig; + public var color(default, default):Color; public var hits(default, default):Int; private var bulletsCounter:Int = 0; diff --git a/src/common/haxe/ru/m/tankz/game/ClassicGame.hx b/src/common/haxe/ru/m/tankz/game/ClassicGame.hx index befb39f..9a6e5d5 100644 --- a/src/common/haxe/ru/m/tankz/game/ClassicGame.hx +++ b/src/common/haxe/ru/m/tankz/game/ClassicGame.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import ru.m.draw.Color; import ru.m.tankz.control.Control; import haxe.ds.Option; 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 BOT(default, never):TeamId = 'bot'; - public static var PLAYER1(default, never):GameMode = [{team:HUMAN, type:Control.HUMAN, index:0}]; - public static var PLAYER2(default, never):GameMode = [{team:HUMAN, type:Control.HUMAN, index:0}, {team:HUMAN, type:Control.HUMAN, index:1}]; + private static var PLAYER1_COLOR:Color = 0xffff55; + 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 BOT_LIFE(default, never):Int = 20; diff --git a/src/common/haxe/ru/m/tankz/game/DotaGame.hx b/src/common/haxe/ru/m/tankz/game/DotaGame.hx index 6ecd06f..19440f5 100644 --- a/src/common/haxe/ru/m/tankz/game/DotaGame.hx +++ b/src/common/haxe/ru/m/tankz/game/DotaGame.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import ru.m.draw.Color; import ru.m.tankz.control.Control; import haxe.ds.Option; import ru.m.tankz.game.Game; @@ -17,14 +18,17 @@ class DotaGame extends Game { {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 = [ - {team:RADIANT, type:Control.HUMAN, index:0}, - {team:RADIANT, type:Control.HUMAN, index:1} + {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:0}, + {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:1} ]; public static var PLAYER2_VS(default, never):GameMode = [ - {team:RADIANT, type:Control.HUMAN, index:0}, - {team:DIRE, type:Control.HUMAN, index:0} + {team:RADIANT, type:Control.HUMAN, color: PLAYER1_COLOR, index:0}, + {team:DIRE, type:Control.HUMAN, color: PLAYER2_COLOR, index:0} ]; private static var TEAM_SIZE(default, never):Int = 5; diff --git a/src/common/haxe/ru/m/tankz/game/Game.hx b/src/common/haxe/ru/m/tankz/game/Game.hx index 2ccd4fd..775e8a8 100644 --- a/src/common/haxe/ru/m/tankz/game/Game.hx +++ b/src/common/haxe/ru/m/tankz/game/Game.hx @@ -1,5 +1,6 @@ package ru.m.tankz.game; +import ru.m.draw.Color; import haxe.ds.Option; import haxe.Timer; import promhx.Deferred; @@ -31,6 +32,7 @@ typedef PlayerId = { var team:TeamId; var type:ControlType; 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 tankConfig:TankConfig = config.getTank(type.group, type.type); var tank = new Tank(playerId, tankConfig); + tank.color = playerId.color.zero ? teams[playerId.team].config.color : playerId.color; applyPoint(tank, point); return tank; }