From a4edaf5430634a80975a3208f3d761b541ceaecd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Wed, 21 Jan 2015 01:00:00 +0100 Subject: [PATCH 1/4] Added hover effects on ships in the arena --- src/scripts/view/Preload.ts | 1 + src/scripts/view/battle/ActionIcon.ts | 1 + src/scripts/view/battle/Arena.ts | 23 +++++-- src/scripts/view/battle/ArenaShip.ts | 74 ++++++++++++++++++++++ src/scripts/view/battle/BattleView.ts | 6 ++ src/scripts/view/battle/LogProcessor.ts | 5 +- src/scripts/view/battle/ShipArenaSprite.ts | 30 --------- src/scripts/view/battle/Targetting.ts | 4 +- 8 files changed, 101 insertions(+), 43 deletions(-) create mode 100644 src/scripts/view/battle/ArenaShip.ts delete mode 100644 src/scripts/view/battle/ShipArenaSprite.ts diff --git a/src/scripts/view/Preload.ts b/src/scripts/view/Preload.ts index a876092..0d04173 100644 --- a/src/scripts/view/Preload.ts +++ b/src/scripts/view/Preload.ts @@ -17,6 +17,7 @@ module SpaceTac.View { this.load.image("ui-battle-actionbar", "assets/images/ui/battle/actionbar.png"); this.load.image("ui-battle-actionpointsempty", "assets/images/ui/battle/actionpointsempty.png"); this.load.image("ui-battle-actionpointsfull", "assets/images/ui/battle/actionpointsfull.png"); + this.load.image("ui-battle-shipspritehover", "assets/images/ui/battle/shipspritehover.png"); this.load.image("ui-ship-card", "assets/images/battle/ship-card.png"); this.load.image("arena-ship", "assets/images/battle/ship01.png"); this.load.image("ui-bar-standard-background", "assets/images/ui/bars/standard-background.png"); diff --git a/src/scripts/view/battle/ActionIcon.ts b/src/scripts/view/battle/ActionIcon.ts index f1c29d1..006de7a 100644 --- a/src/scripts/view/battle/ActionIcon.ts +++ b/src/scripts/view/battle/ActionIcon.ts @@ -27,6 +27,7 @@ module SpaceTac.View { // TODO Handle action.canBeUsed() result to enable/disable the button + this.input.useHandCursor = true; this.onInputUp.add(() => { this.processClick(); }, this); diff --git a/src/scripts/view/battle/Arena.ts b/src/scripts/view/battle/Arena.ts index 8c86701..e03a664 100644 --- a/src/scripts/view/battle/Arena.ts +++ b/src/scripts/view/battle/Arena.ts @@ -14,8 +14,9 @@ module SpaceTac.View { private battleview: BattleView; // List of ship sprites - private ship_sprites: ShipArenaSprite[]; + private ship_sprites: ArenaShip[]; + // Create a graphical arena for ship sprites to fight in a 2D space constructor(battleview: BattleView) { this.battleview = battleview; this.ship_sprites = []; @@ -23,7 +24,7 @@ module SpaceTac.View { super(battleview.game); var background = new Phaser.Button(battleview.game, 0, 0, "ui-arena-background"); - background.scale.set(20, 10); + background.scale.set(this.stage.width / background.width, this.stage.height / background.height); this.background = background; // Capture clicks on background @@ -54,21 +55,29 @@ module SpaceTac.View { // Add ship sprites this.battleview.battle.play_order.forEach(function (ship: Game.Ship) { - var sprite = new ShipArenaSprite(arena.battleview, ship); - arena.add(sprite); + var sprite = new ArenaShip(arena.battleview, ship); + arena.addChild(sprite); arena.ship_sprites.push(sprite); }); } // Find the sprite for a ship - findShipSprite(ship: Game.Ship): ShipArenaSprite { - var result: ShipArenaSprite = null; - this.ship_sprites.forEach((sprite: ShipArenaSprite) => { + findShipSprite(ship: Game.Ship): ArenaShip { + var result: ArenaShip = null; + this.ship_sprites.forEach((sprite: ArenaShip) => { if (sprite.ship === ship) { result = sprite; } }); return result; } + + // Set the hovered state on a ship sprite + setShipHovered(ship: Game.Ship, hovered: boolean): void { + var arena_ship = this.findShipSprite(ship); + if (arena_ship) { + arena_ship.setHovered(hovered); + } + } } } diff --git a/src/scripts/view/battle/ArenaShip.ts b/src/scripts/view/battle/ArenaShip.ts new file mode 100644 index 0000000..088775c --- /dev/null +++ b/src/scripts/view/battle/ArenaShip.ts @@ -0,0 +1,74 @@ +module SpaceTac.View { + "use strict"; + + // Ship sprite in the arena (BattleView) + export class ArenaShip extends Phaser.Group { + // Link to displayed ship + ship: Game.Ship; + + // Ship sprite + sprite: Phaser.Button; + + // Hover effect + hover: Phaser.Image; + + // Create a ship sprite usable in the Arena + constructor(battleview: BattleView, ship: Game.Ship) { + this.ship = ship; + + super(battleview.game); + + // Add hover effect + this.hover = new Phaser.Image(battleview.game, 0, 0, "ui-battle-shipspritehover"); + this.hover.scale.set(0.4, 0.4); + this.hover.anchor.set(0.5, 0.5); + this.hover.visible = false; + this.addChild(this.hover); + + // Add ship sprite + this.sprite = new Phaser.Button(battleview.game, 0, 0, "arena-ship"); + this.sprite.scale.set(0.1, 0.1); + this.sprite.rotation = ship.arena_angle; + this.sprite.anchor.set(0.5, 0.5); + this.addChild(this.sprite); + + // Handle input on ship sprite + this.sprite.input.useHandCursor = true; + this.sprite.onInputOver.add(() => { + battleview.cursorOnShip(ship); + }); + this.sprite.onInputOut.add(() => { + battleview.cursorOffShip(ship); + }); + this.sprite.onInputUp.add(() => { + battleview.cursorClicked(); + }); + + // Set location + this.position.set(ship.arena_x, ship.arena_y); + } + + // Set the hovered state on this ship + // This will toggle the hover effect + setHovered(hovered: boolean) { + this.hover.visible = hovered; + } + + // Move the sprite to a location + moveTo(x: number, y: number, animate: boolean = true) { + var angle = Math.atan2(y - this.y, x - this.x); + if (animate) { + var tween_group = this.game.tweens.create(this); + var tween_sprite = this.game.tweens.create(this.sprite); + tween_group.to({x: x, y: y}); + tween_group.start(); + tween_sprite.to({rotation: angle}); + tween_sprite.start(); + } else { + this.x = x; + this.y = y; + this.sprite.rotation = angle; + } + } + } +} diff --git a/src/scripts/view/battle/BattleView.ts b/src/scripts/view/battle/BattleView.ts index 7ca2c80..5683235 100644 --- a/src/scripts/view/battle/BattleView.ts +++ b/src/scripts/view/battle/BattleView.ts @@ -133,6 +133,9 @@ module SpaceTac.View { // Set the currently hovered ship setShipHovered(ship: Game.Ship): void { + if (this.ship_hovered) { + this.arena.setShipHovered(this.ship_hovered, false); + } this.ship_hovered = ship; this.card_hovered.setShip(ship); if (this.targetting) { @@ -142,6 +145,9 @@ module SpaceTac.View { this.targetting.unsetTarget(); } } + if (ship) { + this.arena.setShipHovered(this.ship_hovered, true); + } } // Enter targetting mode diff --git a/src/scripts/view/battle/LogProcessor.ts b/src/scripts/view/battle/LogProcessor.ts index 21c6dff..a02e2bb 100644 --- a/src/scripts/view/battle/LogProcessor.ts +++ b/src/scripts/view/battle/LogProcessor.ts @@ -41,10 +41,7 @@ module SpaceTac.View { case "move": var sprite = this.view.arena.findShipSprite(event.ship); if (sprite) { - var angle = Math.atan2(event.target.y - sprite.y, event.target.x - sprite.x); - var tween = this.view.game.tweens.create(sprite); - tween.to({x: event.target.x, y: event.target.y, rotation: angle}); - tween.start(); + sprite.moveTo(event.target.x, event.target.y); } break; } diff --git a/src/scripts/view/battle/ShipArenaSprite.ts b/src/scripts/view/battle/ShipArenaSprite.ts deleted file mode 100644 index 62ae66f..0000000 --- a/src/scripts/view/battle/ShipArenaSprite.ts +++ /dev/null @@ -1,30 +0,0 @@ -module SpaceTac.View { - "use strict"; - - // Ship sprite in the arena (BattleView) - export class ShipArenaSprite extends Phaser.Button { - // Link to displayed ship - ship: Game.Ship; - - constructor(battleview: BattleView, ship: Game.Ship) { - this.ship = ship; - - super(battleview.game, ship.arena_x, ship.arena_y, "arena-ship"); - - this.scale.set(0.1, 0.1); - this.rotation = ship.arena_angle; - this.anchor.set(0.5, 0.5); - - this.input.useHandCursor = true; - this.onInputOver.add(() => { - battleview.cursorOnShip(ship); - }); - this.onInputOut.add(() => { - battleview.cursorOffShip(ship); - }); - this.onInputUp.add(() => { - battleview.cursorClicked(); - }); - } - } -} diff --git a/src/scripts/view/battle/Targetting.ts b/src/scripts/view/battle/Targetting.ts index 673b54a..a1759f7 100644 --- a/src/scripts/view/battle/Targetting.ts +++ b/src/scripts/view/battle/Targetting.ts @@ -20,7 +20,7 @@ module SpaceTac.View { private battleview: BattleView; // Source of the targetting - private source: PIXI.Sprite; + private source: PIXI.DisplayObject; // Create a default targetting mode constructor(battleview: BattleView) { @@ -63,7 +63,7 @@ module SpaceTac.View { } // Set the source sprite for the targetting (for visual effects) - setSource(sprite: PIXI.Sprite) { + setSource(sprite: PIXI.DisplayObject) { this.source = sprite; } From 8569ea4b3df540619064e3a35e1ab86d9c6a9c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Wed, 21 Jan 2015 01:00:00 +0100 Subject: [PATCH 2/4] Fixed initial arena size --- src/scripts/view/battle/Arena.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/scripts/view/battle/Arena.ts b/src/scripts/view/battle/Arena.ts index e03a664..2ba9d22 100644 --- a/src/scripts/view/battle/Arena.ts +++ b/src/scripts/view/battle/Arena.ts @@ -24,7 +24,9 @@ module SpaceTac.View { super(battleview.game); var background = new Phaser.Button(battleview.game, 0, 0, "ui-arena-background"); - background.scale.set(this.stage.width / background.width, this.stage.height / background.height); + var expected_width = this.stage.width - 252; + var expected_height = this.stage.height - 100; + background.scale.set(expected_width/ background.width, expected_height / background.height); this.background = background; // Capture clicks on background @@ -40,7 +42,8 @@ module SpaceTac.View { } }, null); - this.add(this.background); + this.position.set(32, 100); + this.addChild(this.background); this.init(); } From 7695540a771440eb3ffac0f1c74dce7dc3edf587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Lemaire?= Date: Wed, 21 Jan 2015 01:00:00 +0100 Subject: [PATCH 3/4] Added missing asset --- src/assets/images/ui/battle/shipspritehover.png | Bin 0 -> 24074 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/assets/images/ui/battle/shipspritehover.png diff --git a/src/assets/images/ui/battle/shipspritehover.png b/src/assets/images/ui/battle/shipspritehover.png new file mode 100644 index 0000000000000000000000000000000000000000..233873f3bbba1cda07b441d1499c06259566bebb GIT binary patch literal 24074 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 Date: Wed, 21 Jan 2015 01:00:00 +0100 Subject: [PATCH 4/4] Fixed bootstrap and coding style --- bootstrap-venv.py | 8 ++++++-- src/scripts/view/battle/Arena.ts | 2 +- src/scripts/view/battle/ArenaShip.ts | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/bootstrap-venv.py b/bootstrap-venv.py index f697c51..e00e2fa 100644 --- a/bootstrap-venv.py +++ b/bootstrap-venv.py @@ -140,9 +140,13 @@ def bootstrap_buildout(venv_dir, bootstrap_path): else: fp.close() - print("Bootstrapping Buildout using: %s %s install..." % ( + print("Bootstrapping Buildout using: %s %s..." % ( python_bin, bootstrap_path)) - subprocess.check_call([python_bin, bootstrap_path, "install"]) + subprocess.check_call([python_bin, bootstrap_path]) + + print("Invoking bootstrapped buildout...") + buildout_bin = os.path.join(os.path.dirname(bootstrap_path), "bin", "buildout") + subprocess.check_call([buildout_bin]) if len(sys.argv) == 2: diff --git a/src/scripts/view/battle/Arena.ts b/src/scripts/view/battle/Arena.ts index 2ba9d22..d9af399 100644 --- a/src/scripts/view/battle/Arena.ts +++ b/src/scripts/view/battle/Arena.ts @@ -26,7 +26,7 @@ module SpaceTac.View { var background = new Phaser.Button(battleview.game, 0, 0, "ui-arena-background"); var expected_width = this.stage.width - 252; var expected_height = this.stage.height - 100; - background.scale.set(expected_width/ background.width, expected_height / background.height); + background.scale.set(expected_width / background.width, expected_height / background.height); this.background = background; // Capture clicks on background diff --git a/src/scripts/view/battle/ArenaShip.ts b/src/scripts/view/battle/ArenaShip.ts index 088775c..0b0123d 100644 --- a/src/scripts/view/battle/ArenaShip.ts +++ b/src/scripts/view/battle/ArenaShip.ts @@ -19,7 +19,7 @@ module SpaceTac.View { super(battleview.game); // Add hover effect - this.hover = new Phaser.Image(battleview.game, 0, 0, "ui-battle-shipspritehover"); + this.hover = new Phaser.Image(battleview.game, 0, 0, "ui-battle-shipspritehover", 0); this.hover.scale.set(0.4, 0.4); this.hover.anchor.set(0.5, 0.5); this.hover.visible = false;