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 dy = dest[1] - this.arena_y;
|
||||||
var distance = Math.sqrt(dx * dx + dy * dy);
|
var distance = Math.sqrt(dx * dx + dy * dy);
|
||||||
var cost = distance * this.movement_cost;
|
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.setArenaPosition(this.arena_x + dx, this.arena_y + dy);
|
||||||
|
this.setArenaFacingAngle(angle);
|
||||||
this.useActionPoints(cost);
|
this.useActionPoints(cost);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,8 +3,13 @@ module SpaceTac.Game {
|
||||||
|
|
||||||
// Event logged when a ship moves
|
// Event logged when a ship moves
|
||||||
export class MoveEvent extends BaseLogEvent {
|
export class MoveEvent extends BaseLogEvent {
|
||||||
|
// New facing angle, in radians
|
||||||
|
facing_angle: number;
|
||||||
|
|
||||||
constructor(ship: Ship, x: number, y: number) {
|
constructor(ship: Ship, x: number, y: number) {
|
||||||
super("move", ship, Target.newFromLocation(x, y));
|
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);
|
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 () {
|
it("lists available actions from attached equipment", function () {
|
||||||
var ship = new Ship(null, "Test");
|
var ship = new Ship(null, "Test");
|
||||||
var actions: BaseAction[];
|
var actions: BaseAction[];
|
||||||
|
|
|
@ -70,19 +70,18 @@ module SpaceTac.View {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Move the sprite to a location
|
// Move the sprite to a location
|
||||||
moveTo(x: number, y: number, animate: boolean = true) {
|
moveTo(x: number, y: number, facing_angle: number, animate: boolean = true) {
|
||||||
var angle = Math.atan2(y - this.y, x - this.x);
|
|
||||||
if (animate) {
|
if (animate) {
|
||||||
var tween_group = this.game.tweens.create(this);
|
var tween_group = this.game.tweens.create(this);
|
||||||
var tween_sprite = this.game.tweens.create(this.sprite);
|
var tween_sprite = this.game.tweens.create(this.sprite);
|
||||||
tween_group.to({x: x, y: y});
|
tween_group.to({x: x, y: y});
|
||||||
tween_group.start();
|
tween_group.start();
|
||||||
tween_sprite.to({rotation: angle});
|
tween_sprite.to({rotation: facing_angle});
|
||||||
tween_sprite.start();
|
tween_sprite.start();
|
||||||
} else {
|
} else {
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
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);
|
this.view.action_bar.setShip(event.target.ship);
|
||||||
break;
|
break;
|
||||||
case "move":
|
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) {
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue