/src/script/move.ts
import { ScriptInstruction, InstructionStatus, InstructionPromise } from './';

import gs from '../gamestate';
import { Direction, directionToDelta } from '../direction';

export class MoveInstruction implements ScriptInstruction {
    direction?: Direction;
    newPosition?: [number, number];

    constructor(d: Direction | number, e?: number) {
        if (typeof e == 'undefined') {
            this.direction = d;
        } else {
            this.newPosition = [d, e];
        }
    }

    execute(): InstructionPromise {
        if (typeof this.direction != 'undefined') {
            const [dx, dy] = directionToDelta(this.direction);
            gs.movePlayerRel(dx, dy);
        } else {
            gs.movePlayer(this.newPosition[0], this.newPosition[1]);
        }

        return Promise.resolve({ status: InstructionStatus.OK });
    }
}