From 05b6fe4a562ddc34b0619ff3289500f4ada3cb96 Mon Sep 17 00:00:00 2001 From: shmyga Date: Tue, 13 Feb 2018 14:44:04 +0300 Subject: [PATCH] [client] added any map item renders --- src/client/haxe/ru/m/animate/Animate.hx | 2 - src/client/haxe/ru/m/tankz/render/Render.hx | 20 ++++++--- .../haxe/ru/m/tankz/render/RenderItem.hx | 38 ++++++++++++++++-- src/client/resources/classic/config.yaml | 14 +++---- src/client/resources/dota/config.yaml | 14 +++---- src/client/resources/image/map/ace.png | Bin 0 -> 307 bytes src/client/resources/image/map/armor.png | Bin 0 -> 304 bytes src/client/resources/image/map/brick.png | Bin 0 -> 279 bytes src/client/resources/image/map/bush.png | Bin 0 -> 969 bytes src/client/resources/image/map/none.png | Bin 0 -> 93 bytes src/client/resources/image/map/water-0.png | Bin 0 -> 598 bytes src/client/resources/image/map/water-1.png | Bin 0 -> 531 bytes src/common/haxe/ru/m/tankz/Type.hx | 2 +- src/common/haxe/ru/m/tankz/config/Config.hx | 12 +++++- .../haxe/ru/m/tankz/config/LevelBundle.hx | 4 +- src/common/haxe/ru/m/tankz/game/Team.hx | 4 +- src/common/haxe/ru/m/tankz/map/Brick.hx | 6 --- 17 files changed, 77 insertions(+), 39 deletions(-) create mode 100644 src/client/resources/image/map/ace.png create mode 100644 src/client/resources/image/map/armor.png create mode 100644 src/client/resources/image/map/brick.png create mode 100644 src/client/resources/image/map/bush.png create mode 100644 src/client/resources/image/map/none.png create mode 100644 src/client/resources/image/map/water-0.png create mode 100644 src/client/resources/image/map/water-1.png diff --git a/src/client/haxe/ru/m/animate/Animate.hx b/src/client/haxe/ru/m/animate/Animate.hx index 3db9430..6cb4c0e 100644 --- a/src/client/haxe/ru/m/animate/Animate.hx +++ b/src/client/haxe/ru/m/animate/Animate.hx @@ -26,8 +26,6 @@ class Animate extends Bitmap { } } - private static var a = new BitmapData(1, 1); - public var playing(default, set):Bool; public var frames(default, set):Array; private var index:Int; diff --git a/src/client/haxe/ru/m/tankz/render/Render.hx b/src/client/haxe/ru/m/tankz/render/Render.hx index 03b93e0..a85eb21 100755 --- a/src/client/haxe/ru/m/tankz/render/Render.hx +++ b/src/client/haxe/ru/m/tankz/render/Render.hx @@ -54,13 +54,21 @@ class Render extends SpriteView implements EngineListener { } public function draw(game:Engine):Void { - for (brick in game.map.bricks) if (brick.config.type > 0) { + for (brick in game.map.bricks) if (brick.config.index > 0) { if (!items.exists(brick.key)) { - items[brick.key] = new BrickItem(brick); - if (brick.config.layer > 2) { - upLayer.addChild(items[brick.key].view); - } else { - groundLayer.addChild(items[brick.key].view); + var item:RenderItem = switch(brick.config.type) { + case 'ace' | 'bush': new BrickItem(brick); + case 'water': new BrickAnimateItem(brick); + case 'armor' | 'brick': new BrickBreakingItem(brick); + case x: null; + }; + if (item != null) { + items[brick.key] = item; + if (brick.config.layer > 2) { + upLayer.addChild(item.view); + } else { + groundLayer.addChild(item.view); + } } } } diff --git a/src/client/haxe/ru/m/tankz/render/RenderItem.hx b/src/client/haxe/ru/m/tankz/render/RenderItem.hx index cea12ce..7813868 100644 --- a/src/client/haxe/ru/m/tankz/render/RenderItem.hx +++ b/src/client/haxe/ru/m/tankz/render/RenderItem.hx @@ -1,5 +1,6 @@ package ru.m.tankz.render; +import ru.m.tankz.Type.BrickType; import openfl.display.BitmapData; import ru.m.draw.Color; import ru.m.tankz.core.Bonus; @@ -77,10 +78,39 @@ class BitmapItem extends RenderItem { } -class BrickItem extends RenderItem { +class BrickItem extends BitmapItem { + + public function new(value:Brick) { + super(value); + redraw(); + } + + override private function getImage():String { + return 'resources/image/map/${value.config.type}.png'; + } +} + + +class BrickAnimateItem extends AnimateItem { + + public function new(value:Brick) { + super(value); + redraw(); + } + + override public function redraw():Void { + var frame0 = Assets.getBitmapData('resources/image/map/${value.config.type}-0.png'); + var frame1 = Assets.getBitmapData('resources/image/map/${value.config.type}-1.png'); + view.frames = [for (i in 0...15) frame0].concat([for (i in 0...15) frame1]); + view.playing = true; + } +} + + +class BrickBreakingItem extends RenderItem { private var broken:Int; - private var type:Int; + private var type:BrickType; public function new(value:Brick) { super(value); @@ -93,7 +123,7 @@ class BrickItem extends RenderItem { var g = view.graphics; g.clear(); if (value.destroyed) return; - if (value.config.type > 0) { + if (value.config.index > 0) { g.beginBitmapFill(image); g.drawRect(0, 0, value.rect.width, value.rect.height); for (c in value.cells) { @@ -118,7 +148,7 @@ class BrickItem extends RenderItem { } private function getImage():String { - return 'resources/images/map/map_${value.config.type}.png'; + return 'resources/image/map/${value.config.type}.png'; } } diff --git a/src/client/resources/classic/config.yaml b/src/client/resources/classic/config.yaml index 18845f2..6e2051b 100644 --- a/src/client/resources/classic/config.yaml +++ b/src/client/resources/classic/config.yaml @@ -9,13 +9,13 @@ map: gridHeight: 26 bricks: - - {type: -1, layer: 2, armor: -1} # border - - {type: 0, layer: 0, armor: 0} # none - - {type: 1, layer: 0, armor: 0} # ace - - {type: 2, layer: 3, armor: 0} # bush - - {type: 3, layer: 1, armor: 0} # water - - {type: 4, layer: 2, armor: 2} # armor - - {type: 5, layer: 2, armor: 1} # brick + - {type: border, index: -1, layer: 2, armor: -1} + - {type: none, index: 0, layer: 0, armor: 0} + - {type: ace, index: 1, layer: 0, armor: 0} + - {type: bush, index: 2, layer: 3, armor: 0} + - {type: water, index: 3, layer: 1, armor: 0} + - {type: armor, index: 4, layer: 2, armor: 2} + - {type: brick, index: 5, layer: 2, armor: 1} player: human: &human diff --git a/src/client/resources/dota/config.yaml b/src/client/resources/dota/config.yaml index b3ba38c..5193237 100644 --- a/src/client/resources/dota/config.yaml +++ b/src/client/resources/dota/config.yaml @@ -9,13 +9,13 @@ map: gridHeight: 30 bricks: - - {type: -1, layer: 2, armor: -1} # border - - {type: 0, layer: 0, armor: 0} # none - - {type: 1, layer: 0, armor: 0} # ace - - {type: 2, layer: 3, armor: 0} # bush - - {type: 3, layer: 1, armor: 0} # water - - {type: 4, layer: 2, armor: 2} # armor - - {type: 5, layer: 2, armor: 1} # brick + - {type: border, index: -1, layer: 2, armor: -1} + - {type: none, index: 0, layer: 0, armor: 0} + - {type: ace, index: 1, layer: 0, armor: 0} + - {type: bush, index: 2, layer: 3, armor: 0} + - {type: water, index: 3, layer: 1, armor: 0} + - {type: armor, index: 4, layer: 2, armor: 2} + - {type: brick, index: 5, layer: 2, armor: 1} team: radiant: &radiant diff --git a/src/client/resources/image/map/ace.png b/src/client/resources/image/map/ace.png new file mode 100644 index 0000000000000000000000000000000000000000..df394b56b4ca38ecbfa9b4a31394b8aa62d17968 GIT binary patch literal 307 zcmV-30nGl1P)1pw7{&3w6=CB*CWTHN1O-nyM<(4ix`4M{!975|*i$mZhN2D)#=&kP5$SD$$8Qkd z%batrX&UOf20*D2V=9V5@)reY0EXd=wI}-i^0X^bpk3D?QlQpaVCVpq*ZG^giV(3Xol|pY9&@O$k(hT%byoh!m(X6(R*%6fzX{ zLxB+39|h$LhoPW-;BXY+$w?^SJs2H^^CNhDQ9h`(r~kgSoS47Xvk>V!z)`U6BF>%`cemJq6rAYO(+T002ovPDHLk FV1n>CfjIyG literal 0 HcmV?d00001 diff --git a/src/client/resources/image/map/armor.png b/src/client/resources/image/map/armor.png new file mode 100644 index 0000000000000000000000000000000000000000..16ecf699be2f644549f54c2298ad427f7ca8cbfb GIT binary patch literal 304 zcmV-00nh%4P)9Yl5!a`2H`UF7#OfuHq(fAqK(t(@m9@>uoP3t8xzv92odGGcfbE@B8k( z$9vDREd1nu>mR=BI&K7(F@~Zjcn=BHT2q!K^E`)3Y>c61|c<*t};hbX}N2HVpAxM&hEXz@I)-6j+cuIU zAN&8rma;5y&OPk zZ>zZaQh(K%SZhsHRY9Qenb=xO(=@@L0Jo6if7J(a^y(P;juy}W0000(67hQ zA|SlbP)Ik&rsbnVOpEf(2d+7`4ZR25l3ja_H6 literal 0 HcmV?d00001 diff --git a/src/client/resources/image/map/bush.png b/src/client/resources/image/map/bush.png new file mode 100644 index 0000000000000000000000000000000000000000..7f1615e378b4cfd7e3b053980bce6f0a446f12f7 GIT binary patch literal 969 zcmV;)12+7LP)*BJ zQMDbgEHEul3bY2DKpcZI;GOru_0-U=R%xg-j`1Y0=Tq?u;E#b{l)X?C8R)hHH@?o= zeR3~YO6z7?nYvv3*vqTeJs-Th$nq<&P=WF+Y_3Zdh5@?`*x7=gzK32HrjDv`<%{sU zL%S`MF*c>b@De}IeP*gaMye%FP@W*x7-GSfkfoX8=?N7a60Iuw6>AGK} z;ui?=1<3b--8{@KKzVjV-S(y??~l0s@uud%ZD{SoOXuOts|uh2tQw9()v*a22b>(_ zTmkj+u-AmBqldtqcJ{-{$Hm5W;Pjc{bpTW?(*~mnjM?!w|kq3rtf!$FfJ!42gkei_^ILE|h$67k;cG2IzZrA_ zNdnzSq8-$8+!OuoE%^Bs)Ymk;fF@ft4iUIf(@%jz`f&5twZ`7lZ7_ZEa{; zdlLD29VVvx%`_&Ctt3u?bw#=nM4`}<#KOCmmox_}>hv?|i5x#6dwoqZw$fnTNDNF< zI8PFoJprCCk#<5&&Xx1TG}yM-6axWHXJmDwKG_}lEW;cPokDR03eebs`?oc54CgPx zh0ECzOE2TS55V)F6GGUAum!CH>87}secWyd9j{#k+j%-DfceIUUhVl8rRN*l5O@1E zo5)?xl|Sf4(uqrF6{h*$pa8128Vq|jY-|2_00;ZRvtdY$k56W2#xHj?D_=qB2%N0I z3ojpbl&NFaQ!Fn3Z!p~WMp}917&NzGzo{vd4!3j_Akkbxb7dHPOS4{=uA7|68o8c~ z&e@Z&_E55t{Q2BaT$5vJ)mDQqfp-CZSkbIKgsG!4N|(+tEVbY7Yks{8)6YU_9G*L+ z0It<4jW_?DiZOL1+|!qUp#CR3Q-)K^u=yC8J1{jP@8%a3^NU$}42xPuPb*jFcACH{ rNPBid8I7IRXxKb$eRR5UC$0YjZ&g!@nb!F<00000NkvXXu0mjffJ4iC literal 0 HcmV?d00001 diff --git a/src/client/resources/image/map/none.png b/src/client/resources/image/map/none.png new file mode 100644 index 0000000000000000000000000000000000000000..f13346853ee3bcedeedd8da7b555336cc4497f53 GIT binary patch literal 93 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fDxNNmAr`&KDG3Qb&O0z4aN%}# l=an<9xbh&d8O%_T?E_n1xk}C=> zz6N|b2#{tnnT7{@lBXXWs;=0IxataWMZKohlw=FBiXZMtYEAj40*CAK8%Ew{#M8;* zcSvkV4N_?sZCLS-qkvSJP>R_EglS&Y6+C|JEG#wihLQeMZuG|(FW78 z;+^YnO>CWi(1THbvAR-SP^vF)=&EtC%*U%_X}5f?&-L%gG`#rakShv?eZ|LTKC@U8 z<-%&<@>KEW{tYMlwgipm(eJgG#d1YKZO)==12S(Tud7zh8A&cqmFm zHwn;P9rSFEf^L=}1(;3X>@c9}MsZJN^d=+EKIvMat~!cg>{2>A46G+;>E`7NrC3L9 kDxbHQ(bnrK>+&)94b;8i&`iJaP5=M^07*qoM6N<$g4VPmkN^Mx literal 0 HcmV?d00001 diff --git a/src/client/resources/image/map/water-1.png b/src/client/resources/image/map/water-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e8b3726716231f3fba2cf0e23bb7a4d7276cc1ce GIT binary patch literal 531 zcmV+u0_^>XP)UMI1)g^9{>#q6hT5}aLhq65@bpyhoXK!BOGlK;pI(P zR<3F=Es`v3S_F9`opASEPH)g>p|gMv0DJWeX6E>^`{Qppn(y-G2;}Dos=FFWc64sP0Vz~EY<8Z1Lf!xt*W|}sY>(i( z(V}b)FpB(Qugx(0h;noQ@Lj-nDV8?EU78kw??%T`wh7h`x!vBLS?pLsc56L^MZTT| zs=Knxv`DPoLILS{!0E~eMv=rmQ595Cvbp%~%I5=ewraP{2F2|$Phslh zsh?t?*}q2*9?J>Gd7Cm4lk5p>^KY>EU*Hi1zjXgM^nVK&Ei z$Dq&fRF{{KLZ!og8|gIA;v)SQ&_$%Drn#VqwAW^MP4KY_)yL{WnkdpLw$3wwu-9g| z+~H2q03KVVQlGQu V)XI1Nu3`WH002ovPDHLkV1nsH?7sj2 literal 0 HcmV?d00001 diff --git a/src/common/haxe/ru/m/tankz/Type.hx b/src/common/haxe/ru/m/tankz/Type.hx index c598298..31a03a1 100644 --- a/src/common/haxe/ru/m/tankz/Type.hx +++ b/src/common/haxe/ru/m/tankz/Type.hx @@ -9,7 +9,7 @@ typedef TeamId = String; typedef ControlType = String; -typedef BrickType = Int; +typedef BrickType = String; typedef TankType = String; diff --git a/src/common/haxe/ru/m/tankz/config/Config.hx b/src/common/haxe/ru/m/tankz/config/Config.hx index 9c0a630..d247251 100644 --- a/src/common/haxe/ru/m/tankz/config/Config.hx +++ b/src/common/haxe/ru/m/tankz/config/Config.hx @@ -27,6 +27,7 @@ typedef MapConfig = { typedef BrickConfig = { var type:BrickType; + var index:Int; var layer:Int; var armor:Int; } @@ -97,7 +98,8 @@ class Config { public var points(default, null):Array; public var bonuses(default, null):Array; - private var brickMap:Map; + private var brickMap:Map; + private var brickMapByIndex:Map; private var tankMap:Map; private var presetsMap:Map; private var bonusMap:Map; @@ -125,8 +127,10 @@ class Config { private function init() { brickMap = new Map(); + brickMapByIndex = new Map(); for (item in bricks) { brickMap.set(item.type, item); + brickMapByIndex.set(item.index, item); } presetsMap = new Map(); for (preset in presets) { @@ -142,10 +146,14 @@ class Config { } } - public function getBrick(type:Int):BrickConfig { + public function getBrick(type:BrickType):BrickConfig { return brickMap.get(type); } + public function getBrickByIndex(index:Int):BrickConfig { + return brickMapByIndex.get(index); + } + public function getPreset(id:PresetId):GamePreset { return presetsMap.get(id); } diff --git a/src/common/haxe/ru/m/tankz/config/LevelBundle.hx b/src/common/haxe/ru/m/tankz/config/LevelBundle.hx index 067339f..02a1327 100644 --- a/src/common/haxe/ru/m/tankz/config/LevelBundle.hx +++ b/src/common/haxe/ru/m/tankz/config/LevelBundle.hx @@ -26,7 +26,7 @@ class LevelBundle { for (line in ~/\s+/g.split(data)) { for (c in line.split('')) { if (c.length > 0) { - bricks.push(config.getBrick(Std.parseInt(c))); + bricks.push(config.getBrickByIndex(Std.parseInt(c))); } } } @@ -41,7 +41,7 @@ class LevelBundle { } else { var obj:LevelSource = Yaml.parse(data, Parser.options().useObjects()); return { - data: obj.data.split('').map(function(c) return config.getBrick(Std.parseInt(c))), + data: obj.data.split('').map(function(c) return config.getBrickByIndex(Std.parseInt(c))), points: obj.points, } } diff --git a/src/common/haxe/ru/m/tankz/game/Team.hx b/src/common/haxe/ru/m/tankz/game/Team.hx index bd2a2b3..70be402 100644 --- a/src/common/haxe/ru/m/tankz/game/Team.hx +++ b/src/common/haxe/ru/m/tankz/game/Team.hx @@ -24,8 +24,8 @@ class Team { this.spawner = new Spawner(config, points); } - public function trySpawn(player:PlayerId, spawn:Bool = false):Bool { - var player:Player = players[player.index]; + public function trySpawn(playerId:PlayerId, spawn:Bool = false):Bool { + var player:Player = players[playerId.index]; var result = false; if (player.life > -1) { if (player.life > 0) { diff --git a/src/common/haxe/ru/m/tankz/map/Brick.hx b/src/common/haxe/ru/m/tankz/map/Brick.hx index d94fcd5..ea5daaf 100644 --- a/src/common/haxe/ru/m/tankz/map/Brick.hx +++ b/src/common/haxe/ru/m/tankz/map/Brick.hx @@ -9,12 +9,6 @@ import ru.m.tankz.core.IKey; class Brick implements IKey { - public static var BORDER:BrickConfig = { - type: -1, - layer: 2, - armor: -1, - } - public var cellX(default, null):Int; public var cellY(default, null):Int; public var key(get, null):String;