Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation


__/\\\_______________________________________________________________________________________________________ _\/\\\_______________________________________________________________________________________________________ _\/\\\________________________________/\\\__________/\\\_______/\\\__________________________________________ _\/\\\______________/\\\\\\\\\_____/\\\\\\\\\\\__/\\\\\\\\\\\_\///______/\\\\\\\\__/\\\____/\\\__/\\\\\\\\\\_ _\/\\\_____________\////////\\\___\////\\\////__\////\\\////___/\\\___/\\\//////__\/\\\___\/\\\_\/\\\//////__ _\/\\\_______________/\\\\\\\\\\_____\/\\\_________\/\\\______\/\\\__/\\\_________\/\\\___\/\\\_\/\\\\\\\\\\_ _\/\\\______________/\\\/////\\\_____\/\\\_/\\_____\/\\\_/\\__\/\\\_\//\\\________\/\\\___\/\\\_\////////\\\_ _\/\\\\\\\\\\\\\\\_\//\\\\\\\\/\\____\//\\\\\______\//\\\\\___\/\\\__\///\\\\\\\\_\//\\\\\\\\\___/\\\\\\\\\\_ _\///////////////___\////////\//______\/////________\/////____\///_____\////////___\/////////___\//////////__

High Level Overview

Latticus is a sophisticated multiplayer 2D game built with React, TypeScript, and PIXI.js for rendering. The project implements a modern ECS (Entity Component System) architecture with a custom chunk-based world system for infinite terrain generation. The game features real-time multiplayer capabilities using WebSockets, with server-authoritative chunk generation and entity synchronization.

The application utilizes a modular architecture with clear separation between client and server logic. The client handles rendering, user interaction, and visual effects through PIXI.js, while the server manages world state, chunk generation using Perlin noise, and multiplayer synchronization. The system is designed for scalability with worker pools, efficient chunk loading/unloading, and optimized entity management.

How to Run the Application

Prerequisites

  • Bun: Install from bun.sh
  • Node.js: v18+ (for compatibility)

Development Setup

  1. Install Dependencies:

    bun install
  2. Start Full Development Environment (Recommended):

    bun run dev:full

    This runs both the Bun server with auto-restart and client concurrently.

  3. Individual Services:

    # Start Bun server with auto-restart (recommended)
    bun run server
    # Start legacy Node.js server (fallback)
    bun run server:legacy
    # Start only the client
    bun run dev
  4. Production Build:

    bun run build
    bun run preview

Development URLs

🔄 Auto-Restart Feature

The server now automatically restarts when you save changes to:

  • src/server/**/*.ts - Server-side code
  • src/shared/**/*.ts - Shared constants and types

No more manual server restarts during development! 🎉

Additional Documentation

  • BUN_SERVER_MIGRATION.md - NEW: Bun server migration details and auto-restart setup
  • SERVER_CHUNK_SYSTEM.md - Detailed chunk generation system documentation
  • agent-summaries/ - Historical code change documents (performed with agents instead of manual changes)
  • instructions.md - Project coding standards and conventions

📚 System Documentation

This section provides comprehensive documentation for all major systems in the Haven game engine. Each document includes architecture details, usage examples, and implementation guides.

Core Systems

Unified entity creation with consistent APIs across all entity types. Handles both local (client-only) and networked (server-synchronized) entity creation.

Key Features:

  • Consistent factory API for all entities
  • Server-first networking with automatic synchronization
  • Type-safe entity creation with full TypeScript support
  • Easy conversion between local and networked entities

Usage:

// Create networked entitiesconsttree=awaitWorldObjects.spruceTree.createNetworked(game,{x: 100,y: 200});// Create local entitiesconstpreview=WorldObjects.assembler.createLocal(game,{x: 300,y: 400});// Convert local to networkedconstconverted=awaitWorldObjects.spruceTree.createNetworkedFromLocal(preview,game);

Composition-based architecture that allows entities to gain functionality through modular traits. Replaces inheritance with flexible composition patterns.

Key Features:

  • Modular trait system (Transform, Container, Network, Placeable, Ghostable)
  • Type-safe trait access with static type guards
  • Automatic trait synchronization across the network
  • Easy trait communication and dependencies

