Fixed ship facing angle
This commit is contained in:
parent
a545251257
commit
36b54e7b75
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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[];
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue