diff --git a/party-stage/src/scene/party-guests.js b/party-stage/src/scene/party-guests.js index c0510fa..4fc9175 100644 --- a/party-stage/src/scene/party-guests.js +++ b/party-stage/src/scene/party-guests.js @@ -12,7 +12,17 @@ const guestTextureUrls = [ // --- Scene dimensions for positioning --- const stageHeight = 1.5; const stageDepth = 5; -const length = 44; +const length = 20; +const numGuests = 150; +const moveSpeed = 0.8; +const movementArea = { x: 15, z: length, y: 0, centerZ: -4 }; +const jumpChance = 0.01; +const jumpDuration = 0.3; +const jumpHeight = 0.05; +const jumpVariance = 0.5; +const rushIn = false; +const waitTimeBase = 10; +const waitTimeVariance = 10; // --- Billboard Properties --- const guestHeight = 2.5; @@ -61,7 +71,6 @@ export class PartyGuests extends SceneFeature { const createGuests = () => { const geometry = new THREE.PlaneGeometry(guestWidth, guestHeight); - const numGuests = 150; for (let i = 0; i < numGuests; i++) { const material = materials[i % materials.length]; @@ -69,7 +78,9 @@ export class PartyGuests extends SceneFeature { const pos = new THREE.Vector3( (Math.random() - 0.5) * 10, guestHeight / 2, - (Math.random() * 20) - 2 // Position them in the main hall + movementArea.centerZ + ( rushIn + ? (((Math.random()-0.5) * length * 0.6) - length * 0.3) + : ((Math.random()-0.5) * length)) ); guest.visible = false; // Start invisible guest.position.copy(pos); @@ -99,13 +110,7 @@ export class PartyGuests extends SceneFeature { state.camera.getWorldPosition(cameraPosition); const time = state.clock.getElapsedTime(); - const moveSpeed = 1.0; // Move slower - const movementArea = { x: 15, z: 20, y: 0, centerZ: -4 }; - const jumpChance = 0.05; // Jump way more - const jumpDuration = 0.5; - const jumpHeight = 0.1; - const jumpVariance = 0.5; - + this.guests.forEach(guestObj => { const { mesh } = guestObj; mesh.lookAt(cameraPosition.x, mesh.position.y, cameraPosition.z); @@ -140,7 +145,7 @@ export class PartyGuests extends SceneFeature { } else { guestObj.state = 'WAITING'; guestObj.waitStartTime = time; - guestObj.waitTime = 3 + Math.random() * 4; + guestObj.waitTime = waitTimeBase + Math.random() * waitTimeVariance; } } diff --git a/party-stage/src/scene/stage-lights.js b/party-stage/src/scene/stage-lights.js index 75d6df7..05004fe 100644 --- a/party-stage/src/scene/stage-lights.js +++ b/party-stage/src/scene/stage-lights.js @@ -24,7 +24,7 @@ export class StageLights extends SceneFeature { }); this.beam = new THREE.Mesh(beamGeo, beamMat); // Positioned high above the front of the stage area - this.beam.position.set(0, 8, -14); + this.beam.position.set(0, 9, -14); this.beam.castShadow = true; this.beam.receiveShadow = true; state.scene.add(this.beam); @@ -46,7 +46,7 @@ export class StageLights extends SceneFeature { // Fixture Mesh const fixture = new THREE.Mesh(fixtureGeo, fixtureMat); - fixture.position.set(x, 7.5, -14); // Match beam position + fixture.position.set(x, 8.5, -14); // Match beam position state.scene.add(fixture); // Lens Mesh diff --git a/party-stage/textures/guest1.png b/party-stage/textures/guest1.png index acf5e68..02eef91 100644 Binary files a/party-stage/textures/guest1.png and b/party-stage/textures/guest1.png differ diff --git a/party-stage/textures/guest2.png b/party-stage/textures/guest2.png index a1b0680..ba06d41 100644 Binary files a/party-stage/textures/guest2.png and b/party-stage/textures/guest2.png differ diff --git a/party-stage/textures/guest3.png b/party-stage/textures/guest3.png index 5d681e1..e5a0464 100644 Binary files a/party-stage/textures/guest3.png and b/party-stage/textures/guest3.png differ diff --git a/party-stage/textures/guest4.png b/party-stage/textures/guest4.png index ded172e..cecd39f 100644 Binary files a/party-stage/textures/guest4.png and b/party-stage/textures/guest4.png differ