From 6b58ba68589d9cf830eea97745bb681c32cbf1e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Sun, 26 Apr 2015 19:15:45 +0200 Subject: [PATCH] New ship list placeholder graphics and behavior --- src/app/view/Preload.ts | 4 -- src/app/view/battle/ActionBar.ts | 2 +- src/app/view/battle/EffectDisplay.ts | 2 +- src/app/view/battle/ShipList.ts | 42 ++++++++----- src/app/view/battle/ShipListItem.ts | 55 ++++++++---------- src/app/view/specs/ShipList.spec.ts | 22 +++++++ .../images/battle/shiplist-ap-empty.png | Bin 617 -> 0 bytes src/assets/images/battle/shiplist-ap-full.png | Bin 589 -> 0 bytes src/assets/images/battle/shiplist-base.png | Bin 13816 -> 292 bytes src/assets/images/battle/shiplist-enemy.png | Bin 623 -> 245 bytes .../images/battle/shiplist-hull-empty.png | Bin 661 -> 126 bytes .../images/battle/shiplist-hull-full.png | Bin 711 -> 126 bytes src/assets/images/battle/shiplist-own.png | Bin 621 -> 245 bytes .../images/battle/shiplist-shield-empty.png | Bin 650 -> 126 bytes .../images/battle/shiplist-shield-full.png | Bin 687 -> 127 bytes 15 files changed, 76 insertions(+), 51 deletions(-) create mode 100644 src/app/view/specs/ShipList.spec.ts delete mode 100644 src/assets/images/battle/shiplist-ap-empty.png delete mode 100644 src/assets/images/battle/shiplist-ap-full.png diff --git a/src/app/view/Preload.ts b/src/app/view/Preload.ts index b34da55..86f08a4 100644 --- a/src/app/view/Preload.ts +++ b/src/app/view/Preload.ts @@ -19,12 +19,8 @@ module SpaceTac.View { this.loadImage("menu/button.png"); this.loadImage("battle/waiting.png"); this.loadImage("battle/shiplist-base.png"); - this.loadImage("battle/shiplist-normal.png"); - this.loadImage("battle/shiplist-playing.png"); this.loadImage("battle/shiplist-own.png"); this.loadImage("battle/shiplist-enemy.png"); - this.loadImage("battle/shiplist-ap-empty.png"); - this.loadImage("battle/shiplist-ap-full.png"); this.loadImage("battle/shiplist-hull-empty.png"); this.loadImage("battle/shiplist-hull-full.png"); this.loadImage("battle/shiplist-shield-empty.png"); diff --git a/src/app/view/battle/ActionBar.ts b/src/app/view/battle/ActionBar.ts index e684fa2..6258552 100644 --- a/src/app/view/battle/ActionBar.ts +++ b/src/app/view/battle/ActionBar.ts @@ -28,7 +28,7 @@ module SpaceTac.View { this.ship = null; super(battleview.game); - this.x = 170; + this.x = 230; this.y = 0; battleview.ui.add(this); diff --git a/src/app/view/battle/EffectDisplay.ts b/src/app/view/battle/EffectDisplay.ts index f698035..6686480 100644 --- a/src/app/view/battle/EffectDisplay.ts +++ b/src/app/view/battle/EffectDisplay.ts @@ -5,7 +5,7 @@ module SpaceTac.View { export class EffectDisplay extends Phaser.Image { constructor(game: Phaser.Game, effect: Game.TemporaryEffect) { var key = "battle-effect-" + effect.getFullCode(); - super(game, 115, 22, key, 0); + super(game, 0, 0, key, 0); var style = {font: "bold 12px Arial", fill: "#d0d020"}; var duration = new Phaser.Text(this.game, 0, 0, effect.duration.toString(), style); diff --git a/src/app/view/battle/ShipList.ts b/src/app/view/battle/ShipList.ts index e6292c2..24d0286 100644 --- a/src/app/view/battle/ShipList.ts +++ b/src/app/view/battle/ShipList.ts @@ -31,13 +31,6 @@ module SpaceTac.View { this.update(); } - // Update the bar status (and position) - update() { - super.update(); - - this.y = 76; - } - // Clear the action icons clearAll(): void { this.ships.forEach((ship: ShipListItem) => { @@ -52,12 +45,13 @@ module SpaceTac.View { battle.play_order.forEach((ship: Game.Ship) => { this.addShip(ship); }, this); + this.updateItemsLocation(); } // Add a ship icon addShip(ship: Game.Ship): ShipListItem { var owned = ship.getPlayer() === this.battleview.player; - var result = new ShipListItem(this, 0, this.ships.length * 80, ship, owned); + var result = new ShipListItem(this, -200, 0, ship, owned); this.ships.push(result); this.add(result); return result; @@ -75,6 +69,30 @@ module SpaceTac.View { return found; } + // Find the play position in play_order for a given ship (0 is currently playing) + findPlayPosition(ship: Game.Ship): number { + var battle = this.battleview.battle; + var idx = battle.play_order.indexOf(ship); + var diff = idx - battle.playing_ship_index; + if (diff < 0) { + diff += battle.play_order.length; + } + return diff; + } + + // Update the locations of all items + updateItemsLocation(animate: boolean = true): void { + this.ships.forEach((item: ShipListItem) => { + var position = this.findPlayPosition(item.ship); + if (position === 0) { + item.moveTo(12, 12, animate); + } else { + item.moveTo(3, 20 + position * 63, animate); + } + this.setChildIndex(item, position); + }); + } + // Remove a ship from the list removeShip(ship: Game.Ship): void { var item = this.findItem(ship); @@ -82,17 +100,13 @@ module SpaceTac.View { this.ships.splice(this.ships.indexOf(item), 1); item.destroy(); } + this.updateItemsLocation(); } // Set the currently playing ship setPlaying(ship: Game.Ship): void { - if (this.playing) { - this.playing.setPlaying(false); - } this.playing = this.findItem(ship); - if (this.playing) { - this.playing.setPlaying(true); - } + this.updateItemsLocation(); } // Set the currently hovered ship diff --git a/src/app/view/battle/ShipListItem.ts b/src/app/view/battle/ShipListItem.ts index 7c6e1db..1322883 100644 --- a/src/app/view/battle/ShipListItem.ts +++ b/src/app/view/battle/ShipListItem.ts @@ -12,8 +12,8 @@ module SpaceTac.View { // Shield display shield: ValueBar; - // Action points display - ap: ValueBar; + // Base display + layer_base: Phaser.Image; // Portrait layer_portrait: Phaser.Image; @@ -21,15 +21,6 @@ module SpaceTac.View { // Hover indicator layer_hover: Phaser.Image; - // Playing indicator - layer_playing: Phaser.Image; - - // Non-playing indicator - layer_normal: Phaser.Image; - - // Enemy indicator - layer_enemy: Phaser.Image; - // Active effects group active_effects: Phaser.Group; @@ -37,7 +28,7 @@ module SpaceTac.View { constructor(list: ShipList, x: number, y: number, ship: Game.Ship, owned: boolean) { this.ship = ship; - super(list.battleview.game, x, y, "battle-shiplist-base"); + super(list.battleview.game, x, y, owned ? "battle-shiplist-own" : "battle-shiplist-enemy"); this.input.useHandCursor = true; this.onInputOver.add(() => { @@ -47,30 +38,26 @@ module SpaceTac.View { list.battleview.cursorOffShip(ship); }); - this.layer_playing = new Phaser.Image(this.game, 0, 0, "battle-shiplist-playing", 0); - this.layer_playing.alpha = 0; - this.addChild(this.layer_playing); + this.layer_base = new Phaser.Image(this.game, 0, 0, "battle-shiplist-base", 0); + this.addChild(this.layer_base); - this.layer_portrait = new Phaser.Image(this.game, 14, 15, "ship-scout-portrait", 0); + this.layer_portrait = new Phaser.Image(this.game, 30, 30, "ship-scout-portrait", 0); + this.layer_portrait.anchor.set(0.5, 0.5); this.addChild(this.layer_portrait); - this.layer_normal = new Phaser.Image(this.game, 0, 0, "battle-shiplist-normal", 0); - this.addChild(this.layer_normal); - - this.layer_enemy = new Phaser.Image(this.game, 0, 0, owned ? "battle-shiplist-own" : "battle-shiplist-enemy", 0); - this.addChild(this.layer_enemy); - - this.layer_hover = new Phaser.Image(this.game, 14, 14, "battle-arena-shipspritehover", 0); + this.layer_hover = new Phaser.Image(this.game, 30, 30, "battle-arena-shipspritehover", 0); + this.layer_hover.anchor.set(0.5, 0.5); this.layer_hover.visible = false; this.addChild(this.layer_hover); - this.hull = ValueBar.newStyled(list.battleview.game, "battle-shiplist-hull", 76, 26); - this.addChild(this.hull); - - this.shield = ValueBar.newStyled(list.battleview.game, "battle-shiplist-shield", 76, 44); + this.shield = ValueBar.newStyled(this.game, "battle-shiplist-shield", 127, 48); this.addChild(this.shield); + this.hull = ValueBar.newStyled(this.game, "battle-shiplist-hull", 60, 48); + this.addChild(this.hull); + this.active_effects = new Phaser.Group(this.game); + this.active_effects.position.set(63, 9); this.addChild(this.active_effects); this.updateAttributes(); @@ -101,10 +88,16 @@ module SpaceTac.View { } } - // Set the playing status - setPlaying(playing: boolean) { - Animation.setVisibility(this.game, this.layer_playing, playing, 500); - Animation.setVisibility(this.game, this.layer_normal, !playing, 500); + // Move to a given location on screen + moveTo(x: number, y: number, animate: boolean) { + if (animate) { + var tween = this.game.tweens.create(this); + tween.to({x: x, y: y}); + tween.start(); + } else { + this.x = x; + this.y = y; + } } // Set the hovered status diff --git a/src/app/view/specs/ShipList.spec.ts b/src/app/view/specs/ShipList.spec.ts new file mode 100644 index 0000000..ab90d43 --- /dev/null +++ b/src/app/view/specs/ShipList.spec.ts @@ -0,0 +1,22 @@ +/// +/// + +module SpaceTac.View.Specs { + "use strict"; + + describe("ShipList", () => { + inbattleview_it("handles play position of ships", (battleview: BattleView) => { + var list = battleview.ship_list; + + expect(list.findPlayPosition(battleview.battle.play_order[0])).toBe(0); + expect(list.findPlayPosition(battleview.battle.play_order[1])).toBe(1); + expect(list.findPlayPosition(battleview.battle.play_order[2])).toBe(2); + + battleview.battle.advanceToNextShip(); + + expect(list.findPlayPosition(battleview.battle.play_order[0])).toBe(7); + expect(list.findPlayPosition(battleview.battle.play_order[1])).toBe(0); + expect(list.findPlayPosition(battleview.battle.play_order[2])).toBe(1); + }); + }); +} diff --git a/src/assets/images/battle/shiplist-ap-empty.png b/src/assets/images/battle/shiplist-ap-empty.png deleted file mode 100644 index f8e3c34d72dbc42936dd549fc671c2e265cf7247..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 617 zcmV-v0+#)WP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00GfSL_t(I%dL~Wixfc+#eda3 zv$xK&92^+<0g49(2B*ovftZP*W(Ep+m>eP)U7)dbf7ZGu_W%#$|5ZK*WNkUs3hybysy8wcWaLCi(WGcW0Ovt7a}r!OT2h7$8N!5ULr% z%p_q32ni}o%>ZXYBrf(_ezI}@$=fdg$!}5O&1*;3w;sMLJizViYb)(+>FIFT>x}Zex|QN|uW&#L4IHOF zbFfrSIo<^pl5oPHcj(Bm7j|=fxx2V@d}loRzB0~-^nQ-{cdHsb>$g*pwQ>|0I2X>j ztaGqC8hqVvdy@ZFVAeF(j}kG0P)qU${LZW0{@TgTE-txHhUoJm@V_l_qLq{+#v||D zmIpYyn!L%2m=&c?=Vi3&gsLAxb7{^32#t6%ui`n2q%OS7Qm)*6@P0Jy(Z=QFEX43^ zIMJy_HQU=NYXUXmni;4y$B_Cs=q~8|y~iJ3|1p@W7Z10KkhaVsF*=+Th_t?mkUSuq zm5TCK{Z)r#7$s(osEC%zSPH0pZnX-Cjk5c%=rgpCN~CF00000NkvXXu0mjf Dj1Usm diff --git a/src/assets/images/battle/shiplist-ap-full.png b/src/assets/images/battle/shiplist-ap-full.png deleted file mode 100644 index 20ef570769da8402fe710c4b1ea73defb0531385..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 589 zcmV-T0e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00Fg0L_t(I%axNqYgADb#D8<& z-Q5@ym57Bbwh9qMMJp>o1q*AzN^G>ViTD9xZ@z+93xchvMXFc{riqmh{9hy{dAsX- z_m0KBjR__u-tOEPX678u5zSj(oQd7(pR-Hv4qp^?h9szfNn*Q0U6mk#Gp0ZUaNoou zaw-W7oHZfQC%8w-(IU(0aPq|Z8dIO|N-w?x#F1%tdgB&!XM)xvP85ZJaZDuFYZS!+ z@PM2vLI6l8w6IGE2HF%1kZVwf*c!*FhvFfa=mEW+edV_FvWfuqy))2#3?E|duL6)q zX)qvme|zCTN`P*H-@c!}F&FLYlhAz%U#1}KAhw6#o;c7FKmlWqPG2e)0-TzJkH_|v zcw3J5(OJJOq#zvlF9@$%S@71|~=K#gf3DokiDtVXhJ1QB6OM!3mnptbooyy@h!Twc3y bbqRpq{`b9RV@j0C00000NkvXXu0mjf+Hw1k diff --git a/src/assets/images/battle/shiplist-base.png b/src/assets/images/battle/shiplist-base.png index 5f07c1656d7007be23a1caf903cc2cfb9e06173f..1e6e718055deefc0883d7dc4e70300acc23d15f6 100644 GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^CxF<7gAGV3M}M6Nq&N#aB8wRqxP?KOkzv*x37{Z* ziKnkC`+XK^P8FemB{x%nLWezF978H@y}h-Ow?RR`A<&TTq{J1T0}kc_t25F~E*?1) z@t|7vY2nXkjk|gQu&X%Q~loCIIgBP`v;E literal 13816 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 VxzG1sAURr4vXV*?^i7Tv diff --git a/src/assets/images/battle/shiplist-enemy.png b/src/assets/images/battle/shiplist-enemy.png index 1ee3efa2cff1020be3045709f3c01ee9a8ca9fd9..8202c26825ee1c4dc9f9e29fdb46ab740de0349b 100644 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^CxF<7gAGV3M}M6Nq&N#aB8wRqxP?KOkzv*x37{Z* ziKnkC`+XK^P8D|BO4~l5&=gM>$B>F!Z!a4PG8k|$Yz*@MvAsdr;J~4I9zS;XpL)Z- zW*mdKI;Vst0BbWo`v3p{ literal 623 zcmeAS@N?(olHy`uVBq!ia0vp^M}gRvgAGWE-Cp1dq}Y|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfeI{lxZneDG)d~y@jDI{`978H@y}j<(CG04|_Q3wK zq9SwSfde~){0-bcNaYnX=s(nrIlgz%b%8yH*RZg&B&tlBpq8f zSmF1pK5m;;uKGNB693|>S-I7cNj3)W)lSY<*)INL_C2+qDcO>*vJ&Fr=kYDj=-YEB zX4buJMSa(oyH3iSbo`auoGJU1RQKsV&pq{Pi&S~4-O6=^8e1|exvsXB|5#I5{P_K; zsPJpMRpLe2o@;dJd&Zgh=GE?9x9jKps$E-t=AH}wT&UT#>*YL^$_pvXz+fR3h^LyE z6z-4FJGEi;q1Z|PJpL?*lb-%@o#ggo?n%4V>Sny3^kwnYSG(6foiBD27zo~<^iJBG zv^u$H*Tdz$j(;?cS5ES^^qX`?y)x`*o$1jp5wYcAYtK*mqx1Z%*P6KM`A@!PY>m1d z*CxS#CR%-`=chmV=l0qP?$3VKZU5w~f6wio&YD)P2NlAZKdW7x{P0pt{D<<#_Ih1~ zmA<=N^mDYISJd88`59qrx-C@s?$n68HTkRSKl)xZ|KeMG&+KXJOYt=IeeU@VVTd8sif&#$P)z4*}Q$iB}icAJY diff --git a/src/assets/images/battle/shiplist-hull-empty.png b/src/assets/images/battle/shiplist-hull-empty.png index 748674c9b07668eca9e90a3b010ad053d648b2a9..7a417a7941cf2a6a9ef5ee2e7cd083814295d055 100644 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^&Opr0!2~4lB&Np!Db50q$YKTtZeb8+WSBKa0;HnE z)7O>#K8rM`mS});q6bh&*3-o?#Nu?a&b5Ga39*LG#2pQR^Lu`!Tv1m(sm>5}fZ+oF SlBhF4g$$mqelF{r5}E)Ho*wo9 delta 642 zcmV-|0)72{l?5}2P)_CX>@2H zM@dakSAh-}0005~NklA1nB3S5GcoeEjm;_bLN` zm76y%XOok!i+^^z7Rvx0=;8o=)EPzq!~c!_mIc6>fpm{tC_Vys%co0Mrs~b+hp@MI ztJm$K-P<3798QNpygxx42~LvSgsCz>(jSnw-HGPHY_HQ)>({5TX*^tP zPFK!PiboLB88bg~R^{&&LBhNjEfph2Izc9bTn1kjK$gKkI0>)_WfREf=HWKhquXe0 cz6*)-7ih-*@XVIZz5oCK07*qoM6N<$f?|djaR2}S diff --git a/src/assets/images/battle/shiplist-hull-full.png b/src/assets/images/battle/shiplist-hull-full.png index 2013ff64d8b463dcb70a7bf301fc2653959e2af7..e21b4a0d7f8f8f63adae8a93aa4ef4a8824ac5ec 100644 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^&Opr0!2~4lB&Np!Db50q$YKTtZeb8+WSBKa0;HnE z)7O>#K8rM`mimk-1}A_*vYsxEAr_~T|Kz8iGtglWK3u@K*iQ26$rb)?ll&PB9T=PL Tv3jrr6*73b`njxgN@xNACi)%w delta 692 zcmV;l0!#gV#|1NqP)_CX>@2H zM@dakSAh-}0006nNkl1^)h{QBJU zJy)pP^31fE%;lf`wDuArpbEx-bBc%{0?vUk2!JuDa{!3vB{2Xopbk|)K#XC~x^kv^ z@LWm@y8wOzI@y2r4rlu3%*J}U;cGNN3`o5T0%#Jq7V$hpB*}r}m^#JyK8TQsjvxs2 z>+FrE<8Mo`4}YLf9*vUEzhrGSZEMwICfdZ1CRj7LC8ssTHXPQ1$iw16c@cOedjD>g z(XkRiFio({kG;L5n7YL6CLKUD<#%}7h;tBDz-fTUb;DRO$L7Wb;)#Q^KA2hBn^bpD9Fvc+) zDs27whK*Ox=q!4Q% zog$qZAbHwZM~vViCz4L9ixtFUG!AS0UY?cr3rp={p;s^WelHAn6O|POdJ0k)FY3<6 zdC~kZYHKRaf<)-)^I~=bb(KGu+&OeVp!ebwdtc^}R1X~PBO?#U7d9z>{$RTn-)s%7 aC7i#UtOB_fby*Am0000r diff --git a/src/assets/images/battle/shiplist-own.png b/src/assets/images/battle/shiplist-own.png index 573f3666a4fef81215a40d1ed37baaf9519a8b93..48c6de84f956d37ea74f7f05feac5ed3cb54cd55 100644 GIT binary patch literal 245 zcmeAS@N?(olHy`uVBq!ia0vp^CxF<7gAGV3M}M6Nq&N#aB8wRqxP?KOkzv*x37{Z* ziKnkC`+XK^PG$3uhqIpog{FAAIEGZ*dVASWkime1VPlZ+-B|gW!U_%O?XxI14-? ziy0WWg+Z8+Vb&Z8pdfpRr>`sfeI{lx9_h+W3%@ZiF#hs%aSW-r_4c}Bp0J?^+XMS| zOBSx>;y%*E`~87J%tGxe$^{*I%I6MBYJKJEVBX-!+G&!43c^CvHq2>_HGM1+3Wl4*{zRnxyI^Q6n*};`c}D!>%yyly>s0A{?+coEN{); zIK@tyt>S+6P<(&%D+|?={l9o`WChiDe_E+obUXXL&YMsDb61%hEtM;bpB0-J`v3e^ zC261shy^#aCvTKJ|NgvR)@GhVs-F85_nFm%v2DC$<8SdU+-*%q$hBN;gZOt*& zJoo(wC_{c`5r{CtX&_pa0?Q^z#?C`xnJd_6sublDwJ!>p)<-{F!e* zwttjYcdb06_xaAf8DV9GHBqWNrFu4Iaotzy85}Sb4q9e0M$MU$N&HU diff --git a/src/assets/images/battle/shiplist-shield-empty.png b/src/assets/images/battle/shiplist-shield-empty.png index 7dcdbbc26dfc0a1952b6d16bc5c81d1f4aaa5eb6..5af3d0dcf7f2fa1da9af6eb658ace28c742d1084 100644 GIT binary patch literal 126 zcmeAS@N?(olHy`uVBq!ia0vp^&Opr0!2~4lB&Np!Db50q$YKTtZeb8+WSBKa0;HnE z)7O>#K8rM`7XMns8Ad=MSx*Ox)2BIKSst$`y6xlj;nD_Kbcq Ti9WA^3K=|I{an^LB{Ts5KWiT{ delta 631 zcmV--0*L*7iUl)?P)_CX>@2H zM@dakSAh-}0005EUk<-78Zi|fsG)fvQYwp5+PXnAQ ztOF!~tGDhi5P$I;;_Rd<@Fsg2K|}~@N9sn?wIEurYZ5{UFro&D=;6t%fUZeTIekLy zO}BL|81l8s)r&OR+VrE#=QoP%my^VzdDVe;Di2aX@491l->-8NBmEB2we5FLzbU}h zoAqDW?e@4VN0nt-FLS1HBR38~WkzMWJF7fn?wA|da^qI--6$>NZWhRcQK=tiMrNe* zUyfJ%t2_cr0VvXpLWm&Y5qQ{CK-7QNgK%-8_x|0;fCv&fd?FOD_TE1UfPWh#K8rM`mTcUNmsLO^IZqeI5R22vI{*I9PmEwtYkSD#R%`TXa^UFVdQ&MBb@0D?sz_CX>@2H zM@dakSAh-}0006PNklN>OaA1W_Vf4Hx>w3a7 zW{XBnKp@6QRDWP?2WbT^0=EDJaNX|wf+uUR(0$$|00uJ9sJ&`&quS`OB$7=Sd|;f|D6;mTKdRe)F{gP;`yQPf)mnJNrPqlTCmgfx^fdgCaNHplD; z0agX)9!Os+fP2!(+q))Y?7h4 z5GC3XieV!Cl!=MF1Xufu%P+S)*>PL@x*R+B>D$4jo@q+N0Ih)5vmFJ+rV^~?$aKhT zi&8J!r5@#gfH1gFNenFQY1!{*_w+aBdGxUUr+)!8