72 lines
2.1 KiB
TypeScript
72 lines
2.1 KiB
TypeScript
|
|
import { Injectable } from '@angular/core';
|
||
|
|
import * as THREE from 'three';
|
||
|
|
import { RendererService } from './renderer.service';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Service responsible for creating and managing the player model
|
||
|
|
*/
|
||
|
|
@Injectable({
|
||
|
|
providedIn: 'root'
|
||
|
|
})
|
||
|
|
export class PlayerModelService {
|
||
|
|
private playerModel!: THREE.Group;
|
||
|
|
|
||
|
|
constructor(private rendererService: RendererService) {}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Creates a simple player model and adds it to the scene
|
||
|
|
*/
|
||
|
|
createPlayerModel(): THREE.Group {
|
||
|
|
this.playerModel = new THREE.Group();
|
||
|
|
|
||
|
|
// Head
|
||
|
|
const headGeometry = new THREE.BoxGeometry(0.5, 0.5, 0.5);
|
||
|
|
const headMaterial = new THREE.MeshLambertMaterial({color: 0xffccaa});
|
||
|
|
const head = new THREE.Mesh(headGeometry, headMaterial);
|
||
|
|
head.position.y = 1.35;
|
||
|
|
this.playerModel.add(head);
|
||
|
|
|
||
|
|
// Body
|
||
|
|
const bodyGeometry = new THREE.BoxGeometry(0.5, 0.7, 0.25);
|
||
|
|
const bodyMaterial = new THREE.MeshLambertMaterial({color: 0x0000ff});
|
||
|
|
const body = new THREE.Mesh(bodyGeometry, bodyMaterial);
|
||
|
|
body.position.y = 0.75;
|
||
|
|
this.playerModel.add(body);
|
||
|
|
|
||
|
|
// Arms
|
||
|
|
const armGeometry = new THREE.BoxGeometry(0.2, 0.7, 0.25);
|
||
|
|
const armMaterial = new THREE.MeshLambertMaterial({color: 0xffccaa});
|
||
|
|
|
||
|
|
const leftArm = new THREE.Mesh(armGeometry, armMaterial);
|
||
|
|
leftArm.position.set(-0.35, 0.75, 0);
|
||
|
|
this.playerModel.add(leftArm);
|
||
|
|
|
||
|
|
const rightArm = new THREE.Mesh(armGeometry, armMaterial);
|
||
|
|
rightArm.position.set(0.35, 0.75, 0);
|
||
|
|
this.playerModel.add(rightArm);
|
||
|
|
|
||
|
|
// Legs
|
||
|
|
const legGeometry = new THREE.BoxGeometry(0.25, 0.7, 0.25);
|
||
|
|
const legMaterial = new THREE.MeshLambertMaterial({color: 0x000000});
|
||
|
|
|
||
|
|
const leftLeg = new THREE.Mesh(legGeometry, legMaterial);
|
||
|
|
leftLeg.position.set(-0.125, 0.15, 0);
|
||
|
|
this.playerModel.add(leftLeg);
|
||
|
|
|
||
|
|
const rightLeg = new THREE.Mesh(legGeometry, legMaterial);
|
||
|
|
rightLeg.position.set(0.125, 0.15, 0);
|
||
|
|
this.playerModel.add(rightLeg);
|
||
|
|
|
||
|
|
this.rendererService.scene.add(this.playerModel);
|
||
|
|
|
||
|
|
return this.playerModel;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Gets the player model
|
||
|
|
*/
|
||
|
|
getPlayerModel(): THREE.Group {
|
||
|
|
return this.playerModel;
|
||
|
|
}
|
||
|
|
}
|