72 lines
2.1 KiB
JavaScript
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
|
|
}
|