Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions PROJECT_DESCRIPTION.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ npm run build

| Need | Algorithm(s) | Module | Example |
| ---- | ------------ | ------ | ------- |
| Grid pathfinding | `astar`, `dijkstra`, `manhattanDistance`, `gridFromString` | `pathfinding/astar.ts`, `pathfinding/dijkstra.ts` | `examples/astar.ts` |
| Procedural textures & terrain | `perlin`, `perlin3D`, `simplex2D`, `simplex3D`, `worley`, `worleySample` | `procedural/*.ts` | `examples/simplex.ts`, `examples/worley.ts` |
| Grid pathfinding | `astar`, `dijkstra`, `jumpPointSearch`, `manhattanDistance`, `gridFromString` | `pathfinding/astar.ts`, `pathfinding/dijkstra.ts`, `pathfinding/jumpPointSearch.ts` | `examples/astar.ts` |
| Procedural textures & terrain | `perlin`, `perlin3D`, `simplex2D`, `simplex3D`, `worley`, `worleySample`, `waveFunctionCollapse` | `procedural/*.ts` | `examples/simplex.ts`, `examples/worley.ts`, `examples/waveFunctionCollapse.ts` |
| Spatial queries & collision | `Quadtree`, `aabbCollision`, `aabbIntersection`, `satCollision`, `circleRayIntersection`, `sweptAABB` | `spatial/*.ts` | `examples/sat.ts` |
| Web performance & UI throttling | `debounce`, `throttle`, `LRUCache`, `memoize`, `deduplicateRequest`, `clearRequestDedup`, `calculateVirtualRange` | `util/*.ts` | `examples/requestDedup.ts`, `examples/virtualScroll.ts` |
| Text & search | `fuzzySearch`, `fuzzyScore`, `Trie`, `binarySearch`, `levenshteinDistance` | `search/*.ts` | `tests/search.test.ts` |
Expand Down Expand Up @@ -87,8 +87,8 @@ Consistency between runtime code, documentation, and TypeScript declarations kee

## ✅ Included Implementations (v0.1.0)

- **Pathfinding:** A*, Dijkstra, Manhattan heuristic, grid string parser.
- **Procedural:** 2D Perlin grid generator, 3D Perlin sampler.
- **Pathfinding:** A*, Dijkstra, Jump Point Search, Manhattan heuristic, grid string parser.
- **Procedural:** 2D/3D Perlin, Worley noise, Wave Function Collapse tile synthesis.
- **Spatial:** Quadtree, AABB helpers, SAT convex polygon collision.
- **Performance utilities:** Debounce, throttle, LRU cache, memoize, request deduplication, virtual scrolling.
- **Search:** Fuzzy search + scoring, Trie-based autocomplete, binary search, Levenshtein distance.
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,8 @@ CDN usage:

| Goal | Algorithms | Import From | Example |
| ---- | ---------- | ----------- | ------- |
| Pathfinding & navigation | `astar`, `dijkstra`, `manhattanDistance`, `gridFromString` | `pathfinding/astar.ts`, `pathfinding/dijkstra.ts` | `examples/astar.ts` |
| Procedural generation | `perlin`, `perlin3D`, `simplex2D`, `simplex3D`, `worley`, `worleySample` | `procedural/*.ts` | `examples/simplex.ts`, `examples/worley.ts` |
| Pathfinding & navigation | `astar`, `dijkstra`, `jumpPointSearch`, `manhattanDistance`, `gridFromString` | `pathfinding/astar.ts`, `pathfinding/dijkstra.ts`, `pathfinding/jumpPointSearch.ts` | `examples/astar.ts` |
| Procedural generation | `perlin`, `perlin3D`, `simplex2D`, `simplex3D`, `worley`, `worleySample`, `waveFunctionCollapse` | `procedural/*.ts` | `examples/simplex.ts`, `examples/worley.ts`, `examples/waveFunctionCollapse.ts` |
| Spatial queries & collision | `Quadtree`, `aabbCollision`, `aabbIntersection`, `satCollision`, `circleRayIntersection`, `sweptAABB` | `spatial/*.ts` | `examples/sat.ts` |
| AI behaviours & crowds | `seek`, `flee`, `arrive`, `pursue`, `wander`, `updateBoids`, `BehaviorTree`, `rvoStep` | `ai/steering.ts`, `ai/boids.ts`, `ai/behaviorTree.ts`, `ai/rvo.ts` | `examples/steering.ts`, `examples/boids.ts`, `examples/rvo.ts` |
| Web performance & UI | `debounce`, `throttle`, `LRUCache`, `memoize`, `deduplicateRequest`, `clearRequestDedup`, `calculateVirtualRange` | `util/*.ts` | `examples/requestDedup.ts`, `examples/virtualScroll.ts` |
Expand Down
107 changes: 80 additions & 27 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
- [x] Document new modules in `docs/index.d.ts` and examples folder
- [x] Achieve >80% coverage across new modules
- [ ] Implement reciprocal velocity obstacles (RVO) crowd steering with tests and example
- [ ] Add Jump Point Search optimisation for uniform grids
- [x] Add Jump Point Search optimisation for uniform grids
- [ ] Implement flow-field pathfinding for multi-unit navigation
- [ ] Provide navigation mesh (navmesh) helper for irregular terrain

