Medieval-Village-AI / simple_app.js
6rz6
Add Medieval Village AI Emulator
a32dc8b
// Simple Three.js test application
import * as THREE from 'https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js';
class SimpleVillageApp {
constructor() {
this.scene = null;
this.camera = null;
this.renderer = null;
this.controls = null;
this.init();
}
init() {
console.log('Initializing Simple Village App...');
this.initThreeJS();
this.createEnvironment();
this.animate();
console.log('Simple Village App initialized successfully');
}
initThreeJS() {
// Scene
this.scene = new THREE.Scene();
this.scene.background = new THREE.Color(0x87CEEB);
// Camera
this.camera = new THREE.PerspectiveCamera(
75,
window.innerWidth / window.innerHeight,
0.1,
1000
);
this.camera.position.set(20, 20, 20);
this.camera.lookAt(0, 0, 0);
// Renderer
this.renderer = new THREE.WebGLRenderer({ antialias: true });
this.renderer.setSize(window.innerWidth, window.innerHeight);
this.renderer.shadowMap.enabled = true;
const container = document.getElementById('container');
if (container) {
container.appendChild(this.renderer.domElement);
console.log('Renderer added to DOM');
}
// Lighting
const ambientLight = new THREE.AmbientLight(0x404040, 0.6);
this.scene.add(ambientLight);
const directionalLight = new THREE.DirectionalLight(0xffffff, 0.8);
directionalLight.position.set(10, 10, 5);
directionalLight.castShadow = true;
this.scene.add(directionalLight);
// Ground plane
const groundGeometry = new THREE.PlaneGeometry(100, 100);
const groundMaterial = new THREE.MeshLambertMaterial({
color: 0x228B22,
transparent: true,
opacity: 0.8
});
const ground = new THREE.Mesh(groundGeometry, groundMaterial);
ground.rotation.x = -Math.PI / 2;
ground.receiveShadow = true;
this.scene.add(ground);
// Grid helper
const gridHelper = new THREE.GridHelper(100, 100, 0x444444, 0x222222);
this.scene.add(gridHelper);
window.addEventListener('resize', () => this.onWindowResize());
}
createEnvironment() {
// Create some simple buildings
this.createBuilding(5, 0, 5, 0x8B4513);
this.createBuilding(-5, 0, -5, 0x696969);
this.createBuilding(0, 0, 0, 0xFFD700);
// Create some villagers
this.createVillager(0, 0, 0, 0xff0000);
this.createVillager(5, 0, 5, 0x00ff00);
this.createVillager(-3, 0, -3, 0x0000ff);
}
createBuilding(x, y, z, color) {
const geometry = new THREE.BoxGeometry(3, 3, 3);
const material = new THREE.MeshLambertMaterial({ color: color });
const mesh = new THREE.Mesh(geometry, material);
mesh.position.set(x, y + 1.5, z);
mesh.castShadow = true;
mesh.receiveShadow = true;
this.scene.add(mesh);
}
createVillager(x, y, z, color) {
const geometry = new THREE.SphereGeometry(0.5, 16, 16);
const material = new THREE.MeshLambertMaterial({ color: color });
const mesh = new THREE.Mesh(geometry, material);
mesh.position.set(x, y + 0.5, z);
mesh.castShadow = true;
mesh.receiveShadow = true;
this.scene.add(mesh);
}
onWindowResize() {
this.camera.aspect = window.innerWidth / window.innerHeight;
this.camera.updateProjectionMatrix();
this.renderer.setSize(window.innerWidth, window.innerHeight);
}
animate() {
requestAnimationFrame(() => this.animate());
// Simple rotation for testing
this.scene.rotation.y += 0.001;
this.renderer.render(this.scene, this.camera);
}
}
// Initialize the application when the page loads
document.addEventListener('DOMContentLoaded', () => {
new SimpleVillageApp();
});