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; } }