aether-shards/.agent/rules/core/RULE.md

31 lines
1.3 KiB
Markdown

---
description: Standards for Three.js integration, VoxelGrid, and the Game Loop.
globs: src/core/*.js, src/grid/*.js**
---
# **Game Engine Standards**
## **The Game Loop**
- **Responsibility:** The GameLoop is the "God Object" responsible for tying systems together. It owns the Scene, Renderer, Grid, and Managers.
- **Phases:** The loop must respect the current phase: INIT, DEPLOYMENT, COMBAT, RESOLUTION.
- **Input Routing:** The loop routes raw inputs from InputManager to the appropriate system (e.g., MovementSystem vs SkillTargeting) based on the current Phase.
## **Voxel System**
1. **Separation of Concerns:**
- VoxelGrid.js: **Pure Data**. Stores IDs in Uint8Array. Handles physics queries (isSolid). No Three.js dependencies.
- VoxelManager.js: **Rendering**. Reads VoxelGrid and updates THREE.InstancedMesh. Handles materials and textures.
2. **Performance:**
- Never create individual THREE.Mesh objects for terrain. Use InstancedMesh.
- Hide "Air" voxels by scaling them to 0 rather than removing them from the InstanceMatrix (unless refactoring for chunking).
3. **Coordinates:**
- Use {x, y, z} objects for positions.
- Y is **Up**.
- Grid coordinates are integers.
## **Input**
- Use InputManager for all hardware interaction.
- Support Mouse, Keyboard, and Gamepad seamlessly.
- Raycasting should return integer Grid Coordinates.