223 lines
7.9 KiB
Markdown
223 lines
7.9 KiB
Markdown
# McRogueFace - Development Roadmap
|
|
|
|
## Project Status
|
|
|
|
**Current State**: Active development - C++ game engine with Python scripting
|
|
**Latest Release**: Alpha 0.1
|
|
**Issue Tracking**: See [Gitea Issues](https://gamedev.ffwf.net/gitea/john/McRogueFace/issues) for current tasks and bugs
|
|
|
|
---
|
|
|
|
## 🎯 Strategic Vision
|
|
|
|
### Engine Philosophy
|
|
|
|
- **C++ First**: Performance-critical code stays in C++
|
|
- **Python Close Behind**: Rich scripting without frame-rate impact
|
|
- **Game-Ready**: Each improvement should benefit actual game development
|
|
|
|
### Architecture Goals
|
|
|
|
1. **Clean Inheritance**: Drawable → UI components, proper type preservation
|
|
2. **Collection Consistency**: Uniform iteration, indexing, and search patterns
|
|
3. **Resource Management**: RAII everywhere, proper lifecycle handling
|
|
4. **Multi-Platform**: Windows/Linux feature parity maintained
|
|
|
|
---
|
|
|
|
## 🏗️ Architecture Decisions
|
|
|
|
### Three-Layer Grid Architecture
|
|
Following successful roguelike patterns (Caves of Qud, Cogmind, DCSS):
|
|
|
|
1. **Visual Layer** (UIGridPoint) - Sprites, colors, animations
|
|
2. **World State Layer** (TCODMap) - Walkability, transparency, physics
|
|
3. **Entity Perspective Layer** (UIGridPointState) - Per-entity FOV, knowledge
|
|
|
|
### Performance Architecture
|
|
Critical for large maps (1000x1000):
|
|
|
|
- **Spatial Hashing** for entity queries (not quadtrees!)
|
|
- **Batch Operations** with context managers (10-100x speedup)
|
|
- **Memory Pooling** for entities and components
|
|
- **Dirty Flag System** to avoid unnecessary updates
|
|
- **Zero-Copy NumPy Integration** via buffer protocol
|
|
|
|
### Key Insight from Research
|
|
"Minimizing Python/C++ boundary crossings matters more than individual function complexity"
|
|
- Batch everything possible
|
|
- Use context managers for logical operations
|
|
- Expose arrays, not individual cells
|
|
- Profile and optimize hot paths only
|
|
|
|
---
|
|
|
|
## 🚀 Development Phases
|
|
|
|
For detailed task tracking and current priorities, see the [Gitea issue tracker](https://gamedev.ffwf.net/gitea/john/McRogueFace/issues).
|
|
|
|
### Phase 1: Foundation Stabilization ✅
|
|
**Status**: Complete
|
|
**Key Issues**: #7 (Safe Constructors), #71 (Base Class), #87 (Visibility), #88 (Opacity)
|
|
|
|
### Phase 2: Constructor & API Polish ✅
|
|
**Status**: Complete
|
|
**Key Features**: Pythonic API, tuple support, standardized defaults
|
|
|
|
### Phase 3: Entity Lifecycle Management ✅
|
|
**Status**: Complete
|
|
**Key Issues**: #30 (Entity.die()), #93 (Vector methods), #94 (Color helpers), #103 (Timer objects)
|
|
|
|
### Phase 4: Visibility & Performance ✅
|
|
**Status**: Complete
|
|
**Key Features**: AABB culling, name system, profiling tools
|
|
|
|
### Phase 5: Window/Scene Architecture ✅
|
|
**Status**: Complete
|
|
**Key Issues**: #34 (Window object), #61 (Scene object), #1 (Resize events), #105 (Scene transitions)
|
|
|
|
### Phase 6: Rendering Revolution ✅
|
|
**Status**: Complete
|
|
**Key Issues**: #50 (Grid backgrounds), #6 (RenderTexture), #8 (Viewport rendering)
|
|
|
|
### Phase 7: Documentation & Distribution
|
|
**Status**: In Progress
|
|
**Key Issues**: #85 (Docstrings), #86 (Parameter docs), #108 (Type stubs), #97 (API docs)
|
|
|
|
See [current open issues](https://gamedev.ffwf.net/gitea/john/McRogueFace/issues?state=open) for active work.
|
|
|
|
---
|
|
|
|
## 🔮 Future Vision: Pure Python Extension Architecture
|
|
|
|
### Concept: McRogueFace as a Traditional Python Package
|
|
**Status**: Long-term vision
|
|
**Complexity**: Major architectural overhaul
|
|
|
|
Instead of being a C++ application that embeds Python, McRogueFace could be redesigned as a pure Python extension module that can be installed via `pip install mcrogueface`.
|
|
|
|
### Technical Approach
|
|
|
|
1. **Separate Core Engine from Python Embedding**
|
|
- Extract SFML rendering, audio, and input into C++ extension modules
|
|
- Remove embedded CPython interpreter
|
|
- Use Python's C API to expose functionality
|
|
|
|
2. **Module Structure**
|
|
```
|
|
mcrfpy/
|
|
├── __init__.py # Pure Python coordinator
|
|
├── _core.so # C++ rendering/game loop extension
|
|
├── _sfml.so # SFML bindings
|
|
├── _audio.so # Audio system bindings
|
|
└── engine.py # Python game engine logic
|
|
```
|
|
|
|
3. **Inverted Control Flow**
|
|
- Python drives the main loop instead of C++
|
|
- C++ extensions handle performance-critical operations
|
|
- Python manages game logic, scenes, and entity systems
|
|
|
|
### Benefits
|
|
|
|
- **Standard Python Packaging**: `pip install mcrogueface`
|
|
- **Virtual Environment Support**: Works with venv, conda, poetry
|
|
- **Better IDE Integration**: Standard Python development workflow
|
|
- **Easier Testing**: Use pytest, standard Python testing tools
|
|
- **Cross-Python Compatibility**: Support multiple Python versions
|
|
- **Modular Architecture**: Users can import only what they need
|
|
|
|
### Challenges
|
|
|
|
- **Major Refactoring**: Complete restructure of codebase
|
|
- **Performance Considerations**: Python-driven main loop overhead
|
|
- **Build Complexity**: Multiple extension modules to compile
|
|
- **Platform Support**: Need wheels for many platform/Python combinations
|
|
- **API Stability**: Would need careful design to maintain compatibility
|
|
|
|
### Example Usage (Future Vision)
|
|
|
|
```python
|
|
import mcrfpy
|
|
from mcrfpy import Scene, Frame, Sprite, Grid
|
|
|
|
# Create game directly in Python
|
|
game = mcrfpy.Game(width=1024, height=768)
|
|
|
|
# Define scenes using Python classes
|
|
class MainMenu(Scene):
|
|
def on_enter(self):
|
|
self.ui.append(Frame(100, 100, 200, 50))
|
|
self.ui.append(Sprite("logo.png", x=400, y=100))
|
|
|
|
def on_keypress(self, key, pressed):
|
|
if key == "ENTER" and pressed:
|
|
self.game.set_scene("game")
|
|
|
|
# Run the game
|
|
game.add_scene("menu", MainMenu())
|
|
game.run()
|
|
```
|
|
|
|
This architecture would make McRogueFace a first-class Python citizen, following standard Python packaging conventions while maintaining high performance through C++ extensions.
|
|
|
|
---
|
|
|
|
## 📋 Major Feature Areas
|
|
|
|
For current status and detailed tasks, see the corresponding Gitea issue labels:
|
|
|
|
### Core Systems
|
|
- **UI/Rendering System**: Issues tagged `[Major Feature]` related to rendering
|
|
- **Grid/Entity System**: Pathfinding, FOV, entity management
|
|
- **Animation System**: Property animation, easing functions, callbacks
|
|
- **Scene/Window Management**: Scene lifecycle, transitions, viewport
|
|
|
|
### Performance Optimization
|
|
- **#115**: SpatialHash for 10,000+ entities
|
|
- **#116**: Dirty flag system
|
|
- **#113**: Batch operations for NumPy-style access
|
|
- **#117**: Memory pool for entities
|
|
|
|
### Advanced Features
|
|
- **#118**: Scene as Drawable (scenes can be drawn/animated)
|
|
- **#122**: Parent-Child UI System
|
|
- **#123**: Grid Subgrid System (256x256 chunks)
|
|
- **#124**: Grid Point Animation
|
|
- **#106**: Shader support
|
|
- **#107**: Particle system
|
|
|
|
### Documentation
|
|
- **#92**: Inline C++ documentation system
|
|
- **#91**: Python type stub files (.pyi)
|
|
- **#97**: Automated API documentation extraction
|
|
- **#126**: Generate perfectly consistent Python interface
|
|
|
|
---
|
|
|
|
## 📚 Resources
|
|
|
|
- **Issue Tracker**: [Gitea Issues](https://gamedev.ffwf.net/gitea/john/McRogueFace/issues)
|
|
- **Source Code**: [Gitea Repository](https://gamedev.ffwf.net/gitea/john/McRogueFace)
|
|
- **Documentation**: See `CLAUDE.md` for build instructions and development guide
|
|
- **Tutorial**: See `roguelike_tutorial/` for implementation examples
|
|
- **Workflow**: See "Gitea-First Workflow" section in `CLAUDE.md` for issue management best practices
|
|
|
|
---
|
|
|
|
## 🔄 Development Workflow
|
|
|
|
**Gitea is the Single Source of Truth** for this project. Before starting any work:
|
|
|
|
1. **Check Gitea Issues** for existing tasks, bugs, or related work
|
|
2. **Create granular issues** for new features or problems
|
|
3. **Update issues** when work affects other systems
|
|
4. **Document discoveries** - if something is undocumented or misleading, create a task to fix it
|
|
5. **Cross-reference commits** with issue numbers (e.g., "Fixes #104")
|
|
|
|
See the "Gitea-First Workflow" section in `CLAUDE.md` for detailed guidelines on efficient development practices using the Gitea MCP tools.
|
|
|
|
---
|
|
|
|
*For current priorities, task tracking, and bug reports, please use the [Gitea issue tracker](https://gamedev.ffwf.net/gitea/john/McRogueFace/issues).*
|