Expand All @@ -30,32 +30,85 @@
- [x] Create benchmarking scripts to compare algorithm variants
- [x] Expand CI to include coverage gating and bundle size checks

## Milestone 0.4.0 – Procedural Worlds & Game Systems (Planned)
- [ ] Implement Wave Function Collapse tile solver with options + example
- [ ] Add dungeon generation suite (BSP subdivision, rooms & corridors variants)
- [ ] Provide L-system generator for foliage/organic structures
- [ ] Ship diamond-square terrain height map generator
- [ ] Offer maze algorithms pack (Kruskal, Wilson, Aldous–Broder, Recursive Division)
- [ ] Add cellular automata cave/organic generator utilities
- [ ] Deliver fixed-timestep game loop utility with interpolation helpers
- [ ] Provide object pool helper for rapid reuse of entities
- [ ] Add weighted random selector (aliasing method) utilities
- [ ] Implement Bresenham line / raster traversal helpers
- [ ] Implement 2D camera system (smooth follow, screen shake, dead zones)
- [ ] Add particle system with configurable emitters
- [ ] Provide sprite animation controller (frame timing, looping, events)
- [ ] Implement platformer physics helper (gravity, coyote time, jump buffering)
- [ ] Ship tile map renderer helpers (chunking, layering)
- [ ] Add shadowcasting field-of-view (FOV) utilities
- [ ] Implement inventory system primitives (stacking, filtering, persistence hooks)
- [ ] Add combat resolution helpers (cooldowns, damage formulas, status effects)
- [ ] Provide quest/dialog state machine utilities
- [ ] Implement 2D lighting helpers (light falloff, blending stubs)
- [ ] Add wave spawner utilities for encounter pacing
- [ ] Provide sound manager stubs (channel limiting, priority)
- [ ] Implement input manager abstraction (key remapping, axis curves)
- [ ] Add save/load serialization helpers (slots, integrity checks)
- [ ] Provide screen transition utilities (fades, wipes, letterboxing)
- ## Milestone 0.4.0 – Procedural Worlds & Game Systems (Planned)
- Procedural generators:
- [x] Wave Function Collapse tile solver with options + example
- [ ] Cellular automata cave/organic generator utilities
- [ ] Poisson disk sampling for even point distribution
- [ ] Voronoi diagram helpers for biome/territory generation
- [ ] Diamond-square terrain height map generator
- [ ] L-system generator for foliage and organic structures
- [ ] Dungeon generation suite (BSP subdivision, rooms & corridors variants)
- [ ] Maze algorithms pack (Recursive backtracking, Prim's, Kruskal's, Wilson's, Aldous–Broder, Recursive Division)
- Gameplay systems & utilities:
- [ ] Fixed-timestep game loop utility with interpolation helpers
- [ ] Delta-time manager for frame-independent timing
- [ ] Object pool helper for reusable entities
- [ ] Weighted random selector (alias method)
- [ ] Fisher–Yates shuffle implementation
- [ ] Bresenham line / raster traversal helpers
- Real-time systems:
- [ ] 2D camera system (smooth follow, dead zones, screen shake)
- [ ] Particle system with configurable emitters
- [ ] Sprite animation controller (frame timing, events)
- [ ] Tween/lerp utility for smooth interpolation
- [ ] Platformer physics helper (gravity, coyote time, jump buffering)
- [ ] Top-down movement helper (8-direction)
- [ ] Tile map renderer helpers (chunking, layering, collision tags)
- [ ] Shadowcasting field-of-view utilities and minimap helpers
- **Systems for gameplay loops**
- [ ] Inventory system primitives (stacking, filtering, persistence hooks)
- [ ] Combat resolution helpers (cooldowns, damage formulas, status effects)
- [ ] Quest/dialog state machine utilities
- [ ] 2D lighting helpers (falloff, blending stubs)
- [ ] Wave spawner utilities for encounter pacing
- [ ] Sound manager stubs (channel limiting, priority)
- [ ] Input manager abstraction (keyboard/mouse/pad remapping)
- [ ] Save/load serialization helpers (slots, integrity checks)
- [ ] Screen transition utilities (fades, wipes, letterboxing)

## Milestone 0.5.0 – Algorithm Vault & Data Structures (Planned)
- **AI & behaviour expansions**
- [ ] Finite state machine (FSM) toolkit
- [ ] Genetic algorithm utilities
- [ ] Influence map computation helpers
- **Search & string algorithms**
- [ ] Knuth–Morris–Pratt (KMP) substring search
- [ ] Rabin–Karp multiple pattern matching
- [ ] Boyer–Moore fast substring search
- [ ] Suffix array construction utilities
- [ ] Longest common subsequence (LCS) enhancements and diff helpers
- **Data pipelines & utilities**
- [ ] Flatten/unflatten helpers for nested structures
- [ ] Pagination utilities for client-side paging
- [ ] Advanced diff tooling (tree diff, selective patches)
- **Visual & simulation tools**
- [ ] Color manipulation helpers (RGB/HSL conversion, blending)
- [ ] Force-directed graph layout
- [ ] Marching squares contour extraction
- [ ] Marching cubes isosurface generation
- **Graph algorithms**
- [ ] Minimum spanning tree (Kruskal)
- [ ] Strongly connected components (Tarjan/Kosaraju)
- [ ] Maximum flow (Ford–Fulkerson / Edmonds–Karp)
- **Spatial & collision expansion**
- [ ] Octree partitioning for 3D space
- [ ] Circle collision helpers
- [ ] Raycasting utilities
- [ ] Bounding volume hierarchy (BVH) builder
- **Data structures**
- [ ] Binary heap priority queue
- [ ] Disjoint set union (union-find)
- [ ] Bloom filter probabilistic membership
- [ ] Skip list sorted structure
- [ ] Segment tree range query helper
- **Compression & encoding**
- [ ] Run-length encoding (RLE)
- [ ] Huffman coding utilities
- [ ] LZ77 dictionary compression helper
- [ ] Base64 encode/decode utilities
- **Geometric & numeric utilities**
- [ ] Closest pair of points solver for geometry toolkit

## Milestone 1.0.0 – Production Readiness
- [ ] Publish to npm with semver automation and changelog management
Expand Down
36 changes: 36 additions & 0 deletions docs/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,21 @@ export interface DijkstraResult {
}
export function dijkstra(options: DijkstraOptions): DijkstraResult | null;

/**
* Jump Point Search optimisation for uniform-cost grids.
* Use for: large grid navigation, RTS unit movement, pathfinding on open terrain.
* Performance: O(b^d) best-case with heavy pruning.
* Import: pathfinding/jumpPointSearch.ts
*/
export interface JumpPointSearchOptions {
grid: number[][];
start: Point;
goal: Point;
allowDiagonal?: boolean;
heuristic?: (a: Point, b: Point) => number;
}
export function jumpPointSearch(options: JumpPointSearchOptions): Point[] | null;

// ============================================================================
// 🌍 PROCEDURAL GENERATION
// ============================================================================
Expand Down Expand Up @@ -99,6 +114,27 @@ export function worleySample(
metric?: 'euclidean' | 'manhattan'
): number;

/**
* Wave Function Collapse synthesiser for constraint-based tiles.
* Use for: modular levels, decorative tiling, texture assembly.
* Performance: O(width × height × log tiles) average with retries.
* Import: procedural/waveFunctionCollapse.ts
*/
export interface WfcTile {
id: string;
weight?: number;
rules: Partial<Record<'top' | 'right' | 'bottom' | 'left', string[]>>;
}
export interface WaveFunctionCollapseOptions {
width: number;
height: number;
tiles: ReadonlyArray<WfcTile>;
seed?: number;
maxRetries?: number;
}
export type WaveFunctionCollapseResult = string[][];
export function waveFunctionCollapse(options: WaveFunctionCollapseOptions): WaveFunctionCollapseResult;

/**
* Simplex noise generator for smooth gradients without directional artifacts.
* Use for: large terrain synthesis, animated textures, volumetric noise.
Expand Down
153 changes: 153 additions & 0 deletions docs/list.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
🎮 PATHFINDING & NAVIGATION

A Pathfinding* - Grid/graph shortest path with heuristic
Dijkstra's Algorithm - Shortest path without heuristic
Jump Point Search - A* optimization for uniform grids
Flow Field - Multi-unit pathfinding to same goal
Navigation Mesh - 3D/irregular terrain pathfinding

🌍 PROCEDURAL GENERATION

Perlin Noise - Smooth terrain and textures (2D/3D)
Simplex Noise - Improved Perlin alternative
Wave Function Collapse - Constraint-based tile generation
Cellular Automata - Cave and organic structure generation
Poisson Disk Sampling - Even point distribution
Voronoi Diagrams - Territory and region generation
Maze Generation (Recursive Backtrack) - Perfect mazes
Maze Generation (Prim's) - Spanning tree mazes
Maze Generation (Kruskal's) - Random spanning tree
Maze Generation (Wilson's) - Uniform spanning tree
Dungeon Generation (BSP) - Binary space partitioning dungeons
Dungeon Generation (Rooms & Corridors) - Connected room dungeons
L-System - Organic structures, trees, plants, fractals
Diamond-Square Algorithm - Height map terrain generation

🎯 SPATIAL & COLLISION

Quadtree - 2D spatial partitioning
Octree - 3D spatial partitioning
AABB Collision - Axis-aligned bounding box detection
SAT Collision - Separating Axis Theorem (polygon collision)
Circle Collision - Round object collision detection
Raycasting - Line of sight and shooting
BVH (Bounding Volume Hierarchy) - Complex 3D collision

🤖 AI & BEHAVIOR

Flocking/Boids - Swarm and group movement
Steering Behaviors (Seek) - Move toward target
Steering Behaviors (Flee) - Move away from target
Steering Behaviors (Pursue) - Predict and intercept
Steering Behaviors (Wander) - Random exploration
Steering Behaviors (Arrive) - Slow down at target
Finite State Machine - AI state management
Behavior Trees - Complex AI decision making
Genetic Algorithm - Evolution and optimization
Influence Maps - Tactical AI positioning

🎲 GAME UTILITIES

Weighted Random Selection - Probability-based selection
Fisher-Yates Shuffle - Unbiased array randomization
Bresenham's Line - Grid line drawing
Marching Squares - Contour generation from scalar fields
Object Pool - Memory optimization for reusable objects

🎮 GAME SYSTEMS

Game Loop - Fixed timestep game loop
Delta Time Manager - Frame-independent timing
Camera 2D - Smooth follow camera with shake
Particle System - Explosions, fire, smoke, effects
Sprite Animation - Frame-based animation controller
Tween/Lerp - Smooth value interpolation
Platformer Physics - Jump, gravity, ground detection
Top-Down Movement - 8-directional movement
Tile Map - Rendering and collision for tile games
Field of View (FOV) - Shadowcasting visibility
Minimap - Radar and overview map
Inventory System - Item management
Combat System - Damage calculation and status effects
Quest/Dialog System - Story progression and missions
Save/Load System - Game state persistence
2D Lighting System - Dynamic lights and shadows
Wave Spawner - Enemy wave management
Sound Manager - Audio playback with pooling
Input Manager - Keyboard, mouse, gamepad handling
Screen Transitions - Fade, slide effects

⚡ WEB PERFORMANCE

Debounce - Delay function execution until idle
Throttle - Rate-limit function execution
LRU Cache - Least Recently Used cache
Memoization - Cache function results
Virtual Scrolling - Render only visible list items
Request Deduplication - Prevent duplicate API calls

🔍 SEARCH & MATCHING

Fuzzy Search - Approximate string matching
Trie (Prefix Tree) - Fast prefix search
KMP String Search - Efficient substring search
Levenshtein Distance - String edit distance
Binary Search - Sorted array search

📊 DATA PROCESSING

Diff Algorithm - Compare arrays/objects for changes
Tree Traversal (BFS) - Breadth-first traversal
Tree Traversal (DFS) - Depth-first traversal
Flatten - Convert nested to flat structure
Unflatten - Convert flat to nested structure
Group By - Organize data by property
Deep Clone - Recursive object copying
Pagination - Client-side data paging

🎨 VISUAL & ANIMATION

Easing Functions - Animation curves (20+ types)
Bezier Curves (Quadratic) - Smooth curved paths
Bezier Curves (Cubic) - Complex curved paths
Color Manipulation - RGB/HSL conversion, mixing
Force-Directed Graph - Network visualization layout
Marching Cubes - 3D isosurface from voxels

📈 GRAPH ALGORITHMS

Breadth-First Search (BFS) - Level-order traversal
Depth-First Search (DFS) - Deep exploration
Topological Sort - Dependency resolution
Minimum Spanning Tree (Kruskal's) - Network design
Strongly Connected Components - Graph connectivity
Maximum Flow (Ford-Fulkerson) - Network flow

🔤 STRING ALGORITHMS

Rabin-Karp - Multiple pattern matching
Boyer-Moore - Fast single pattern search
Longest Common Subsequence - Diff algorithms
Suffix Array - Advanced pattern matching

🗂️ DATA STRUCTURES

Binary Heap - Priority queue implementation
Disjoint Set (Union-Find) - Connected components
Bloom Filter - Probabilistic membership testing
Skip List - Sorted data alternative to trees
Segment Tree - Range query operations

🗜️ COMPRESSION & ENCODING

Run-Length Encoding (RLE) - Simple compression
Huffman Coding - Optimal prefix compression
LZ77 - Dictionary compression
Base64 - Binary to text encoding

📐 GEOMETRIC ALGORITHMS

Convex Hull (Graham Scan) - Boundary point detection
Line Intersection - Check if lines cross
Point in Polygon - Containment testing
Closest Pair of Points - Find nearest points
27 changes: 27 additions & 0 deletions examples/waveFunctionCollapse.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { waveFunctionCollapse } from '../src/index.js';

const tiles = [
{
id: 'grass',
weight: 3,
rules: {
top: ['grass'],
right: ['grass', 'road'],
bottom: ['grass'],
left: ['grass', 'road'],
},
},
{
id: 'road',
weight: 1,
rules: {
top: ['grass', 'road'],
right: ['grass', 'road'],
bottom: ['grass', 'road'],
left: ['grass', 'road'],
},
},
];

const result = waveFunctionCollapse({ width: 5, height: 5, tiles, seed: 123 });
console.log(result.map((row) => row.join(' ')).join('\n'));
2 changes: 2 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
export { astar, manhattanDistance, gridFromString } from './pathfinding/astar.js';
export { dijkstra } from './pathfinding/dijkstra.js';
export { jumpPointSearch } from './pathfinding/jumpPointSearch.js';

export { perlin, perlin3D } from './procedural/perlin.js';
export { worley, worleySample } from './procedural/worley.js';
export { SimplexNoise, simplex2D, simplex3D } from './procedural/simplex.js';
export { waveFunctionCollapse } from './procedural/waveFunctionCollapse.js';

export { Quadtree } from './spatial/quadtree.js';
export { aabbCollision, aabbIntersection } from './spatial/aabb.js';
Expand Down
Loading