Files
caravels-community-simulation/js/main.js
rafaeldpsilva adbbf6bf50 first commit
2025-12-10 12:32:12 +00:00

72 lines
2.1 KiB
JavaScript

// --- Global Variables ---
let scene, camera, renderer, controls;
// --- Initialization ---
function init() {
// Scene
scene = new THREE.Scene();
scene.background = new THREE.Color(0x9ee3f9);
// Renderer
renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.outputColorSpace = THREE.SRGBColorSpace;
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.outputEncoding = THREE.sRGBEncoding;
renderer.shadowMap.enabled = true;
//renderer.shadowMap.type = THREE.PCFSoftShadowMap;
document.body.appendChild(renderer.domElement);
initCameras(renderer);
initSun(scene);
initControls(scene, camera, renderer);
initMotions();
initPanels();
// Event Listeners
window.addEventListener('resize', onWindowResize, false);
// Load the city model
// Ground Plane (Unchanged)
const groundGeometry = new THREE.PlaneGeometry(100, 100);
const groundMaterial = new THREE.MeshLambertMaterial({ color: 0x91ca49, side: THREE.DoubleSide });
const ground = new THREE.Mesh(groundGeometry, groundMaterial);
const loader = new THREE.GLTFLoader();
loader.load('assets/models/ground.glb', function (gltf) {
const group = gltf.scene;
group.traverse(function (child) {
if (child.isMesh) {
child.castShadow = true;
child.receiveShadow = true;
child.userData.parentGroup = group;
}
});
buildings.push(group);
scene.add(group);
}, undefined, function (error) {s
console.error('Error loading model:', error);
});
initBuildings();
initTime();
}
// --- Animation Loop ---
function animate(timestamp) {
requestAnimationFrame(animate);
totalGameSecondsElapsed = animateUpdateTime(timestamp);
updateBuildings();
updatePanels();
updateSun(scene);
updateFps();
animateCamera()
controls.update();
renderer.render(scene, camera);
}
// --- Start ---
window.onload = function () {
init();
animate(0); // Start animation loop, pass initial timestamp 0
}