Usage:

// Add traits to entitiesentity.addTrait('position',newTransformTrait(entity,game,x,y,'global'));entity.addTrait('container',newContainerTrait(entity,transformTrait));// Access traits safelyif(TransformTrait.is(entity)){constposition=entity.getTrait('position').position.position;}

Server-authoritative multiplayer with automatic synchronization, entity management, and real-time communication between clients and server.

Key Features:

  • Server-first architecture with authoritative game state
  • Automatic trait synchronization with configurable frequency
  • Promise-based async requests with timeout handling
  • Real-time WebSocket communication with message routing

Usage:

// Async entity creation with server validationconstentity=awaitWorldObjects.spruceTree.createNetworked(game,{ x, y });// Automatic trait synchronizationentity.getTrait('position').setPosition(newX,newY);// ↑ Automatically syncs to server and other clients

Procedurally generated infinite world divided into manageable chunks. Handles terrain generation, dynamic loading, and performance optimization.

Key Features:

  • Infinite procedural world generation using Perlin noise
  • Dynamic chunk loading/unloading based on player proximity
  • Entity-chunk decoupling for simplified management
  • Biome system with different terrain types and spawning rules

Usage:

// Automatic chunk loading around playerworldManager.setPlayerPosition(playerX,playerY);// Entities positioned independently of chunksconstentity=WorldObjects.spruceTree.createLocal(game,{x: 1500,y: 800});// ↑ Automatically positioned correctly regardless of chunk boundaries

Development Guides

Each documentation file includes:

  • Architecture Overview: High-level system design and concepts
  • Implementation Details: Code examples and API references
  • Usage Patterns: Common use cases and best practices
  • Integration Guide: How systems work together
  • Performance Considerations: Optimization tips and patterns
  • Error Handling: Common issues and solutions

Getting Started

  1. New to the codebase? Start with Entity Factory System for entity creation
  2. Want to understand entities? Read Entity Trait System for composition patterns
  3. Building multiplayer features? Check Multiplayer Networking for sync patterns
  4. Working on world generation? See World and Chunk System for terrain systems

Contributing

When adding new systems or modifying existing ones, please:

  • Update the relevant documentation files
  • Include code examples in your documentation
  • Follow the established architectural patterns
  • Add your system to this README's documentation index

Files Modified (Key Components)

Core Application

  • src/App.tsx - Main React application entry point
  • src/main.tsx - Vite application bootstrap
  • package.json - Dependencies and build scripts

Server Architecture

  • src/server/bunServer.ts - Bun-native multiplayer server with WebSocket handling
  • src/server/chunkdb.ts - In-memory chunk database system
  • src/server/chunkGenerator.ts - Server-side chunk generation with Perlin noise
  • src/server/types.ts - Server-specific type definitions

Client Systems

  • src/systems/chunkManager/ - Client-side chunk loading and management
  • src/utilities/multiplayer/manager.ts - Multiplayer client coordination
  • src/utilities/game/game.ts - Core game state management
  • src/utilities/player/index.ts - Player entity and controls

Entity System

  • src/entities/base.ts - Base entity class
  • src/entities/interfaces.ts - Entity system interfaces
  • src/entities/traits/ - Reusable entity behaviors (container, placeable, rotatable)
  • src/entities/assembler/ - Factory building entity implementation

Rendering & UI

  • src/components/pixi/index.tsx - PIXI.js React context provider
  • src/components/hotbar/ - Player inventory hotbar UI
  • src/components/infographic/ - Debug/info display component

Utilities & Helpers

  • src/utilities/eventEmitter/ - Custom event system
  • src/utilities/logger/ - Centralized logging system
  • src/workers/ - Web worker pool for background processing

System Architecture Diagram

