import { Node, Vec3 } from "cc";
import { getDirection } from "../../Services/Utils/VecUtils";
import { Item } from "./Item";

export class ItemAttractor {
    private items: Item[] = [];
    private speedValues: number[] = [];

    public constructor(private playerNode: Node, private speedIncreasePerSecond: number) {}

    public gameTick(deltaTime: number): void {
        for (let i = 0; i < this.items.length; i++) {
            const direction: Vec3 = getDirection(this.playerNode.worldPosition, this.items[i].node.worldPosition);
            const position = this.items[i].node.worldPosition.clone();
            position.x += direction.x * this.speedValues[i] * deltaTime;
            position.y += direction.y * this.speedValues[i] * deltaTime;

            this.items[i].node.setWorldPosition(position);
            this.speedValues[i] += this.speedIncreasePerSecond * deltaTime;
        }
    }

    public addItem(item: Item): void {
        if (this.items.includes(item)) return;

        item.PickupEvent.on(this.removeItem, this);

        this.items.push(item);
        this.speedValues.push(0);
    }

    private removeItem(item: Item): void {
        item.PickupEvent.off(this.removeItem);

        const index = this.items.indexOf(item);

        this.items.splice(index, 1);
        this.speedValues.splice(index, 1);
    }
}