function update(game: Game, entity: Entity, delta: number) {
let local = game.World.LocalTransform2D[entity];
let move = game.World.Move2D[entity];
if (move.Direction[0] || move.Direction[1]) {
direction[0] = move.Direction[0];
direction[1] = move.Direction[1];
let amount = Math.min(1, vec2.length(direction));
if (game.World.Signature[entity] & Has.SpatialNode2D) {
let node = game.World.SpatialNode2D[entity];
if (node.Parent !== undefined) {
let parent = game.World.SpatialNode2D[node.Parent];
vec2.transform_direction(direction, direction, parent.Self);
} else {
vec2.transform_direction(direction, direction, node.World);
}
} else {
vec2.rotate(direction, direction, local.Rotation);
}
vec2.normalize(direction, direction);
vec2.scale(direction, direction, amount * move.MoveSpeed * delta);
vec2.add(local.Translation, local.Translation, direction);
move.Direction[0] = 0;
move.Direction[1] = 0;
}
if (move.Rotation) {
local.Rotation += move.Rotation * move.RotationSpeed * delta;
move.Rotation = 0;
}
}