┌─────────────────────────────────────────────────────────────────────────────┐
│ CLIENT ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ React App │ │ PIXI.js │ │ Multiplayer Client │ │
│ │ ┌───────────┐ │ │ ┌───────────┐ │ │ ┌───────────────────┐ │ │
│ │ │ Hotbar │ │ │ │ Renderer │ │ │ │ WebSocket Client │ │ │
│ │ │ Component │ │◄──►│ │ │ │◄──►│ │ │ │ │
│ │ └───────────┘ │ │ │ Sprites │ │ │ │ Event Handlers │ │ │
│ │ ┌───────────┐ │ │ │ Chunks │ │ │ │ │ │ │
│ │ │Infographic│ │ │ │ Entities │ │ │ │ Entity Sync │ │ │
│ │ │ Component │ │ │ └───────────┘ │ │ └───────────────────┘ │ │
│ │ └───────────┘ │ └─────────────────┘ └─────────────────────────┘ │
│ └─────────────────┘ │ │ │
│ │ │ │ │
│ └──────────────────────┼─────────────────────────┘ │
│ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ GAME SYSTEMS LAYER │ │
│ │ ┌───────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Chunk Manager │ │Entity System│ │ Player │ │ Event System│ │ │
│ │ │ │ │ │ │ Controls │ │ │ │ │
│ │ │ • Loading │ │ • ECS Base │ │ │ │ • Custom │ │ │
│ │ │ • Unloading │ │ • Traits │ │ • Movement │ │ • Emitters │ │ │
│ │ │ • Registry │ │ • Factory │ │ • Camera │ │ • Listeners │ │ │
│ │ └───────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘
│
┌───────┴───────┐
│ WebSocket │
│ Connection │
└───────┬───────┘
│
┌─────────────────────────────────────────────────────────────────────────────┐
│ SERVER ARCHITECTURE │
├─────────────────────────────────────────────────────────────────────────────┤
│ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────────────┐ │
│ │ WebSocket Server│ │ Chunk System │ │ Entity Manager │ │
│ │ │ │ │ │ │ │
│ │ • Player Mgmt │◄──►│ • Generator │◄──►│ • Placement/Removal │ │
│ │ • Connection │ │ • Database │ │ • State Sync │ │
│ │ • Broadcasting │ │ • Perlin Noise │ │ • Validation │ │
│ │ • Event Router │ │ • 5x5 Radius │ │ • Persistence │ │
│ └─────────────────┘ └─────────────────┘ └─────────────────────────┘ │
│ │ │ │ │
│ ┌─────────────────────────────────────────────────────────────────────────┐ │
│ │ SERVER STORAGE │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ │ │
│ │ │ Player Map │ │ Chunk Cache │ │ Entity Database │ │ │
│ │ │ │ │ │ │ │ │ │
│ │ │ • Positions │ │ • In-Memory │ │ • Global State │ │ │
│ │ │ • WebSocket │ │ • 1024x1024 │ │ • Type Safety │ │ │
│ │ │ • Visibility│ │ • Generated │ │ • Relationships │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────────┘

Key Systems & Features

🌍 Chunk-Based World System

  • Infinite Terrain: Server generates chunks using Perlin noise algorithm
  • Efficient Loading: 5x5 chunk radius loaded around each player
  • Memory Management: Automatic chunk unloading when players move away
  • Database Persistence: In-memory chunk caching with generation timestamps

🎮 Entity Component System (ECS)

  • Base Entity Class: Core entity functionality with lifecycle management
  • Trait System: Modular behaviors (Placeable, Rotatable, Container, Ghostable)
  • Factory Pattern: Assembler entities with complex manufacturing logic
  • Type Safety: Comprehensive TypeScript interfaces and namespaces

👥 Multiplayer Architecture

  • Real-time Sync: WebSocket-based player and entity synchronization
  • Event-Driven: Structured event system for game state changes
  • Server Authority: Server validates all entity placements and movements
  • Scalable Design: Modular event handlers and manager classes

🎨 Rendering Pipeline

  • PIXI.js Integration: Hardware-accelerated 2D rendering
  • Sprite Management: Efficient sprite sheet loading and caching
  • React Context: Clean integration between React UI and PIXI rendering
  • Performance Optimized: Worker pools for background processing

🛠️ Development Tools

  • Modern Toolchain: Vite build system with TypeScript and React
  • Bun Runtime: Fast JavaScript runtime for server and package management
  • Linting & Formatting: ESLint configuration with React hooks support
  • Debug Systems: Comprehensive logging and infographic display components

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages