import { ISpawnPoint } from '../interfaces/ISpawnPoint';
import * as THREE from 'three';
import { World } from './World';
import { Item } from '../items/Item';
import { LoadingManager } from '../core/LoadingManager';
import * as Utils from '../core/FunctionLibrary';

export class ItemSpawnPoint implements ISpawnPoint
{
	private object: THREE.Object3D;

	constructor(object: THREE.Object3D)
	{
		this.object = object;
	}
	
	public spawn(loadingManager: LoadingManager, world: World): void
	{
		loadingManager.loadGLTF(world.worldOptions?.itemModel, (model) =>
		{
			let item = new Item(model, world.worldOptions?.itemTexture);
			let worldPos = new THREE.Vector3();
			this.object.getWorldPosition(worldPos);
			item.setPosition(worldPos.x, worldPos.y, worldPos.z);
			let forward = Utils.getForward(this.object);
			item.setOrientation(forward, true);
			world.add(item);
			item = undefined;
			worldPos = undefined;
			forward = undefined;
		});
	}

	public destroy(): void {
    this.object = undefined;
  }
}