From c0496f2e7c74e9b16309156c450d3d062a19d616 Mon Sep 17 00:00:00 2001 From: shmyga Date: Wed, 14 Aug 2019 18:00:56 +0300 Subject: [PATCH] [client] bullet skins --- src/client/haxe/ru/m/tankz/render/Render.hx | 4 ++-- src/client/haxe/ru/m/tankz/render/RenderUtil.hx | 5 ++--- .../ru/m/tankz/render/item/BulletRenderItem.hx | 16 ++++++++-------- .../haxe/ru/m/tankz/storage/SettingsStorage.hx | 7 +++++-- src/client/resources/image/bullet/mine.png | Bin 0 -> 1206 bytes src/client/resources/image/bullet/rocket.png | Bin 0 -> 1217 bytes src/common/haxe/ru/m/tankz/config/Config.hx | 1 + src/common/haxe/ru/m/tankz/core/Weapon.hx | 2 +- src/common/haxe/ru/m/tankz/game/EventUtil.hx | 2 +- src/common/haxe/ru/m/tankz/game/GameEvent.hx | 2 +- src/common/haxe/ru/m/tankz/game/GameRunner.hx | 6 +++--- src/common/resources/config/classic.yaml | 3 ++- src/common/resources/config/death.yaml | 7 +++++-- src/common/resources/config/dota.yaml | 1 + 14 files changed, 32 insertions(+), 24 deletions(-) create mode 100644 src/client/resources/image/bullet/mine.png create mode 100644 src/client/resources/image/bullet/rocket.png diff --git a/src/client/haxe/ru/m/tankz/render/Render.hx b/src/client/haxe/ru/m/tankz/render/Render.hx index c5ee375..6c361e5 100755 --- a/src/client/haxe/ru/m/tankz/render/Render.hx +++ b/src/client/haxe/ru/m/tankz/render/Render.hx @@ -149,8 +149,8 @@ class Render extends SpriteView implements IRender { entryLayer.addChild(item.view); item.update(); playAnimate(item.rect.center, AnimateBundle.tankSpawn()); - case SPAWN(BULLET(id, rect, playerId, piercing)): - var item = new BulletRenderItem(rect, piercing); + case SPAWN(BULLET(id, rect, playerId, skin)): + var item = new BulletRenderItem(rect, skin); items.set(id, item); entryLayer.addChild(item.view); item.update(); diff --git a/src/client/haxe/ru/m/tankz/render/RenderUtil.hx b/src/client/haxe/ru/m/tankz/render/RenderUtil.hx index 818a918..ecef110 100644 --- a/src/client/haxe/ru/m/tankz/render/RenderUtil.hx +++ b/src/client/haxe/ru/m/tankz/render/RenderUtil.hx @@ -19,8 +19,7 @@ class RenderUtil { return Assets.getBitmapData('resources/image/bonus/${type}.png'); } - public static function bulletImage(piercing:Int = 0):BitmapData { - var type = piercing > 1 ? 'piercing' : 'normal'; - return Assets.getBitmapData('resources/image/bullet/${type}.png'); + public static function bulletImage(skin:String):BitmapData { + return Assets.getBitmapData('resources/image/bullet/${skin}.png'); } } diff --git a/src/client/haxe/ru/m/tankz/render/item/BulletRenderItem.hx b/src/client/haxe/ru/m/tankz/render/item/BulletRenderItem.hx index 311b6ad..d637575 100644 --- a/src/client/haxe/ru/m/tankz/render/item/BulletRenderItem.hx +++ b/src/client/haxe/ru/m/tankz/render/item/BulletRenderItem.hx @@ -3,19 +3,19 @@ package ru.m.tankz.render.item; import ru.m.geom.Rectangle; class BulletRenderItem extends BitmapRenderItem { - public var piercing(default, set):Int = -1; + public var skin(default, set):String; - public function new(rect:Rectangle, piercing:Int) { + public function new(rect:Rectangle, skin:String) { super(rect); - this.piercing = piercing; + this.skin = skin; move(rect.position); } - private function set_piercing(value:Int):Int { - if (piercing != value) { - piercing = value; - image = RenderUtil.bulletImage(piercing); + private function set_skin(value:String):String { + if (skin != value) { + skin = value; + image = RenderUtil.bulletImage(skin); } - return piercing; + return skin; } } diff --git a/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx b/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx index 8130b49..a319052 100644 --- a/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx +++ b/src/client/haxe/ru/m/tankz/storage/SettingsStorage.hx @@ -11,7 +11,7 @@ import ru.m.tankz.control.Control; class SettingsStorage extends SharedObjectStorage { - private static inline var VERSION = 4; + private static inline var VERSION = 4.1; public function new() { super('settings_${VERSION}'); @@ -38,6 +38,7 @@ class SettingsStorage extends SharedObjectStorage { MOVE(Direction.RIGHT) => {device: device, action: DIRECTION(Direction.RIGHT)}, SHOT(0) => {device: device, action: KEY(0)}, SHOT(1) => {device: device, action: KEY(1)}, + SHOT(2) => {device: device, action: KEY(2)}, ]; } @@ -64,6 +65,7 @@ class SettingsStorage extends SharedObjectStorage { MOVE(Direction.RIGHT) => {device: KEYBOARD, action: KEY(Keyboard.D)}, SHOT(0) => {device: KEYBOARD, action: KEY(Keyboard.SPACE)}, SHOT(1) => {device: KEYBOARD, action: KEY(Keyboard.Q)}, + SHOT(2) => {device: KEYBOARD, action: KEY(Keyboard.E)}, ], 1 => [ MOVE(Direction.TOP) => {device: KEYBOARD, action: KEY(Keyboard.UP)}, @@ -71,7 +73,8 @@ class SettingsStorage extends SharedObjectStorage { MOVE(Direction.BOTTOM) => {device: KEYBOARD, action: KEY(Keyboard.DOWN)}, MOVE(Direction.RIGHT) => {device: KEYBOARD, action: KEY(Keyboard.RIGHT)}, SHOT(0) => {device: KEYBOARD, action: KEY(Keyboard.NUMPAD_0)}, - SHOT(1) => {device: KEYBOARD, action: KEY(Keyboard.NUMPAD_DECIMAL)}, + SHOT(1) => {device: KEYBOARD, action: KEY(Keyboard.NUMPAD_1)}, + SHOT(3) => {device: KEYBOARD, action: KEY(Keyboard.NUMPAD_2)}, ], ]; } diff --git a/src/client/resources/image/bullet/mine.png b/src/client/resources/image/bullet/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..2de8cc46ef6ba6c5f3fa145588190f6004ec04d6 GIT binary patch literal 1206 zcmV;n1WEgeP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+Qn8|lIti8{nsjH2}nW+mVp^Y_+p`$agMAd_s8 zSEc%GmN)&)KHQ}_I+#HDwt(+pXdhVfrYA>V5H)t{_ANfXz1P@#TX&azur!2qQ)>vg zxiQ1Vvcz*)u&(wM8|&=JdUV+p^sc(%7V8BQ60+;)u>xl7*sz)`SPY}5Mrx9%5KmoX zr9_1tBm2>@lXBw9k%bT7iT#_wB6&D zE5k)Jc)*cH9=~R0gkaxzlbPUKzc<(s%f_J0G)LQDcFXEw5q#7Z&jMhx6O(Iwq1M3~ z%_{L0TMP`cQQ!iyU_hrtis+f55tI!%v8TltKoP12l00)TZlcwZ#kMty)0Tu*y&Vwz=H;J>6<-J(_sE<}dSy;S?1W}2SBtzifgM<(?j5C*&)vIVw)u>5x?LDuD(hQ zRcoxN=7!Bm37T)xLemyoYPnmjb?&}P4_$lgspmUu8>>(K1J-b3jV4pWPVcOlR&_X< zE^yp4GB`8F$fGf?g8?gO8l1U^-qT=iaOM)(sSq-dGPtSeGGH(YeM6FtckUj{UFHoe z*Y9|vE6l;5?k_M$(D)l~2dvd`6PC%?dJ0EQ9oy-%`4%(9Y{{l|@FaUKt4+t)$mOYb zrxH#k3}>0cr6$|zS+s|QD=@fHShc~odJGB;~~>U0TD{kGIN1FZLNvNndRMD6LpUX54N1t4m@a~@Zp`+_J z;`adX`XZyL^QDI(^I4Vb&C{()hb{568@E1$)IweV#$xY!`^gaROZGM=j*gALI!woo zIt96H7}T*!;e!4E(vgJsX}%`mdS>i3 zIoaFme>XG&Na&R=2LJ#732;bRa{vGf6951U69E94oEQKA00(qQO+^Re2o4Ps4gw?q zxBvhElu1NER5;6}Q@a&_FbD)@vTzy;$FQ(S;TS2LCWRyAy;voWcb-~6Lq6Pb5TXK> zOKS3A>%6PqD+4dnM#1NGJV=azdmw^4@k3=UspXPdt#$am#=Som5mC(irrjP< UezI0C82|tP07*qoM6N<$f*qeadH?_b literal 0 HcmV?d00001 diff --git a/src/client/resources/image/bullet/rocket.png b/src/client/resources/image/bullet/rocket.png new file mode 100644 index 0000000000000000000000000000000000000000..597864b628d8869778a774bebd7f4e8e99ab1b88 GIT binary patch literal 1217 zcmV;y1U~zTP) zaB^>EX>4U6ba`-PAZ2)IW&i+q+U-|cn)E0LeRmbJ1OX9Qj`8w+{|;vPgO{YLtE(?H zQ;!q7LV}1#4r1E1zyEaimtCM3TwqC2WAt_f4T{+wlD}PT%cTP!=KZ{2-@!fYK$B#W zmQup*rL8~h<0Z|}lMdjA0d!4+_Y+Irdi3}aQSjpLuXOwMUQ_RFtuBXXVTfx{YYKO| zF~h?=(Hs`7iT&7~Wj3{zeD(!`ufF)hS^)(F@*M(H2N^mvs3r>(!x*rkm_#f{QV_y0Y(^U+|A4gfxda;8Q`;Bm%AgDj5VHNPPV}8kLBWExaAhj1R%3xlPkYK>R=6L zmIRxd4GfS`;3E)21TTmJ5D1eIlnpsjz{3~-W~>Gh15q??lI4-jZDRzcEix{>Z588( zDUujBO4-N?fh~U|B+H@9#DSS33ny02E>aAUV~i5Vp36cKge8hd5|x}Ng~TZ)NhxW{ zib}R6S)+<3Rn6Jv%)w>OHaeR{&IcZJgoBTG$dL{`aT;sN-A1%#Y#0)uCYo@ zRcmh0ER|dfjazKeQqz{Z;F;tZi05wHH`}%^FUoXzt0AHPea=N7Dt2 zI>UoAV+;cr<1!eqgvP;{PY?nQ<_2e8(RKx+f#ktW1)m*6qcAi;?r?E;WA4|yIg9mA zyy0({bA!4!Fo&+u18+}QtD_Q@$=KS3Bc`5g_qAfvV=}f~X~R_=Z+O(P2%KFu;w9-` z9dMI9UvLbKdkY+s?k#Xg*=;mrg{CqD`?L2rwU$%3Rd#S}4J?fXe`&m5(wz^Gj$y!7 z_O~04*O+~+WH+AJ@({eO|}8v_U{46S2GZ3kzs(bL&!VH+AZBNy@= zah-U*6`>|0zJBB@zTytHeKdp_v5^5)##dw-ne6=cr8BO9MN z`Zs9&jL{p=d~yW;v-XrVD6%$KZ9(mjn$Kl?kv&7FU&hIOy@cP#XE=2?HP@xiK1N>k zOH=Axb|GoR{$riKm+q^Mmn0Q&S2f+mEFvtxb}Y9d3#1nNHc-EVS;7?s-3Nw!)-0Ex zXMK@}2i#qB+7MjPxXNR^O06z9_J70#o74CtUI3}?&Q7U@t`yf>^bOt~qaPhnJMgaf ze+g$ENAH01y(8-OiKXrz{nL4%ux8pH00009a7bBm000XU000XU0RWnu7ytkO2XskI zMF-;u4h;+>6vfBz0001BNkl 0) && queue < config.queue; + return (count < 0 || count > 0) && (config.queue < 0 || queue < config.queue); } public function use():Void { diff --git a/src/common/haxe/ru/m/tankz/game/EventUtil.hx b/src/common/haxe/ru/m/tankz/game/EventUtil.hx index 89907f8..e1e8587 100644 --- a/src/common/haxe/ru/m/tankz/game/EventUtil.hx +++ b/src/common/haxe/ru/m/tankz/game/EventUtil.hx @@ -50,7 +50,7 @@ class EventUtil { } public static function buildBulletSpawn(bullet:Bullet):GameEvent { - return SPAWN(BULLET(bullet.id, bullet.rect.clone(), bullet.playerId, bullet.config.piercing)); + return SPAWN(BULLET(bullet.id, bullet.rect.clone(), bullet.playerId, bullet.config.skin)); } public static function buildMove(entity:Entity):GameEvent { diff --git a/src/common/haxe/ru/m/tankz/game/GameEvent.hx b/src/common/haxe/ru/m/tankz/game/GameEvent.hx index 1eb2527..f1ec4cd 100644 --- a/src/common/haxe/ru/m/tankz/game/GameEvent.hx +++ b/src/common/haxe/ru/m/tankz/game/GameEvent.hx @@ -39,7 +39,7 @@ enum SpawnEvent { BRICK(bricks:Array); EAGLE(id:Int, rect:Rectangle, teamId:TeamId); TANK(id:Int, rect:Rectangle, playerId:PlayerId, info:TankInfo); - BULLET(id:Int, rect:Rectangle, playerId:PlayerId, piercing:Int); + BULLET(id:Int, rect:Rectangle, playerId:PlayerId, skin:String); BONUS(id:Int, rect:Rectangle, type:BonusType); } diff --git a/src/common/haxe/ru/m/tankz/game/GameRunner.hx b/src/common/haxe/ru/m/tankz/game/GameRunner.hx index f95a35c..1697533 100644 --- a/src/common/haxe/ru/m/tankz/game/GameRunner.hx +++ b/src/common/haxe/ru/m/tankz/game/GameRunner.hx @@ -156,7 +156,7 @@ class GameRunner extends Game implements EngineListener { tank.rect.lean(cell.rect); emitTankMove(tank); case [BULLET(bullet), BULLET(other_bullet)]: - if (bullet.playerId != other_bullet.playerId) { + if (bullet.playerId != other_bullet.playerId && bullet.layer > 0 && other_bullet.layer > 0) { gameEventSignal.emit(DESTROY(BULLET(bullet.id))); gameEventSignal.emit(DESTROY(BULLET(other_bullet.id))); } @@ -166,8 +166,8 @@ class GameRunner extends Game implements EngineListener { gameEventSignal.emit(DESTROY(BULLET(bullet.id))); case [TANK(tank), BONUS(bonus)]: gameEventSignal.emit(DESTROY(BONUS(bonus.id, {tankId: tank.id, score: bonus.config.score}))); - case [BULLET(bullet), TANK(tank)]/* | [TANK(tank), BULLET(bullet)]*/: - if (bullet.tankId == tank.id || (!config.game.friendlyFire && tank.playerId.team == bullet.playerId.team)) { + case [BULLET(bullet), TANK(tank)] | [TANK(tank), BULLET(bullet)]: + if (bullet.playerId == tank.playerId || (!config.game.friendlyFire && tank.playerId.team == bullet.playerId.team)) { // Nothing } else { if (!tank.protect) { diff --git a/src/common/resources/config/classic.yaml b/src/common/resources/config/classic.yaml index d3fce64..1db3c1d 100644 --- a/src/common/resources/config/classic.yaml +++ b/src/common/resources/config/classic.yaml @@ -55,6 +55,7 @@ bullet: &bullet speed: 0 piercing: 1 layer: 2 + skin: normal tanks: - type: human0 @@ -99,7 +100,7 @@ tanks: speed: 2.9 skin: pd weapons: - - bullet: {<<: *bullet, speed: 9.0, piercing: 3} + - bullet: {<<: *bullet, speed: 9.0, piercing: 3, skin: piercing} queue: 2 count: -1 diff --git a/src/common/resources/config/death.yaml b/src/common/resources/config/death.yaml index ba82b10..1f9559a 100644 --- a/src/common/resources/config/death.yaml +++ b/src/common/resources/config/death.yaml @@ -78,11 +78,14 @@ tanks: score: 100 skin: pc weapons: - - bullet: {width: 12, height: 12, speed: 12.0, piercing: 1, layer: 2} + - bullet: {width: 12, height: 12, speed: 12.0, piercing: 1, layer: 2, skin: normal} queue: 2 count: -1 - - bullet: {width: 16, height: 16, speed: 4.0, piercing: 4, layer: 4} + - bullet: {width: 16, height: 16, speed: 4.0, piercing: 4, layer: 4, skin: rocket} queue: 1 count: 3 + - bullet: {width: 20, height: 20, speed: 0.0, piercing: 1, layer: 0, skin: mine} + queue: -1 + count: 3 bonuses: [] diff --git a/src/common/resources/config/dota.yaml b/src/common/resources/config/dota.yaml index e63814e..18942f7 100644 --- a/src/common/resources/config/dota.yaml +++ b/src/common/resources/config/dota.yaml @@ -83,6 +83,7 @@ bullet: &bullet speed: 0 piercing: 1 layer: 2 + skin: normal tanks: - type: slow