import "jasmine";
import {PlayerMovement} from "../../../src/Phaser/Game/PlayerMovement";

describe("Interpolation / Extrapolation", () => {
    it("should interpolate", () => {
        const playerMovement = new PlayerMovement({
            x: 100, y: 200
        }, 42000,
            {
                x: 200, y: 100, moving: true, direction: "up"
            },
            42200
            );


        expect(playerMovement.isOutdated(42100)).toBe(false);
        expect(playerMovement.isOutdated(43000)).toBe(true);

        expect(playerMovement.getPosition(42100)).toEqual({
            x: 150,
            y: 150,
            direction: 'up',
            moving: true
        });

        expect(playerMovement.getPosition(42200)).toEqual({
            x: 200,
            y: 100,
            direction: 'up',
            moving: true
        });

        expect(playerMovement.getPosition(42300)).toEqual({
            x: 250,
            y: 50,
            direction: 'up',
            moving: true
        });
    });

    it("should not extrapolate if we stop", () => {
        const playerMovement = new PlayerMovement({
                x: 100, y: 200
            }, 42000,
            {
                x: 200, y: 100, moving: false, direction: "up"
            },
            42200
        );

        expect(playerMovement.getPosition(42300)).toEqual({
            x: 200,
            y: 100,
            direction: 'up',
            moving: false
        });
    });

    it("should should keep moving until it stops", () => {
        const playerMovement = new PlayerMovement({
                x: 100, y: 200
            }, 42000,
            {
                x: 200, y: 100, moving: false, direction: "up"
            },
            42200
        );

        expect(playerMovement.getPosition(42100)).toEqual({
            x: 150,
            y: 150,
            direction: 'up',
            moving: true
        });
    });
})