1
0
Fork 0

Fixed ship facing angle

This commit is contained in:
Michaël Lemaire 2015-01-26 01:00:00 +01:00 committed by Michaël Lemaire
parent a545251257
commit 36b54e7b75
5 changed files with 40 additions and 6 deletions

View file

@ -204,8 +204,10 @@ module SpaceTac.Game {
var dy = dest[1] - this.arena_y;
var distance = Math.sqrt(dx * dx + dy * dy);
var cost = distance * this.movement_cost;
var angle = Math.atan2(y - this.arena_y, x - this.arena_x);
this.setArenaPosition(this.arena_x + dx, this.arena_y + dy);
this.setArenaFacingAngle(angle);
this.useActionPoints(cost);
}

View file

@ -3,8 +3,13 @@ module SpaceTac.Game {
// Event logged when a ship moves
export class MoveEvent extends BaseLogEvent {
// New facing angle, in radians
facing_angle: number;
constructor(ship: Ship, x: number, y: number) {
super("move", ship, Target.newFromLocation(x, y));
this.facing_angle = ship.arena_angle;
}
}
}

View file

@ -37,6 +37,33 @@ module SpaceTac.Game {
expect(ship.arena_y).toEqual(50);
});
it("computes facing angle", function () {
var ship = new Ship(null, "Test");
ship.ap_current.setMaximal(20);
ship.ap_current.set(20);
ship.movement_cost = 3;
ship.arena_angle = 0;
ship.setArenaPosition(50, 50);
ship.moveTo(50, 50);
expect(ship.arena_angle).toEqual(0);
ship.moveTo(51, 51);
expect(ship.arena_angle).toBeCloseTo(0.785398, 0.00001);
ship.moveTo(51, 52);
expect(ship.arena_angle).toBeCloseTo(1.5707963, 0.00001);
ship.moveTo(52, 52);
expect(ship.arena_angle).toEqual(0);
ship.moveTo(52, 50);
expect(ship.arena_angle).toBeCloseTo(-1.5707963, 0.00001);
ship.moveTo(50, 50);
expect(ship.arena_angle).toBeCloseTo(3.14159265, 0.00001);
});
it("lists available actions from attached equipment", function () {
var ship = new Ship(null, "Test");
var actions: BaseAction[];

View file

@ -70,19 +70,18 @@ module SpaceTac.View {
}
// Move the sprite to a location
moveTo(x: number, y: number, animate: boolean = true) {
var angle = Math.atan2(y - this.y, x - this.x);
moveTo(x: number, y: number, facing_angle: number, animate: boolean = true) {
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.to({rotation: facing_angle});
tween_sprite.start();
} else {
this.x = x;
this.y = y;
this.sprite.rotation = angle;
this.sprite.rotation = facing_angle;
}
}
}

View file

@ -40,9 +40,10 @@ module SpaceTac.View {
this.view.action_bar.setShip(event.target.ship);
break;
case "move":
var sprite = this.view.arena.findShipSprite(event.ship);
var move_event: Game.MoveEvent = <Game.MoveEvent>event;
var sprite = this.view.arena.findShipSprite(move_event.ship);
if (sprite) {
sprite.moveTo(event.target.x, event.target.y);
sprite.moveTo(move_event.target.x, move_event.target.y, move_event.facing_angle, true);
}
break;
}