refactor: Spread game code into modular files for better maintainability
This commit reorganizes the game's source code into multiple files within a `js/` directory, creating a more modular and maintainable structure. The changes include:
- Created separate files for different game components:
- `constants.js`: Game constants and element types
- `world.js`: World management functions
- `terrain.js`: Terrain generation logic
- `physics.js`: Physics simulation
- `render.js`: Rendering functions
- `input.js`: Input handling
- `main.js`: Main game initialization and loop
- Element-specific files in `js/elements/`:
- `basic.js`: Sand, water, dirt behaviors
- `plants.js`: Grass, seeds, flowers
- `trees.js`: Tree growth and leaf generation
- `fire.js`: Fire and lava behaviors
- Updated `index.html` to load modules in the correct order
- Removed the monolithic `script.js`
The modular approach improves code readability, makes future extensions easier, and separates concerns more effectively.
This commit is contained in:
53
js/physics.js
Normal file
53
js/physics.js
Normal file
@@ -0,0 +1,53 @@
|
||||
// Physics simulation functions
|
||||
function updatePhysics() {
|
||||
// Get visible chunks
|
||||
const visibleChunks = getVisibleChunks();
|
||||
|
||||
// Increment fire update counter
|
||||
fireUpdateCounter++;
|
||||
|
||||
// Process each visible chunk
|
||||
for (const { chunkX, chunkY } of visibleChunks) {
|
||||
const chunk = getOrCreateChunk(chunkX, chunkY);
|
||||
|
||||
// Process from bottom to top, right to left for correct gravity simulation
|
||||
for (let y = CHUNK_SIZE - 1; y >= 0; y--) {
|
||||
// Alternate direction each row for more natural flow
|
||||
const startX = y % 2 === 0 ? 0 : CHUNK_SIZE - 1;
|
||||
const endX = y % 2 === 0 ? CHUNK_SIZE : -1;
|
||||
const step = y % 2 === 0 ? 1 : -1;
|
||||
|
||||
for (let x = startX; x !== endX; x += step) {
|
||||
const index = y * CHUNK_SIZE + x;
|
||||
const type = chunk[index];
|
||||
|
||||
if (type === EMPTY || type === STONE || type === WOOD || type === LEAF) continue;
|
||||
|
||||
const worldX = chunkX * CHUNK_SIZE + x;
|
||||
const worldY = chunkY * CHUNK_SIZE + y;
|
||||
|
||||
if (type === SAND) {
|
||||
updateSand(worldX, worldY);
|
||||
} else if (type === WATER) {
|
||||
updateWater(worldX, worldY);
|
||||
} else if (type === DIRT) {
|
||||
updateDirt(worldX, worldY);
|
||||
} else if (type === GRASS) {
|
||||
updateGrass(worldX, worldY);
|
||||
} else if (type === SEED) {
|
||||
updateSeed(worldX, worldY);
|
||||
} else if (type === GRASS_BLADE) {
|
||||
updateGrassBlade(worldX, worldY);
|
||||
} else if (type === FLOWER) {
|
||||
updateFlower(worldX, worldY);
|
||||
} else if (type === TREE_SEED) {
|
||||
updateTreeSeed(worldX, worldY);
|
||||
} else if (type === FIRE) {
|
||||
updateFire(worldX, worldY);
|
||||
} else if (type === LAVA) {
|
||||
updateLava(worldX, worldY);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user