diff --git a/src/index.html b/src/index.html index 444f39b..f80944d 100644 --- a/src/index.html +++ b/src/index.html @@ -21,7 +21,7 @@ diff --git a/src/scripts/Game.ts b/src/scripts/Game.ts deleted file mode 100644 index 8635423..0000000 --- a/src/scripts/Game.ts +++ /dev/null @@ -1,15 +0,0 @@ -/// - -module SpaceTac { - export class Game extends Phaser.Game { - constructor() { - super(800, 600, Phaser.CANVAS, '-space-tac'); - - this.state.add('boot', State.Boot); - this.state.add('preload', State.Preload); - this.state.add('main', State.Main); - - this.state.start('boot'); - } - } -} diff --git a/src/scripts/GameRouter.ts b/src/scripts/GameRouter.ts new file mode 100644 index 0000000..9ef5522 --- /dev/null +++ b/src/scripts/GameRouter.ts @@ -0,0 +1,17 @@ +/// + +module SpaceTac { + // Router between game views + export class GameRouter extends Phaser.Game { + constructor() { + super(800, 600, Phaser.CANVAS, '-space-tac'); + + this.state.add('boot', View.Boot); + this.state.add('preload', View.Preload); + this.state.add('main', View.Main); + this.state.add('battle', View.BattleView); + + this.state.start('boot'); + } + } +} diff --git a/src/scripts/game/Battle.ts b/src/scripts/game/Battle.ts new file mode 100644 index 0000000..42d9def --- /dev/null +++ b/src/scripts/game/Battle.ts @@ -0,0 +1,25 @@ +module SpaceTac.Game { + // A turn-based battle between fleets + export class Battle { + // List of fleets engaged in battle + fleets: Fleet[]; + + // List of ships, sorted by their initiative throw + play_order: Ship[]; + + // Create a battle between two fleets + constructor(fleet1: Fleet, fleet2: Fleet) { + this.fleets = [fleet1, fleet2]; + // TODO Initiative throws to set the play order + } + + // Create a quick random battle, for testing purposes + static newQuickRandom(): Battle { + var player1 = Player.newQuickRandom(); + var player2 = Player.newQuickRandom(); + + var result = new Battle(player1.fleet, player2.fleet); + return result; + } + } +} \ No newline at end of file diff --git a/src/scripts/game/Fleet.ts b/src/scripts/game/Fleet.ts new file mode 100644 index 0000000..6189e1c --- /dev/null +++ b/src/scripts/game/Fleet.ts @@ -0,0 +1,15 @@ +module SpaceTac.Game { + // A fleet of ships + export class Fleet { + // Fleet owner + player: Player; + + // List of ships + ships: Ship[]; + + // Create a fleet, bound to a player + constructor(player: Player) { + this.player = player; + } + } +} \ No newline at end of file diff --git a/src/scripts/game/Player.ts b/src/scripts/game/Player.ts new file mode 100644 index 0000000..f0848ce --- /dev/null +++ b/src/scripts/game/Player.ts @@ -0,0 +1,18 @@ +module SpaceTac.Game { + // One player (human or IA) + export class Player { + // Current fleet + fleet: Fleet; + + // Create a player, with an empty fleet + constructor() { + this.fleet = new Fleet(this); + } + + // Create a quick random player, with a fleet, for testing purposes + static newQuickRandom(): Player { + var player = new Player(); + return player; + } + } +} \ No newline at end of file diff --git a/src/scripts/game/Ship.ts b/src/scripts/game/Ship.ts new file mode 100644 index 0000000..2b4e403 --- /dev/null +++ b/src/scripts/game/Ship.ts @@ -0,0 +1,19 @@ +module SpaceTac.Game { + // A single ship in a Fleet + export class Ship { + // Fleet this ship is a member of + fleet: Fleet; + + // Current level + level: number; + + // Number of shield points + shield: number; + + // Number of hull points + hull: number; + + // Current initiative (high numbers will allow this ship to play sooner) + initiative: number; + } +} \ No newline at end of file diff --git a/src/scripts/game/Universe.ts b/src/scripts/game/Universe.ts new file mode 100644 index 0000000..ddcbd84 --- /dev/null +++ b/src/scripts/game/Universe.ts @@ -0,0 +1,7 @@ +module SpaceTac.Game { + // Main game universe + export class Universe { + // Current connected player + player: Player; + } +} diff --git a/src/scripts/state/Boot.ts b/src/scripts/state/Boot.ts deleted file mode 100644 index 31bcad7..0000000 --- a/src/scripts/state/Boot.ts +++ /dev/null @@ -1,16 +0,0 @@ -module SpaceTac.State { - export class Boot extends Phaser.State { - preload() { - this.load.image('preload-bar', 'assets/images/preloader.gif'); - } - - create() { - this.game.stage.backgroundColor = 0xFFFFFF; - - this.input.maxPointers = 1; - this.stage.disableVisibilityChange = true; - - this.game.state.start('preload'); - } - } -} diff --git a/src/scripts/state/Main.ts b/src/scripts/state/Main.ts deleted file mode 100644 index bed9620..0000000 --- a/src/scripts/state/Main.ts +++ /dev/null @@ -1,8 +0,0 @@ -module SpaceTac.State { - export class Main extends Phaser.State { - - create() { - this.add.text(10, 10, "Let's code !", { font: "65px Arial" }); - } - } -} diff --git a/src/scripts/state/Preload.ts b/src/scripts/state/Preload.ts deleted file mode 100644 index b10987b..0000000 --- a/src/scripts/state/Preload.ts +++ /dev/null @@ -1,13 +0,0 @@ -module SpaceTac.State { - export class Preload extends Phaser.State { - private preloadBar:Phaser.Sprite; - - preload() { - this.preloadBar = this.add.sprite(290, 290, 'preload-bar'); - } - - create() { - this.game.state.start('main'); - } - } -} diff --git a/src/scripts/view/BattleView.ts b/src/scripts/view/BattleView.ts new file mode 100644 index 0000000..85e8d8c --- /dev/null +++ b/src/scripts/view/BattleView.ts @@ -0,0 +1,23 @@ +module SpaceTac.View { + // Interactive view of a Battle + export class BattleView extends Phaser.State { + + // Displayed battle + battle: Game.Battle; + + // Init the view, binding it to a specific battle + init(battle) { + this.battle = battle; + } + + // Create view graphics + create() { + this.game.stage.backgroundColor = 0x000000; + } + + // Leaving the view, we unbind the battle + shutdown() { + this.battle = null; + } + } +} diff --git a/src/scripts/view/Boot.ts b/src/scripts/view/Boot.ts new file mode 100644 index 0000000..60982f2 --- /dev/null +++ b/src/scripts/view/Boot.ts @@ -0,0 +1,16 @@ +module SpaceTac.View { + export class Boot extends Phaser.State { + preload() { + this.load.image('preload-bar', 'assets/images/preloader.gif'); + } + + create() { + this.game.stage.backgroundColor = 0xFFFFFF; + + this.input.maxPointers = 1; + this.stage.disableVisibilityChange = true; + + this.game.state.start('preload'); + } + } +} diff --git a/src/scripts/view/Main.ts b/src/scripts/view/Main.ts new file mode 100644 index 0000000..6747dc3 --- /dev/null +++ b/src/scripts/view/Main.ts @@ -0,0 +1,11 @@ +module SpaceTac.View { + export class Main extends Phaser.State { + + create() { + this.add.text(10, 10, "Let's code !", {font: "65px Arial"}); + + // Switch to a test battle + this.game.state.start("battle", true, false, Game.Battle.newQuickRandom()); + } + } +} diff --git a/src/scripts/view/Preload.ts b/src/scripts/view/Preload.ts new file mode 100644 index 0000000..b26a9f1 --- /dev/null +++ b/src/scripts/view/Preload.ts @@ -0,0 +1,13 @@ +module SpaceTac.View { + export class Preload extends Phaser.State { + private preloadBar: Phaser.Sprite; + + preload() { + this.preloadBar = this.add.sprite(290, 290, 'preload-bar'); + } + + create() { + this.game.state.start('main'); + } + } +}