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');
+ }
+ }
+}