Added tslint style checker
This commit is contained in:
parent
18a20a7855
commit
a7f1cb41ab
|
@ -49,6 +49,7 @@ packages =
|
|||
gulp-open
|
||||
gulp-processhtml
|
||||
gulp-sourcemaps
|
||||
gulp-tslint
|
||||
gulp-typescript
|
||||
gulp-uglifyjs
|
||||
gulp-util
|
||||
|
|
15
gulpfile.js
15
gulpfile.js
|
@ -7,6 +7,7 @@ var gulp = require('gulp'),
|
|||
processhtml = require('gulp-processhtml'),
|
||||
connect = require('gulp-connect'),
|
||||
karma = require('gulp-karma'),
|
||||
tslint = require('gulp-tslint'),
|
||||
open = require('gulp-open'),
|
||||
del = require('del'),
|
||||
uglify = require('gulp-uglifyjs'),
|
||||
|
@ -67,6 +68,14 @@ gulp.task('tests', ['typescript'], function () {
|
|||
.pipe(karma({configFile: 'karma.conf.js', action: 'run'}))
|
||||
});
|
||||
|
||||
gulp.task('tslint', function () {
|
||||
return gulp.src(['src/scripts/game/**/*.ts', 'src/scripts/view/**/*.ts'])
|
||||
.pipe(tslint())
|
||||
.pipe(tslint.report('verbose', {
|
||||
emitError: false
|
||||
}));
|
||||
});
|
||||
|
||||
gulp.task('processhtml', function () {
|
||||
return gulp.src(paths.index)
|
||||
.pipe(processhtml())
|
||||
|
@ -79,7 +88,7 @@ gulp.task('reload', ['typescript'], function () {
|
|||
});
|
||||
|
||||
gulp.task('watch', function () {
|
||||
gulp.watch(paths.ts, ['typescript', 'tests', 'reload']);
|
||||
gulp.watch(paths.ts, ['typescript', 'tslint', 'tests', 'reload']);
|
||||
gulp.watch(paths.less, ['less', 'reload']);
|
||||
gulp.watch(paths.index, ['reload']);
|
||||
});
|
||||
|
@ -115,8 +124,8 @@ gulp.task('deploy', function () {
|
|||
});
|
||||
|
||||
gulp.task('default', function () {
|
||||
runSequence('clean', ['typescript', 'less', 'connect', 'watch'], ['tests', 'open']);
|
||||
runSequence('clean', ['typescript', 'tslint', 'less', 'connect', 'watch'], ['tests', 'open']);
|
||||
});
|
||||
gulp.task('build', function () {
|
||||
return runSequence('clean', ['typescript', 'less', 'copy', 'minifyJs', 'minifyCss', 'processhtml']);
|
||||
return runSequence('clean', ['typescript', 'tslint', 'less', 'copy', 'minifyJs', 'minifyCss', 'processhtml']);
|
||||
});
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
/// <reference path="definitions/phaser.d.ts"/>
|
||||
|
||||
module SpaceTac {
|
||||
"use strict";
|
||||
|
||||
// Router between game views
|
||||
export class GameRouter extends Phaser.Game {
|
||||
constructor() {
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// A turn-based battle between fleets
|
||||
export class Battle {
|
||||
// Log of all battle events
|
||||
|
@ -23,13 +25,23 @@ module SpaceTac.Game {
|
|||
this.playing_ship = null;
|
||||
}
|
||||
|
||||
// Create a quick random battle, for testing purposes
|
||||
static newQuickRandom(): Battle {
|
||||
var player1 = Player.newQuickRandom("John");
|
||||
var player2 = Player.newQuickRandom("Carl");
|
||||
|
||||
var result = new Battle(player1.fleet, player2.fleet);
|
||||
result.start();
|
||||
return result;
|
||||
}
|
||||
|
||||
// Create play order, performing an initiative throw
|
||||
throwInitiative(gen: RandomGenerator = new RandomGenerator()): void {
|
||||
var play_order: Ship[] = [];
|
||||
|
||||
// Throw each ship's initiative
|
||||
this.fleets.forEach(function (fleet) {
|
||||
fleet.ships.forEach(function (ship) {
|
||||
this.fleets.forEach(function (fleet: Fleet) {
|
||||
fleet.ships.forEach(function (ship: Ship) {
|
||||
ship.throwInitiative(gen);
|
||||
play_order.push(ship);
|
||||
});
|
||||
|
@ -42,23 +54,6 @@ module SpaceTac.Game {
|
|||
this.play_order = play_order;
|
||||
}
|
||||
|
||||
// Defines the initial ship positions for one fleet
|
||||
// x and y are the center of the fleet placement
|
||||
// facing_angle is the forward angle in radians
|
||||
private placeFleetShips(fleet: Fleet, x: number, y: number, facing_angle: number): void {
|
||||
var side_angle = facing_angle + Math.PI * 0.5;
|
||||
var spacing = 50;
|
||||
var total_length = spacing * (fleet.ships.length - 1);
|
||||
var dx = Math.cos(side_angle);
|
||||
var dy = Math.sin(side_angle);
|
||||
x -= dx * total_length * 0.5;
|
||||
y -= dy * total_length * 0.5;
|
||||
for (var i = 0; i < fleet.ships.length; i++) {
|
||||
fleet.ships[i].setArenaPosition(x + i * dx * spacing, y + i * dy * spacing);
|
||||
fleet.ships[i].setArenaFacingAngle(facing_angle);
|
||||
}
|
||||
}
|
||||
|
||||
// Defines the initial ship positions of all engaged fleets
|
||||
placeShips(): void {
|
||||
this.placeFleetShips(this.fleets[0], 100, 100, 0);
|
||||
|
@ -68,10 +63,10 @@ module SpaceTac.Game {
|
|||
// End the current ship turn, passing control to the next one in play order
|
||||
// If at the end of the play order, next turn will start automatically
|
||||
// Member 'play_order' must be defined before calling this function
|
||||
advanceToNextShip(log: boolean=true): void {
|
||||
advanceToNextShip(log: boolean = true): void {
|
||||
var previous_ship = this.playing_ship;
|
||||
|
||||
if (this.play_order.length == 0) {
|
||||
if (this.play_order.length === 0) {
|
||||
this.playing_ship_index = null;
|
||||
this.playing_ship = null;
|
||||
} else {
|
||||
|
@ -108,7 +103,7 @@ module SpaceTac.Game {
|
|||
var log = this.log;
|
||||
|
||||
// Simulate initial ship placement
|
||||
this.play_order.forEach((ship) => {
|
||||
this.play_order.forEach((ship: Ship) => {
|
||||
log.add(new MoveEvent(ship, ship.arena_x, ship.arena_y));
|
||||
});
|
||||
|
||||
|
@ -116,14 +111,21 @@ module SpaceTac.Game {
|
|||
log.add(new ShipChangeEvent(this.playing_ship, this.playing_ship));
|
||||
}
|
||||
|
||||
// Create a quick random battle, for testing purposes
|
||||
static newQuickRandom(): Battle {
|
||||
var player1 = Player.newQuickRandom("John");
|
||||
var player2 = Player.newQuickRandom("Carl");
|
||||
|
||||
var result = new Battle(player1.fleet, player2.fleet);
|
||||
result.start();
|
||||
return result;
|
||||
// Defines the initial ship positions for one fleet
|
||||
// x and y are the center of the fleet placement
|
||||
// facing_angle is the forward angle in radians
|
||||
private placeFleetShips(fleet: Fleet, x: number, y: number, facing_angle: number): void {
|
||||
var side_angle = facing_angle + Math.PI * 0.5;
|
||||
var spacing = 50;
|
||||
var total_length = spacing * (fleet.ships.length - 1);
|
||||
var dx = Math.cos(side_angle);
|
||||
var dy = Math.sin(side_angle);
|
||||
x -= dx * total_length * 0.5;
|
||||
y -= dy * total_length * 0.5;
|
||||
for (var i = 0; i < fleet.ships.length; i++) {
|
||||
fleet.ships[i].setArenaPosition(x + i * dx * spacing, y + i * dy * spacing);
|
||||
fleet.ships[i].setArenaFacingAngle(facing_angle);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Log of a battle
|
||||
// This keeps track of all events in a battle
|
||||
// It also allows to register a callback to receive these events
|
||||
|
@ -19,7 +21,7 @@ module SpaceTac.Game {
|
|||
add(event: BaseLogEvent) {
|
||||
this.events.push(event);
|
||||
|
||||
this.subscribers.forEach((subscriber) => {
|
||||
this.subscribers.forEach((subscriber: Function) => {
|
||||
subscriber(event);
|
||||
});
|
||||
}
|
||||
|
@ -39,4 +41,4 @@ module SpaceTac.Game {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// A fleet of ships
|
||||
export class Fleet {
|
||||
// Fleet owner
|
||||
|
@ -19,4 +21,4 @@ module SpaceTac.Game {
|
|||
this.ships.push(ship);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// One player (human or IA)
|
||||
export class Player {
|
||||
// Current fleet
|
||||
|
@ -21,4 +23,4 @@ module SpaceTac.Game {
|
|||
return player;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Random generator, used in all throws
|
||||
export class RandomGenerator {
|
||||
// Array of next values, empty for a correct generator
|
||||
|
@ -13,8 +15,7 @@ module SpaceTac.Game {
|
|||
throw(level: number): number {
|
||||
if (this.fake_values.length > 0) {
|
||||
return this.fake_values.shift() * level;
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
return Math.random() * level;
|
||||
}
|
||||
}
|
||||
|
@ -26,4 +27,4 @@ module SpaceTac.Game {
|
|||
this.fake_values.push(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// A single ship in a Fleet
|
||||
export class Ship {
|
||||
// Fleet this ship is a member of
|
||||
|
@ -126,4 +128,4 @@ module SpaceTac.Game {
|
|||
this.useActionPoints(cost);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Target for a capability
|
||||
// This could be a location in space, or a ship
|
||||
export class Target {
|
||||
|
@ -26,4 +28,4 @@ module SpaceTac.Game {
|
|||
return new Target(x, y, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Main game universe
|
||||
export class Universe {
|
||||
// Current connected player
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Base class for action definitions
|
||||
export class BaseAction {
|
||||
// Identifier code for the type of action
|
||||
|
@ -65,4 +67,4 @@ module SpaceTac.Game {
|
|||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Action to end the ship's turn
|
||||
export class EndTurnAction extends BaseAction {
|
||||
constructor() {
|
||||
|
@ -14,4 +16,4 @@ module SpaceTac.Game {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Action to move to a given location
|
||||
export class MoveAction extends BaseAction {
|
||||
constructor() {
|
||||
|
@ -21,4 +23,4 @@ module SpaceTac.Game {
|
|||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Base class for a BattleLog event
|
||||
export class BaseLogEvent {
|
||||
// Code of the event (its type)
|
||||
|
@ -16,4 +18,4 @@ module SpaceTac.Game {
|
|||
this.target = target;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Event logged when a ship moves
|
||||
export class MoveEvent extends BaseLogEvent {
|
||||
constructor(ship: Ship, x: number, y: number) {
|
||||
super("move", ship, Target.newFromLocation(x, y));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Battle event, when a ship turn ended, and advanced to a new one
|
||||
export class ShipChangeEvent extends BaseLogEvent {
|
||||
constructor(ship: Ship, new_ship: Ship) {
|
||||
super("ship_change", ship, new_ship ? Target.newFromShip(new_ship) : null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
describe("Battle", function () {
|
||||
it("defines play order by initiative throws", function () {
|
||||
var fleet1 = new Fleet(null);
|
||||
|
@ -27,7 +29,7 @@ module SpaceTac.Game {
|
|||
expect(battle.play_order).toEqual([ship1, ship4, ship5, ship3, ship2]);
|
||||
});
|
||||
|
||||
it("places ships on lines, facing the arena center", function(){
|
||||
it("places ships on lines, facing the arena center", function () {
|
||||
var fleet1 = new Fleet(null);
|
||||
var fleet2 = new Fleet(null);
|
||||
|
||||
|
@ -61,7 +63,7 @@ module SpaceTac.Game {
|
|||
expect(ship5.arena_angle).toBeCloseTo(Math.PI, 0.0001);
|
||||
});
|
||||
|
||||
it("advances to next ship in play order", function(){
|
||||
it("advances to next ship in play order", function () {
|
||||
var fleet1 = new Fleet(null);
|
||||
var fleet2 = new Fleet(null);
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
// Check a single game log event
|
||||
function checkEvent(got: BaseLogEvent, ship: Ship, code: string,
|
||||
|
@ -42,7 +43,7 @@ module SpaceTac.Game {
|
|||
var received: BaseLogEvent[] = [];
|
||||
var fake = new FakeEvent();
|
||||
|
||||
var sub = log.subscribe(function (event) {
|
||||
var sub = log.subscribe(function (event: BaseLogEvent) {
|
||||
received.push(event);
|
||||
});
|
||||
|
||||
|
@ -75,9 +76,10 @@ module SpaceTac.Game {
|
|||
|
||||
expect(battle.log.events.length).toBe(9);
|
||||
for (var i = 0; i < 8; i++) {
|
||||
checkEvent(battle.log.events[i], battle.play_order[i], "move", null, battle.play_order[i].arena_x, battle.play_order[i].arena_y);
|
||||
checkEvent(battle.log.events[i], battle.play_order[i], "move", null,
|
||||
battle.play_order[i].arena_x, battle.play_order[i].arena_y);
|
||||
}
|
||||
checkEvent(battle.log.events[8], battle.playing_ship, "ship_change", battle.playing_ship);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.Game.Specs {
|
||||
"use strict";
|
||||
|
||||
describe("EndTurnAction", () => {
|
||||
it("can't be applied to non-playing ship", () => {
|
||||
var battle = Battle.newQuickRandom();
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.Game {
|
||||
"use strict";
|
||||
|
||||
describe("MoveAction", function () {
|
||||
it("checks movement against remaining AP", function(){
|
||||
it("checks movement against remaining AP", function () {
|
||||
var ship = new Ship(null, "Test");
|
||||
ship.ap_current = 6;
|
||||
ship.movement_cost = 2;
|
||||
|
@ -13,15 +15,15 @@ module SpaceTac.Game {
|
|||
var result = action.checkTarget(null, ship, Target.newFromLocation(0, 2));
|
||||
expect(result).toEqual(Target.newFromLocation(0, 2));
|
||||
|
||||
var result = action.checkTarget(null, ship, Target.newFromLocation(0, 8));
|
||||
result = action.checkTarget(null, ship, Target.newFromLocation(0, 8));
|
||||
expect(result).toEqual(Target.newFromLocation(0, 3));
|
||||
|
||||
ship.ap_current = 0;
|
||||
var result = action.checkTarget(null, ship, Target.newFromLocation(0, 8));
|
||||
result = action.checkTarget(null, ship, Target.newFromLocation(0, 8));
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it("forbids targetting a ship", function(){
|
||||
it("forbids targetting a ship", function () {
|
||||
var ship1 = new Ship(null, "Test1");
|
||||
var ship2 = new Ship(null, "Test2");
|
||||
var action = new MoveAction();
|
||||
|
@ -29,11 +31,11 @@ module SpaceTac.Game {
|
|||
var result = action.checkTarget(null, ship1, Target.newFromShip(ship1));
|
||||
expect(result).toBeNull();
|
||||
|
||||
var result = action.checkTarget(null, ship1, Target.newFromShip(ship2));
|
||||
result = action.checkTarget(null, ship1, Target.newFromShip(ship2));
|
||||
expect(result).toBeNull();
|
||||
});
|
||||
|
||||
it("applies to ship location, battle log and AP", function(){
|
||||
it("applies to ship location, battle log and AP", function () {
|
||||
var battle = new Battle(null, null);
|
||||
var ship = new Ship(null, "Test");
|
||||
ship.ap_current = 5;
|
||||
|
@ -48,7 +50,7 @@ module SpaceTac.Game {
|
|||
expect(ship.arena_y).toBeCloseTo(3.535533, 0.00001);
|
||||
expect(ship.ap_current).toEqual(0);
|
||||
|
||||
var result = action.apply(battle, ship, Target.newFromLocation(10, 10));
|
||||
result = action.apply(battle, ship, Target.newFromLocation(10, 10));
|
||||
expect(result).toBe(false);
|
||||
expect(ship.arena_x).toBeCloseTo(3.535533, 0.00001);
|
||||
expect(ship.arena_y).toBeCloseTo(3.535533, 0.00001);
|
||||
|
@ -62,4 +64,4 @@ module SpaceTac.Game {
|
|||
expect(battle.log.events[0].target.y).toBeCloseTo(3.535533, 0.00001);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.Game {
|
||||
describe("Ship", function(){
|
||||
it("limits movement range by action points", function(){
|
||||
"use strict";
|
||||
|
||||
describe("Ship", function () {
|
||||
it("limits movement range by action points", function () {
|
||||
var ship = new Ship(null, "Test");
|
||||
ship.ap_current = 8;
|
||||
ship.movement_cost = 3;
|
||||
|
@ -11,12 +13,12 @@ module SpaceTac.Game {
|
|||
var point = ship.getLongestMove(51, 52);
|
||||
expect(point).toEqual([51, 52]);
|
||||
|
||||
var point = ship.getLongestMove(60, 55);
|
||||
point = ship.getLongestMove(60, 55);
|
||||
expect(point[0]).toBeCloseTo(52.385139, 0.0001);
|
||||
expect(point[1]).toBeCloseTo(51.19256, 0.0001);
|
||||
});
|
||||
|
||||
it("moves and consumes action points", function(){
|
||||
it("moves and consumes action points", function () {
|
||||
var ship = new Ship(null, "Test");
|
||||
ship.ap_current = 8;
|
||||
ship.movement_cost = 3;
|
||||
|
@ -33,4 +35,4 @@ module SpaceTac.Game {
|
|||
expect(ship.arena_y).toEqual(50);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,9 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
export class Boot extends Phaser.State {
|
||||
preload() {
|
||||
this.load.image('preload-bar', 'assets/images/preloader.gif');
|
||||
this.load.image("preload-bar", "assets/images/preloader.gif");
|
||||
}
|
||||
|
||||
create() {
|
||||
|
@ -10,7 +12,7 @@ module SpaceTac.View {
|
|||
this.input.maxPointers = 1;
|
||||
this.stage.disableVisibilityChange = true;
|
||||
|
||||
this.game.state.start('preload');
|
||||
this.game.state.start("preload");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
module SpaceTac.View {
|
||||
export class Main extends Phaser.State {
|
||||
"use strict";
|
||||
|
||||
export class Main extends Phaser.State {
|
||||
create() {
|
||||
// Switch to a test battle
|
||||
var battle = Game.Battle.newQuickRandom();
|
||||
|
|
|
@ -1,10 +1,12 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
export class Preload extends Phaser.State {
|
||||
private preloadBar: Phaser.Sprite;
|
||||
|
||||
preload() {
|
||||
// Add preload sprite
|
||||
this.preloadBar = this.add.sprite(290, 290, 'preload-bar');
|
||||
this.preloadBar = this.add.sprite(290, 290, "preload-bar");
|
||||
this.load.setPreloadSprite(this.preloadBar);
|
||||
|
||||
// Load assets
|
||||
|
@ -15,7 +17,7 @@ module SpaceTac.View {
|
|||
}
|
||||
|
||||
create() {
|
||||
this.game.state.start('main');
|
||||
this.game.state.start("main");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Phaser Group to hold UI related objects
|
||||
export class UIGroup extends Phaser.Group {
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Bar with all available action icons displayed
|
||||
export class ActionBar extends Phaser.Group {
|
||||
// Link to the parent battleview
|
||||
|
@ -27,7 +29,7 @@ module SpaceTac.View {
|
|||
|
||||
// Clear the action icons
|
||||
clearAll(): void {
|
||||
this.actions.forEach((action) => {
|
||||
this.actions.forEach((action: ActionIcon) => {
|
||||
action.destroy();
|
||||
});
|
||||
this.actions = [];
|
||||
|
@ -46,9 +48,9 @@ module SpaceTac.View {
|
|||
this.clearAll();
|
||||
|
||||
var actions = ship.getAvailableActions();
|
||||
actions.forEach((action) => {
|
||||
actions.forEach((action: Game.BaseAction) => {
|
||||
action_bar.addAction(ship, action);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Icon to activate a ship capability (move, fire...)
|
||||
export class ActionIcon extends Phaser.Button {
|
||||
|
||||
|
@ -20,7 +22,7 @@ module SpaceTac.View {
|
|||
this.ship = ship;
|
||||
this.action = action;
|
||||
|
||||
super(bar.game, x, y, 'action-' + action.code);
|
||||
super(bar.game, x, y, "action-" + action.code);
|
||||
bar.add(this);
|
||||
|
||||
// TODO Handle action.canBeUsed() result to enable/disable the button
|
||||
|
@ -64,4 +66,4 @@ module SpaceTac.View {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Graphical representation of a battle
|
||||
// This is the area in the BattleView that will display ships with their real positions
|
||||
export class Arena extends Phaser.Group {
|
||||
|
@ -20,7 +22,7 @@ module SpaceTac.View {
|
|||
|
||||
super(battleview.game);
|
||||
|
||||
var background = new Phaser.Button(battleview.game, 0, 0, 'ui-arena-background');
|
||||
var background = new Phaser.Button(battleview.game, 0, 0, "ui-arena-background");
|
||||
background.scale.set(20, 10);
|
||||
this.background = background;
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Interactive view of a Battle
|
||||
export class BattleView extends Phaser.State {
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Processor of battle log events
|
||||
// This will process incoming battle events, and update the battleview accordingly
|
||||
export class LogProcessor {
|
||||
|
@ -20,7 +22,7 @@ module SpaceTac.View {
|
|||
this.battle = view.battle;
|
||||
this.log = view.battle.log;
|
||||
|
||||
this.subscription = this.log.subscribe((event) => {
|
||||
this.subscription = this.log.subscribe((event: Game.BaseLogEvent) => {
|
||||
this.processBattleEvent(event);
|
||||
});
|
||||
this.battle.injectInitialEvents();
|
||||
|
@ -54,4 +56,4 @@ module SpaceTac.View {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Ship sprite in the arena (BattleView)
|
||||
export class ShipArenaSprite extends Phaser.Button {
|
||||
// Link to displayed ship
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Card to display detailed information about a ship
|
||||
export class ShipCard extends Phaser.Sprite {
|
||||
// Displayed ship
|
||||
|
@ -20,4 +22,4 @@ module SpaceTac.View {
|
|||
this.visible = (ship !== null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,16 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// One item in a ship list (used in BattleView)
|
||||
export class ShipListItem extends Phaser.Button {
|
||||
// Reference to the ship game object
|
||||
private ship: Game.Ship;
|
||||
|
||||
// Create a ship button for the battle ship list
|
||||
constructor(battleview: BattleView, x: number, y: number, ship:Game.Ship, owned: boolean) {
|
||||
constructor(battleview: BattleView, x: number, y: number, ship: Game.Ship, owned: boolean) {
|
||||
this.ship = ship;
|
||||
|
||||
super(battleview.game, x, y, owned ? 'ui-shiplist-own' : 'ui-shiplist-enemy');
|
||||
super(battleview.game, x, y, owned ? "ui-shiplist-own" : "ui-shiplist-enemy");
|
||||
battleview.ui.add(this);
|
||||
|
||||
this.input.useHandCursor = true;
|
||||
|
@ -20,4 +22,4 @@ module SpaceTac.View {
|
|||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,16 +1,9 @@
|
|||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
// Targetting system
|
||||
// Allows to pick a target for an action
|
||||
export class Targetting {
|
||||
// Access to the parent battle view
|
||||
private battleview: BattleView;
|
||||
|
||||
// Source of the targetting
|
||||
private source: PIXI.Sprite;
|
||||
|
||||
// Current target
|
||||
private target: Game.Target;
|
||||
|
||||
// Signal to receive hovering events
|
||||
targetHovered: Phaser.Signal;
|
||||
|
||||
|
@ -20,6 +13,15 @@ module SpaceTac.View {
|
|||
// Target visual line
|
||||
line: Phaser.Graphics;
|
||||
|
||||
// Access to the parent battle view
|
||||
private battleview: BattleView;
|
||||
|
||||
// Source of the targetting
|
||||
private source: PIXI.Sprite;
|
||||
|
||||
// Current target
|
||||
private target: Game.Target;
|
||||
|
||||
// Create a default targetting mode
|
||||
constructor(battleview: BattleView) {
|
||||
this.battleview = battleview;
|
||||
|
@ -66,7 +68,7 @@ module SpaceTac.View {
|
|||
}
|
||||
|
||||
// Set a target from a target object
|
||||
setTarget(target: Game.Target, dispatch: boolean = true):void {
|
||||
setTarget(target: Game.Target, dispatch: boolean = true): void {
|
||||
this.target = target;
|
||||
if (dispatch) {
|
||||
this.targetHovered.dispatch(this.target);
|
||||
|
@ -95,4 +97,4 @@ module SpaceTac.View {
|
|||
this.targetSelected.dispatch(this.target);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
/// <reference path="../../definitions/jasmine.d.ts"/>
|
||||
|
||||
module SpaceTac.View {
|
||||
"use strict";
|
||||
|
||||
describe("Targetting", () => {
|
||||
it("broadcasts hovering and selection events", () => {
|
||||
var targetting = new Targetting(null);
|
||||
|
@ -23,4 +25,4 @@ module SpaceTac.View {
|
|||
expect(selected).toEqual([Game.Target.newFromLocation(1, 2)]);
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
87
tslint.json
Normal file
87
tslint.json
Normal file
|
@ -0,0 +1,87 @@
|
|||
{
|
||||
"rules": {
|
||||
"ban": [true,
|
||||
["_", "extend"],
|
||||
["_", "isNull"],
|
||||
["_", "isDefined"]
|
||||
],
|
||||
"class-name": true,
|
||||
"comment-format": [true,
|
||||
"check-space",
|
||||
"!check-lowercase"
|
||||
],
|
||||
"curly": true,
|
||||
"eofline": true,
|
||||
"forin": true,
|
||||
"indent": [true, 4],
|
||||
"interface-name": true,
|
||||
"jsdoc-format": true,
|
||||
"label-position": true,
|
||||
"label-undefined": true,
|
||||
"max-line-length": [true, 140],
|
||||
"member-ordering": [true,
|
||||
"public-before-private",
|
||||
"static-before-instance",
|
||||
"variables-before-functions"
|
||||
],
|
||||
"no-arg": true,
|
||||
"no-bitwise": true,
|
||||
"no-console": [true,
|
||||
"debug",
|
||||
"info",
|
||||
"time",
|
||||
"timeEnd",
|
||||
"trace"
|
||||
],
|
||||
"no-construct": true,
|
||||
"no-constructor-vars": true,
|
||||
"no-debugger": true,
|
||||
"no-duplicate-key": true,
|
||||
"no-duplicate-variable": true,
|
||||
"no-empty": true,
|
||||
"no-eval": true,
|
||||
"no-string-literal": true,
|
||||
"no-switch-case-fall-through": true,
|
||||
"no-trailing-comma": true,
|
||||
"no-trailing-whitespace": true,
|
||||
"no-unused-expression": false,
|
||||
"no-unused-variable": true,
|
||||
"no-unreachable": true,
|
||||
"no-use-before-declare": true,
|
||||
"no-var-requires": true,
|
||||
"one-line": [true,
|
||||
"check-open-brace",
|
||||
"check-catch",
|
||||
"check-else",
|
||||
"check-whitespace"
|
||||
],
|
||||
"quotemark": [true, "double"],
|
||||
"radix": true,
|
||||
"semicolon": true,
|
||||
"triple-equals": [true, "allow-null-check"],
|
||||
"typedef": [true,
|
||||
"callSignature",
|
||||
"indexSignature",
|
||||
"parameter",
|
||||
"propertySignature",
|
||||
"variableDeclarator"
|
||||
],
|
||||
"typedef-whitespace": [true,
|
||||
["callSignature", "noSpace"],
|
||||
["catchClause", "noSpace"],
|
||||
["indexSignature", "space"]
|
||||
],
|
||||
"use-strict": [true,
|
||||
"check-module",
|
||||
"check-function"
|
||||
],
|
||||
"variable-name": false,
|
||||
"whitespace": [true,
|
||||
"check-branch",
|
||||
"check-decl",
|
||||
"check-operator",
|
||||
"check-separator",
|
||||
"check-type"
|
||||
]
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue