Roadmap: Integrate July 12 transcript analysis - critical tutorial blockers
URGENT: RoguelikeDev event starts July 15 (3 days) Critical Blockers Identified: - Animation system blocking tutorial Part 2 (input queueing, collision) - Grid clicking completely broken in headless mode - Python API consistency issues found during tutorial writing - Object splitting bug: derived classes lose type in collections Added Sections: - Detailed tutorial status with specific blockers - Animation system critical issues breakdown - Grid clicking discovery (all events commented out) - Python API consistency crisis details - Proposed architecture improvements (OOP overhaul) - Claude Code quality concerns after 6-7 weeks - Comprehensive 34-issue list from transcript analysis Immediate Actions Required: 1. Fix animation input queueing TODAY 2. Fix grid clicking implementation TODAY 3. Create tutorial announcement if blockers fixed 4. Regenerate Parts 3-6 (machine drafts broken) 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		
							parent
							
								
									062e4dadc4
								
							
						
					
					
						commit
						bde82028b5
					
				|  | @ -0,0 +1,935 @@ | ||||||
|  | # McRogueFace - Development Roadmap | ||||||
|  | 
 | ||||||
|  | ## 🚨 URGENT PRIORITIES - July 12, 2025 🚨 | ||||||
|  | 
 | ||||||
|  | ### CRITICAL: RoguelikeDev Tutorial Event starts July 15! (3 days) | ||||||
|  | 
 | ||||||
|  | #### 1. Tutorial Status & Blockers | ||||||
|  | - [x] **Part 0**: Complete (Starting McRogueFace)  | ||||||
|  | - [x] **Part 1**: Complete (Setting up grid and tile sheet) | ||||||
|  | - [ ] **Part 2**: Draft exists but BLOCKED by animation issues - PRIORITY FIX! | ||||||
|  | - [ ] **Parts 3-6**: Machine-generated drafts need complete rework | ||||||
|  | - [ ] **Parts 7-15**: Need creation this weekend | ||||||
|  | 
 | ||||||
|  | **Key Blockers**: | ||||||
|  | - Need smooth character movement animation (Pokemon-style) | ||||||
|  | - Grid needs walkable grass center, non-walkable tree edges | ||||||
|  | - Input queueing during animations not working properly | ||||||
|  | 
 | ||||||
|  | #### 2. Animation System Critical Issues 🚨 | ||||||
|  | **BLOCKER FOR TUTORIAL PART 2**: | ||||||
|  | - [ ] **Input Queue System**: Holding arrow keys doesn't queue movements | ||||||
|  |   - Animation must complete before next input accepted | ||||||
|  |   - Need "press and hold" that queues ONE additional move | ||||||
|  |   - Goal: Pokemon-style smooth continuous movement | ||||||
|  | - [ ] **Collision Reservation**: When entity starts moving, should block destination | ||||||
|  |   - Prevents overlapping movements | ||||||
|  |   - Already claimed tiles should reject incoming entities | ||||||
|  | - [x] **Segfault Fix**: Refactored from bare pointers to weak references ✅ | ||||||
|  | 
 | ||||||
|  | #### 3. Grid Clicking BROKEN in Headless Mode 🚨 | ||||||
|  | **MAJOR DISCOVERY**: All click events commented out! | ||||||
|  | - [ ] **Automation System Non-Functional**: Claude Code "didn't even try" | ||||||
|  | - [ ] **Grid Click Coordinates**: Need tile coords, not just mouse coords | ||||||
|  | - [ ] **Nested Grid Support**: Clicks must work on grids within frames | ||||||
|  | - [ ] **No Error Reporting**: System claimed complete but isn't | ||||||
|  | 
 | ||||||
|  | #### 4. Python API Consistency Crisis | ||||||
|  | **Tutorial Writing Reveals Major Issues**: | ||||||
|  | - [ ] **Inconsistent Constructors**: Each class has different requirements | ||||||
|  | - [ ] **Vector Class Broken**: No [0], [1] indexing like tuples | ||||||
|  | - [ ] **Object Splitting Bug**: Python derived classes lose type in collections | ||||||
|  |   - Shared pointer extracted, Python reference discarded | ||||||
|  |   - Retrieved objects are base class only | ||||||
|  |   - No way to cast back to derived type | ||||||
|  | - [ ] **Need Systematic Generation**: All bindings should be consistent | ||||||
|  | - [x] **UIGrid TCOD Integration** (8 hours) ✅ COMPLETED! | ||||||
|  |   - ✅ Add TCODMap* to UIGrid constructor with proper lifecycle | ||||||
|  |   - ✅ Implement complete Dijkstra pathfinding system | ||||||
|  |   - ✅ Create mcrfpy.libtcod submodule with Python bindings | ||||||
|  |   - ✅ Fix critical PyArg bug preventing Color object assignments | ||||||
|  |   - ✅ Implement FOV with perspective rendering | ||||||
|  |   - [ ] Add batch operations for NumPy-style access (deferred) | ||||||
|  |   - [ ] Create CellView for ergonomic .at((x,y)) access (deferred) | ||||||
|  | - [x] **UIEntity Pathfinding** (4 hours) ✅ COMPLETED! | ||||||
|  |   - ✅ Implement Dijkstra maps for multiple targets in UIGrid | ||||||
|  |   - ✅ Add path_to(target) method using A* to UIEntity | ||||||
|  |   - ✅ Cache paths in UIEntity for performance | ||||||
|  | 
 | ||||||
|  | #### 3. Performance Critical Path | ||||||
|  | - [ ] **Implement SpatialHash** for 10,000+ entities (2 hours) | ||||||
|  | - [ ] **Add dirty flag system** to UIGrid (1 hour) | ||||||
|  | - [ ] **Batch update context managers** (2 hours) | ||||||
|  | - [ ] **Memory pool for entities** (2 hours) | ||||||
|  | 
 | ||||||
|  | #### 4. Bug Fixing Pipeline | ||||||
|  | - [ ] Set up GitHub Issues automation | ||||||
|  | - [ ] Create test for each bug before fixing | ||||||
|  | - [ ] Track: Memory leaks, Segfaults, Python/C++ boundary errors | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🏗️ PROPOSED ARCHITECTURE IMPROVEMENTS (From July 12 Analysis) | ||||||
|  | 
 | ||||||
|  | ### Object-Oriented Design Overhaul | ||||||
|  | 1. **Scene System Revolution**: | ||||||
|  |    - [ ] Make Scene derive from Drawable (scenes are drawn!) | ||||||
|  |    - [ ] Give scenes position and visibility properties | ||||||
|  |    - [ ] Scene selection by visibility (auto-hide old scene) | ||||||
|  |    - [ ] Replace transition system with animations | ||||||
|  | 
 | ||||||
|  | 2. **Animation System Enhancements**: | ||||||
|  |    - [ ] Add proper completion callbacks (object + animation params) | ||||||
|  |    - [ ] Prevent property conflicts (exclusive locking) | ||||||
|  |    - [ ] Currently using timer sync workarounds | ||||||
|  | 
 | ||||||
|  | 3. **Timer System Improvements**: | ||||||
|  |    - [ ] Replace string-dictionary system with objects | ||||||
|  |    - [ ] Add start(), stop(), pause() methods | ||||||
|  |    - [ ] Implement proper one-shot mode | ||||||
|  |    - [ ] Pass timer object to callbacks (not just ms) | ||||||
|  | 
 | ||||||
|  | 4. **Parent-Child UI Relationships**: | ||||||
|  |    - [ ] Add parent field to UI drawables (like entities have) | ||||||
|  |    - [ ] Implement append/remove/extend with auto-parent updates | ||||||
|  |    - [ ] Auto-remove from old parent when adding to new | ||||||
|  | 
 | ||||||
|  | ### Performance Optimizations Needed | ||||||
|  | - [ ] **Grid Rendering**: Consider texture caching vs real-time | ||||||
|  | - [ ] **Subgrid System**: Split large grids into 256x256 chunks | ||||||
|  | - [ ] **Dirty Flagging**: Propagate from base class up | ||||||
|  | - [ ] **Animation Features**: Tile color animation, sprite cycling | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## ⚠️ CLAUDE CODE QUALITY CONCERNS (6-7 Weeks In) | ||||||
|  | 
 | ||||||
|  | ### Issues Observed: | ||||||
|  | 1. **Declining Quality**: High quantity but low quality results | ||||||
|  | 2. **Not Following Requirements**: Ignoring specific implementation needs | ||||||
|  | 3. **Bad Practices**: | ||||||
|  |    - Creating parallel copies (animation_RAII.cpp, _fixed, _final versions) | ||||||
|  |    - Should use Git, not file copies | ||||||
|  |    - Claims functionality "done" when stubbed out | ||||||
|  | 4. **File Management Problems**: | ||||||
|  |    - Git operations reset timestamps | ||||||
|  |    - Can't determine creation order of multiple versions | ||||||
|  | 
 | ||||||
|  | ### Recommendations: | ||||||
|  | - Use Git for version control exclusively | ||||||
|  | - Fix things in place, not copies | ||||||
|  | - Acknowledge incomplete functionality | ||||||
|  | - Follow project's implementation style | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🎯 STRATEGIC ARCHITECTURE VISION | ||||||
|  | 
 | ||||||
|  | ### Three-Layer Grid Architecture (From Compass Research) | ||||||
|  | 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 1000x1000 maps) | ||||||
|  | - **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 | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## Project Status: 🎉 ALPHA 0.1 RELEASE! 🎉 | ||||||
|  | 
 | ||||||
|  | **Current State**: Documentation system complete, TCOD integration urgent   | ||||||
|  | **Latest Update**: Tutorial Parts 0-6 complete with documentation (2025-07-11)   | ||||||
|  | **Branch**: alpha_streamline_2   | ||||||
|  | **Open Issues**: ~46 remaining + URGENT TCOD/Tutorial work | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 📋 TCOD Integration Implementation Details | ||||||
|  | 
 | ||||||
|  | ### Phase 1: Core UIGrid Integration (Day 1 Morning) | ||||||
|  | ```cpp | ||||||
|  | // UIGrid.h additions | ||||||
|  | class UIGrid : public UIDrawable { | ||||||
|  | private: | ||||||
|  |     TCODMap* world_state;  // Add TCOD map | ||||||
|  |     std::unordered_map<int, UIGridPointState*> entity_perspectives; | ||||||
|  |     bool batch_mode = false; | ||||||
|  |     std::vector<CellUpdate> pending_updates; | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Phase 2: Python Bindings (Day 1 Afternoon) | ||||||
|  | ```python | ||||||
|  | # New API surface | ||||||
|  | grid = mcrfpy.Grid(100, 100) | ||||||
|  | grid.compute_fov(player.x, player.y, radius=10)  # Returns visible cells | ||||||
|  | grid.at((x, y)).walkable = False  # Ergonomic access | ||||||
|  | with grid.batch_update():  # Context manager for performance | ||||||
|  |     # All updates batched | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Phase 3: Entity Integration (Day 2 Morning) | ||||||
|  | ```python | ||||||
|  | # UIEntity additions | ||||||
|  | entity.path_to(target_x, target_y)  # A* pathfinding | ||||||
|  | entity.flee_from(threat)  # Dijkstra map | ||||||
|  | entity.can_see(other_entity)  # FOV check | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ### Critical Success Factors: | ||||||
|  | 1. **Batch everything** - Never update single cells in loops | ||||||
|  | 2. **Lazy evaluation** - Only compute FOV for entities that need it | ||||||
|  | 3. **Sparse storage** - Don't store full grids per entity | ||||||
|  | 4. **Profile early** - Find the 20% of code taking 80% of time | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## Recent Achievements | ||||||
|  | 
 | ||||||
|  | ### 2025-07-12: Animation System RAII Overhaul - Critical Segfault Fix! 🛡️ | ||||||
|  | **Fixed two major crashes in AnimationManager** | ||||||
|  | - ✅ Race condition when creating animations in timer callbacks | ||||||
|  | - ✅ Exit crash when animations outlive their targets | ||||||
|  | - ✅ Implemented weak_ptr tracking for automatic cleanup | ||||||
|  | - ✅ Added complete() and hasValidTarget() methods | ||||||
|  | - ✅ No more use-after-free bugs - proper RAII design | ||||||
|  | - ✅ Extensively tested with stress tests and production demos | ||||||
|  | 
 | ||||||
|  | ### 2025-07-10: Complete FOV, A* Pathfinding & GUI Text Widgets! 👁️🗺️⌨️ | ||||||
|  | **Engine Feature Sprint - Major Capabilities Added** | ||||||
|  | - ✅ Complete FOV (Field of View) system with perspective rendering | ||||||
|  |   - UIGrid.perspective property controls which entity's view to render | ||||||
|  |   - Three-layer overlay system: unexplored (black), explored (dark), visible (normal) | ||||||
|  |   - Per-entity visibility state tracking with UIGridPointState | ||||||
|  |   - Perfect knowledge updates - only explored areas persist | ||||||
|  | - ✅ A* Pathfinding implementation | ||||||
|  |   - Entity.path_to(x, y) method for direct pathfinding | ||||||
|  |   - UIGrid compute_astar() and get_astar_path() methods | ||||||
|  |   - Path caching in entities for performance | ||||||
|  |   - Complete test suite comparing A* vs Dijkstra performance | ||||||
|  | - ✅ GUI Text Input Widget System | ||||||
|  |   - Full-featured TextInputWidget class with cursor, selection, scrolling | ||||||
|  |   - Improved widget with proper text rendering and multi-line support | ||||||
|  |   - Example showcase demonstrating multiple input fields | ||||||
|  |   - Foundation for in-game consoles, chat systems, and text entry | ||||||
|  | - ✅ Sizzle Reel Demos | ||||||
|  |   - path_vision_sizzle_reel.py combines pathfinding with FOV | ||||||
|  |   - Interactive visibility demos showing real-time FOV updates | ||||||
|  |   - Performance demonstrations with multiple entities | ||||||
|  | 
 | ||||||
|  | ### 2025-07-09: Dijkstra Pathfinding & Critical Bug Fix! 🗺️ | ||||||
|  | **TCOD Integration Sprint - Major Progress** | ||||||
|  | - ✅ Complete Dijkstra pathfinding implementation in UIGrid | ||||||
|  |   - compute_dijkstra(), get_dijkstra_distance(), get_dijkstra_path() methods | ||||||
|  |   - Full TCODMap and TCODDijkstra integration with proper memory management | ||||||
|  |   - Comprehensive test suite with both headless and interactive demos | ||||||
|  | - ✅ **CRITICAL FIX**: PyArg bug in UIGridPoint color setter | ||||||
|  |   - Now supports both mcrfpy.Color objects and (r,g,b,a) tuples | ||||||
|  |   - Eliminated mysterious "SystemError: new style getargs format" crashes | ||||||
|  |   - Proper error handling and exception propagation | ||||||
|  | - ✅ mcrfpy.libtcod submodule with Python bindings | ||||||
|  |   - dijkstra_compute(), dijkstra_get_distance(), dijkstra_get_path() | ||||||
|  |   - line() function for corridor generation | ||||||
|  |   - Foundation ready for FOV implementation | ||||||
|  | - ✅ Test consolidation: 6 broken demos → 2 clean, working versions | ||||||
|  | 
 | ||||||
|  | ### 2025-07-08: PyArgHelpers Infrastructure Complete! 🔧 | ||||||
|  | **Standardized Python API Argument Parsing** | ||||||
|  | - Unified position handling: (x, y) tuples or separate x, y args | ||||||
|  | - Consistent size parsing: (w, h) tuples or width, height args | ||||||
|  | - Grid-specific helpers for tile-based positioning | ||||||
|  | - Proper conflict detection between positional and keyword args | ||||||
|  | - All UI components migrated: Frame, Caption, Sprite, Grid, Entity | ||||||
|  | - Improved error messages: "Value must be a number (int or float)" | ||||||
|  | - Foundation for Phase 7 documentation efforts | ||||||
|  | 
 | ||||||
|  | ### 2025-07-05: ALPHA 0.1 ACHIEVED! 🎊🍾 | ||||||
|  | **All Alpha Blockers Resolved!** | ||||||
|  | - Z-order rendering with performance optimization (Issue #63) | ||||||
|  | - Python Sequence Protocol for collections (Issue #69) | ||||||
|  | - Comprehensive Animation System (Issue #59) | ||||||
|  | - Moved RenderTexture to Beta (not needed for Alpha) | ||||||
|  | - **McRogueFace is ready for Alpha release!** | ||||||
|  | 
 | ||||||
|  | ### 2025-07-05: Z-order Rendering Complete! 🎉 | ||||||
|  | **Issue #63 Resolved**: Consistent z-order rendering with performance optimization | ||||||
|  | - Dirty flag pattern prevents unnecessary per-frame sorting | ||||||
|  | - Lazy sorting for both Scene elements and Frame children | ||||||
|  | - Frame children now respect z_index (fixed inconsistency) | ||||||
|  | - Automatic dirty marking on z_index changes and collection modifications | ||||||
|  | - Performance: O(1) check for static scenes vs O(n log n) every frame | ||||||
|  | 
 | ||||||
|  | ### 2025-07-05: Python Sequence Protocol Complete! 🎉 | ||||||
|  | **Issue #69 Resolved**: Full sequence protocol implementation for collections | ||||||
|  | - Complete __setitem__, __delitem__, __contains__ support | ||||||
|  | - Slice operations with extended slice support (step != 1) | ||||||
|  | - Concatenation (+) and in-place concatenation (+=) with validation | ||||||
|  | - Negative indexing throughout, index() and count() methods | ||||||
|  | - Type safety: UICollection (Frame/Caption/Sprite/Grid), EntityCollection (Entity only) | ||||||
|  | - Default value support: None for texture/font parameters uses engine defaults | ||||||
|  | 
 | ||||||
|  | ### 2025-07-05: Animation System Complete! 🎉 | ||||||
|  | **Issue #59 Resolved**: Comprehensive animation system with 30+ easing functions | ||||||
|  | - Property-based animations for all UI classes (Frame, Caption, Sprite, Grid, Entity) | ||||||
|  | - Individual color component animation (r/g/b/a) | ||||||
|  | - Sprite sequence animation and text typewriter effects | ||||||
|  | - Pure C++ execution without Python callbacks | ||||||
|  | - Delta animation support for relative values | ||||||
|  | 
 | ||||||
|  | ### 2025-01-03: Major Stability Update | ||||||
|  | **Major Cleanup**: Removed deprecated registerPyAction system (-180 lines) | ||||||
|  | **Bug Fixes**: 12 critical issues including Grid segfault, Issue #78 (middle click), Entity setters | ||||||
|  | **New Features**: Entity.index() (#73), EntityCollection.extend() (#27), Sprite validation (#33) | ||||||
|  | **Test Coverage**: Comprehensive test suite with timer callback pattern established | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🔧 CURRENT WORK: Alpha Streamline 2 - Major Architecture Improvements | ||||||
|  | 
 | ||||||
|  | ### Recent Completions: | ||||||
|  | - ✅ **Phase 1-4 Complete** - Foundation, API Polish, Entity Lifecycle, Visibility/Performance | ||||||
|  | - ✅ **Phase 5 Complete** - Window/Scene Architecture fully implemented! | ||||||
|  |   - Window singleton with properties (#34) | ||||||
|  |   - OOP Scene support with lifecycle methods (#61) | ||||||
|  |   - Window resize events (#1) | ||||||
|  |   - Scene transitions with animations (#105) | ||||||
|  | - ✅ **Phase 6 Complete** - Rendering Revolution achieved! | ||||||
|  |   - Grid background colors (#50) ✅ | ||||||
|  |   - RenderTexture overhaul (#6) ✅ | ||||||
|  |   - UIFrame clipping support ✅ | ||||||
|  |   - Viewport-based rendering (#8) ✅ | ||||||
|  | 
 | ||||||
|  | ### Active Development: | ||||||
|  | - **Branch**: alpha_streamline_2 | ||||||
|  | - **Current Phase**: Phase 7 - Documentation & Distribution | ||||||
|  | - **Achievement**: PyArgHelpers infrastructure complete - standardized Python API | ||||||
|  | - **Strategic Vision**: See STRATEGIC_VISION.md for platform roadmap | ||||||
|  | - **Latest**: All UI components now use consistent argument parsing patterns! | ||||||
|  | 
 | ||||||
|  | ### 🏗️ Architectural Dependencies Map | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | Foundation Layer: | ||||||
|  | ├── #71 Base Class (_Drawable)  | ||||||
|  | │   ├── #10 Visibility System (needs AABB from base) | ||||||
|  | │   ├── #87 visible property | ||||||
|  | │   └── #88 opacity property | ||||||
|  | │ | ||||||
|  | ├── #7 Safe Constructors (affects all classes) | ||||||
|  | │   └── Blocks any new class creation until resolved | ||||||
|  | │ | ||||||
|  | └── #30 Entity/Grid Integration (lifecycle management) | ||||||
|  |     └── Enables reliable entity management | ||||||
|  | 
 | ||||||
|  | Window/Scene Layer: | ||||||
|  | ├── #34 Window Object | ||||||
|  | │   ├── #61 Scene Object (depends on Window) | ||||||
|  | │   ├── #14 SFML Exposure (helps implement Window) | ||||||
|  | │   └── Future: Multi-window support | ||||||
|  | 
 | ||||||
|  | Rendering Layer: | ||||||
|  | └── #6 RenderTexture Overhaul | ||||||
|  |     ├── Enables clipping | ||||||
|  |     ├── Off-screen rendering | ||||||
|  |     └── Post-processing effects | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## 🚀 Alpha Streamline 2 - Comprehensive Phase Plan | ||||||
|  | 
 | ||||||
|  | ### Phase 1: Foundation Stabilization (1-2 weeks) | ||||||
|  | **Goal**: Safe, predictable base for all future work | ||||||
|  | ``` | ||||||
|  | 1. #7 - Audit and fix unsafe constructors (CRITICAL - do first!) | ||||||
|  |    - Find all manually implemented no-arg constructors | ||||||
|  |    - Verify map compatibility requirements | ||||||
|  |    - Make pointer-safe or remove | ||||||
|  |     | ||||||
|  | 2. #71 - _Drawable base class implementation | ||||||
|  |    - Common properties: x, y, w, h, visible, opacity | ||||||
|  |    - Virtual methods: get_bounds(), render() | ||||||
|  |    - Proper Python inheritance setup | ||||||
|  |     | ||||||
|  | 3. #87 - visible property | ||||||
|  |    - Add to base class | ||||||
|  |    - Update all render methods to check | ||||||
|  |     | ||||||
|  | 4. #88 - opacity property (depends on #87) | ||||||
|  |    - 0.0-1.0 float range | ||||||
|  |    - Apply in render methods | ||||||
|  |     | ||||||
|  | 5. #89 - get_bounds() method | ||||||
|  |    - Virtual method returning (x, y, w, h) | ||||||
|  |    - Override in each UI class | ||||||
|  |     | ||||||
|  | 6. #98 - move()/resize() convenience methods | ||||||
|  |    - move(dx, dy) - relative movement | ||||||
|  |    - resize(w, h) - absolute sizing | ||||||
|  | ``` | ||||||
|  | *Rationale*: Can't build on unsafe foundations. Base class enables all UI improvements. | ||||||
|  | 
 | ||||||
|  | ### Phase 2: Constructor & API Polish (1 week) | ||||||
|  | **Goal**: Pythonic, intuitive API | ||||||
|  | ``` | ||||||
|  | 1. #101 - Standardize (0,0) defaults for all positions | ||||||
|  | 2. #38 - Frame children parameter: Frame(children=[...]) | ||||||
|  | 3. #42 - Click handler in __init__: Button(click=callback) | ||||||
|  | 4. #90 - Grid size tuple: Grid(grid_size=(10, 10)) | ||||||
|  | 5. #19 - Sprite texture swapping: sprite.texture = new_texture | ||||||
|  | 6. #52 - Grid skip out-of-bounds entities (performance) | ||||||
|  | ``` | ||||||
|  | *Rationale*: Quick wins that make the API more pleasant before bigger changes. | ||||||
|  | 
 | ||||||
|  | ### Phase 3: Entity Lifecycle Management (1 week) | ||||||
|  | **Goal**: Bulletproof entity/grid relationships | ||||||
|  | ``` | ||||||
|  | 1. #30 - Entity.die() and grid association | ||||||
|  |    - Grid.entities.append(e) sets e.grid = self | ||||||
|  |    - Grid.entities.remove(e) sets e.grid = None | ||||||
|  |    - Entity.die() calls self.grid.remove(self) | ||||||
|  |    - Entity can only be in 0 or 1 grid | ||||||
|  |     | ||||||
|  | 2. #93 - Vector arithmetic methods | ||||||
|  |    - add, subtract, multiply, divide | ||||||
|  |    - distance, normalize, dot product | ||||||
|  |     | ||||||
|  | 3. #94 - Color helper methods | ||||||
|  |    - from_hex("#FF0000"), to_hex() | ||||||
|  |    - lerp(other_color, t) for interpolation | ||||||
|  |     | ||||||
|  | 4. #103 - Timer objects | ||||||
|  |    timer = mcrfpy.Timer("my_timer", callback, 1000) | ||||||
|  |    timer.pause() | ||||||
|  |    timer.resume() | ||||||
|  |    timer.cancel() | ||||||
|  | ``` | ||||||
|  | *Rationale*: Games need reliable entity management. Timer objects enable entity AI. | ||||||
|  | 
 | ||||||
|  | ### Phase 4: Visibility & Performance (1-2 weeks) | ||||||
|  | **Goal**: Only render/process what's needed | ||||||
|  | ``` | ||||||
|  | 1. #10 - [UNSCHEDULED] Full visibility system with AABB | ||||||
|  |    - Postponed: UIDrawables can exist in multiple collections | ||||||
|  |    - Cannot reliably determine screen position due to multiple render contexts | ||||||
|  |    - Needs architectural solution for parent-child relationships | ||||||
|  |     | ||||||
|  | 2. #52 - Grid culling (COMPLETED in Phase 2) | ||||||
|  |     | ||||||
|  | 3. #39/40/41 - Name system for finding elements | ||||||
|  |    - name="button1" property on all UIDrawables | ||||||
|  |    - only_one=True for unique names | ||||||
|  |    - scene.find("button1") returns element | ||||||
|  |    - collection.find("enemy*") returns list | ||||||
|  |     | ||||||
|  | 4. #104 - Basic profiling/metrics | ||||||
|  |    - Frame time tracking | ||||||
|  |    - Draw call counting | ||||||
|  |    - Python vs C++ time split | ||||||
|  | ``` | ||||||
|  | *Rationale*: Performance is feature. Finding elements by name is huge QoL. | ||||||
|  | 
 | ||||||
|  | ### Phase 5: Window/Scene Architecture ✅ COMPLETE! (2025-07-06) | ||||||
|  | **Goal**: Modern, flexible architecture | ||||||
|  | ``` | ||||||
|  | 1. ✅ #34 - Window object (singleton first) | ||||||
|  |    window = mcrfpy.Window.get() | ||||||
|  |    window.resolution = (1920, 1080) | ||||||
|  |    window.fullscreen = True | ||||||
|  |    window.vsync = True | ||||||
|  |     | ||||||
|  | 2. ✅ #1 - Window resize events | ||||||
|  |    scene.on_resize(self, width, height) callback implemented | ||||||
|  |     | ||||||
|  | 3. ✅ #61 - Scene object (OOP scenes) | ||||||
|  |    class MenuScene(mcrfpy.Scene): | ||||||
|  |        def on_keypress(self, key, state): | ||||||
|  |            # handle input | ||||||
|  |        def on_enter(self): | ||||||
|  |            # setup UI | ||||||
|  |        def on_exit(self): | ||||||
|  |            # cleanup | ||||||
|  |        def update(self, dt): | ||||||
|  |            # frame update | ||||||
|  |             | ||||||
|  | 4. ✅ #14 - SFML exposure research | ||||||
|  |    - Completed comprehensive analysis | ||||||
|  |    - Recommendation: Direct integration as mcrfpy.sfml | ||||||
|  |    - SFML 3.0 migration deferred to late 2025 | ||||||
|  |     | ||||||
|  | 5. ✅ #105 - Scene transitions | ||||||
|  |    mcrfpy.setScene("menu", "fade", 1.0) | ||||||
|  |    # Supports: fade, slide_left, slide_right, slide_up, slide_down | ||||||
|  | ``` | ||||||
|  | *Result*: Entire window/scene system modernized with OOP design! | ||||||
|  | 
 | ||||||
|  | ### Phase 6: Rendering Revolution (3-4 weeks) ✅ COMPLETE! | ||||||
|  | **Goal**: Professional rendering capabilities | ||||||
|  | ``` | ||||||
|  | 1. ✅ #50 - Grid background colors [COMPLETED] | ||||||
|  |    grid.background_color = mcrfpy.Color(50, 50, 50) | ||||||
|  |    - Added background_color property with animation support | ||||||
|  |    - Default dark gray background (8, 8, 8, 255) | ||||||
|  |     | ||||||
|  | 2. ✅ #6 - RenderTexture overhaul [COMPLETED] | ||||||
|  |    ✅ Base infrastructure in UIDrawable | ||||||
|  |    ✅ UIFrame clip_children property | ||||||
|  |    ✅ Dirty flag optimization system | ||||||
|  |    ✅ Nested clipping support | ||||||
|  |    ✅ UIGrid already has appropriate RenderTexture implementation | ||||||
|  |    ❌ UICaption/UISprite clipping not needed (no children) | ||||||
|  |     | ||||||
|  | 3. ✅ #8 - Viewport-based rendering [COMPLETED] | ||||||
|  |    - Fixed game resolution (window.game_resolution) | ||||||
|  |    - Three scaling modes: "center", "stretch", "fit" | ||||||
|  |    - Window to game coordinate transformation | ||||||
|  |    - Mouse input properly scaled with windowToGameCoords() | ||||||
|  |    - Python API fully integrated | ||||||
|  |    - Tests: test_viewport_simple.py, test_viewport_visual.py, test_viewport_scaling.py | ||||||
|  |     | ||||||
|  | 4. #106 - Shader support [DEFERRED TO POST-PHASE 7] | ||||||
|  |    sprite.shader = mcrfpy.Shader.load("glow.frag") | ||||||
|  |    frame.shader_params = {"intensity": 0.5} | ||||||
|  |     | ||||||
|  | 5. #107 - Particle system [DEFERRED TO POST-PHASE 7] | ||||||
|  |    emitter = mcrfpy.ParticleEmitter() | ||||||
|  |    emitter.texture = spark_texture | ||||||
|  |    emitter.emission_rate = 100 | ||||||
|  |    emitter.lifetime = (0.5, 2.0) | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | **Phase 6 Achievement Summary**: | ||||||
|  | - Grid backgrounds (#50) ✅ - Customizable background colors with animation | ||||||
|  | - RenderTexture overhaul (#6) ✅ - UIFrame clipping with opt-in architecture | ||||||
|  | - Viewport rendering (#8) ✅ - Three scaling modes with coordinate transformation | ||||||
|  | - UIGrid already had optimal RenderTexture implementation for its use case | ||||||
|  | - UICaption/UISprite clipping unnecessary (no children to clip) | ||||||
|  | - Performance optimized with dirty flag system | ||||||
|  | - Backward compatibility preserved throughout | ||||||
|  | - Effects/Shader/Particle systems deferred for focused delivery | ||||||
|  | 
 | ||||||
|  | *Rationale*: This unlocks professional visual effects but is complex. | ||||||
|  | 
 | ||||||
|  | ### Phase 7: Documentation & Distribution (1-2 weeks) | ||||||
|  | **Goal**: Ready for the world | ||||||
|  | ``` | ||||||
|  | 1. ✅ #85 - Replace all "docstring" placeholders [COMPLETED 2025-07-08] | ||||||
|  | 2. ✅ #86 - Add parameter documentation [COMPLETED 2025-07-08] | ||||||
|  | 3. ✅ #108 - Generate .pyi type stubs for IDE support [COMPLETED 2025-07-08] | ||||||
|  | 4. ❌ #70 - PyPI wheel preparation [CANCELLED - Architectural mismatch] | ||||||
|  | 5. API reference generator tool | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## 📋 Critical Path & Parallel Tracks | ||||||
|  | 
 | ||||||
|  | ### 🔴 **Critical Path** (Must do in order) | ||||||
|  | **Safe Constructors (#7)** → **Base Class (#71)** → **Visibility (#10)** → **Window (#34)** → **Scene (#61)** | ||||||
|  | 
 | ||||||
|  | ### 🟡 **Parallel Tracks** (Can be done alongside critical path) | ||||||
|  | 
 | ||||||
|  | **Track A: Entity Systems** | ||||||
|  | - Entity/Grid integration (#30) | ||||||
|  | - Timer objects (#103) | ||||||
|  | - Vector/Color helpers (#93, #94) | ||||||
|  | 
 | ||||||
|  | **Track B: API Polish**   | ||||||
|  | - Constructor improvements (#101, #38, #42, #90) | ||||||
|  | - Sprite texture swap (#19) | ||||||
|  | - Name/search system (#39/40/41) | ||||||
|  | 
 | ||||||
|  | **Track C: Performance** | ||||||
|  | - Grid culling (#52) | ||||||
|  | - Visibility culling (part of #10) | ||||||
|  | - Profiling tools (#104) | ||||||
|  | 
 | ||||||
|  | ### 💎 **Quick Wins to Sprinkle Throughout** | ||||||
|  | 1. Color helpers (#94) - 1 hour | ||||||
|  | 2. Vector methods (#93) - 1 hour   | ||||||
|  | 3. Grid backgrounds (#50) - 30 minutes | ||||||
|  | 4. Default positions (#101) - 30 minutes | ||||||
|  | 
 | ||||||
|  | ### 🎯 **Recommended Execution Order** | ||||||
|  | 
 | ||||||
|  | **Week 1-2**: Foundation (Critical constructors + base class)   | ||||||
|  | **Week 3**: Entity lifecycle + API polish   | ||||||
|  | **Week 4**: Visibility system + performance   | ||||||
|  | **Week 5-6**: Window/Scene architecture   | ||||||
|  | **Week 7-9**: Rendering revolution (or defer to gamma)   | ||||||
|  | **Week 10**: Documentation + release prep | ||||||
|  | 
 | ||||||
|  | ### 🆕 **New Issues to Create/Track** | ||||||
|  | 
 | ||||||
|  | 1. [x] **Timer Objects** - Pythonic timer management (#103) - *Completed Phase 3* | ||||||
|  | 2. [ ] **Event System Enhancement** - Mouse enter/leave, drag, right-click   | ||||||
|  | 3. [ ] **Resource Manager** - Centralized asset loading | ||||||
|  | 4. [ ] **Serialization System** - Save/load game state | ||||||
|  | 5. [x] **Scene Transitions** - Fade, slide, custom effects (#105) - *Completed Phase 5* | ||||||
|  | 6. [x] **Profiling Tools** - Performance metrics (#104) - *Completed Phase 4* | ||||||
|  | 7. [ ] **Particle System** - Visual effects framework (#107) | ||||||
|  | 8. [ ] **Shader Support** - Custom rendering effects (#106) | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 📋 Phase 6 Implementation Strategy | ||||||
|  | 
 | ||||||
|  | ### RenderTexture Overhaul (#6) - Technical Approach | ||||||
|  | 
 | ||||||
|  | **Current State**: | ||||||
|  | - UIGrid already uses RenderTexture for entity rendering | ||||||
|  | - Scene transitions use RenderTextures for smooth animations | ||||||
|  | - Direct rendering to window for Frame, Caption, Sprite | ||||||
|  | 
 | ||||||
|  | **Implementation Plan**: | ||||||
|  | 1. **Base Infrastructure**: | ||||||
|  |    - Add `sf::RenderTexture* target` to UIDrawable base | ||||||
|  |    - Modify `render()` to check if target exists | ||||||
|  |    - If target: render to texture, then draw texture to parent | ||||||
|  |    - If no target: render directly (backward compatible) | ||||||
|  | 
 | ||||||
|  | 2. **Clipping Support**: | ||||||
|  |    - Frame enforces bounds on children via RenderTexture | ||||||
|  |    - Children outside bounds are automatically clipped | ||||||
|  |    - Nested frames create render texture hierarchy | ||||||
|  | 
 | ||||||
|  | 3. **Performance Optimization**: | ||||||
|  |    - Lazy RenderTexture creation (only when needed) | ||||||
|  |    - Dirty flag system (only re-render when changed) | ||||||
|  |    - Texture pooling for commonly used sizes | ||||||
|  | 
 | ||||||
|  | 4. **Integration Points**: | ||||||
|  |    - Scene transitions already working with RenderTextures | ||||||
|  |    - UIGrid can be reference implementation | ||||||
|  |    - Test with deeply nested UI structures | ||||||
|  | 
 | ||||||
|  | **Quick Wins Before Core Work**: | ||||||
|  | 1. **Grid Background (#50)** - 30 min implementation | ||||||
|  |    - Add `background_color` and `background_texture` properties | ||||||
|  |    - Render before entities in UIGrid::render() | ||||||
|  |    - Good warm-up before tackling RenderTexture | ||||||
|  | 
 | ||||||
|  | 2. **Research Tasks**: | ||||||
|  |    - Study UIGrid's current RenderTexture usage | ||||||
|  |    - Profile scene transition performance | ||||||
|  |    - Identify potential texture size limits | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🚀 NEXT PHASE: Beta Features & Polish | ||||||
|  | 
 | ||||||
|  | ### Alpha Complete! Moving to Beta Priorities: | ||||||
|  | 1. ~~**#69** - Python Sequence Protocol for collections~~ - *Completed! (2025-07-05)* | ||||||
|  | 2. ~~**#63** - Z-order rendering for UIDrawables~~ - *Completed! (2025-07-05)* | ||||||
|  | 3. ~~**#59** - Animation system~~ - *Completed! (2025-07-05)* | ||||||
|  | 4. **#6** - RenderTexture concept - *Extensive Overhaul* | ||||||
|  | 5. ~~**#47** - New README.md for Alpha release~~ - *Completed* | ||||||
|  | - [x] **#78** - Middle Mouse Click sends "C" keyboard event - *Fixed* | ||||||
|  | - [x] **#77** - Fix error message copy/paste bug - *Fixed* | ||||||
|  | - [x] **#74** - Add missing `Grid.grid_y` property - *Fixed*   | ||||||
|  | - [ ] **#37** - Fix Windows build module import from "scripts" directory - *Isolated Fix* | ||||||
|  |       Issue #37 is **on hold** until we have a Windows build environment available. I actually suspect this is already fixed by the updates to the makefile, anyway. | ||||||
|  | - [x] **Entity Property Setters** - Fix "new style getargs format" error - *Fixed* | ||||||
|  | - [x] **Sprite Texture Setter** - Fix "error return without exception set" - *Fixed* | ||||||
|  | - [x] **keypressScene() Validation** - Add proper error handling - *Fixed* | ||||||
|  | 
 | ||||||
|  | ### 🔄 Complete Iterator System | ||||||
|  | **Status**: Core iterators complete (#72 closed), Grid point iterators still pending | ||||||
|  | 
 | ||||||
|  | - [ ] **Grid Point Iterator Implementation** - Complete the remaining grid iteration work | ||||||
|  | - [x] **#73** - Add `entity.index()` method for collection removal - *Fixed* | ||||||
|  | - [x] **#69** ⚠️ **Alpha Blocker** - Refactor all collections to use Python Sequence Protocol - *Completed! (2025-07-05)* | ||||||
|  | 
 | ||||||
|  | **Dependencies**: Grid point iterators → #73 entity.index() → #69 Sequence Protocol overhaul | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🗂 ISSUE TRIAGE BY SYSTEM (78 Total Issues) | ||||||
|  | 
 | ||||||
|  | ### 🎮 Core Engine Systems | ||||||
|  | 
 | ||||||
|  | #### Iterator/Collection System (2 issues) | ||||||
|  | - [x] **#73** - Entity index() method for removal - *Fixed* | ||||||
|  | - [x] **#69** ⚠️ **Alpha Blocker** - Sequence Protocol refactor - *Completed! (2025-07-05)* | ||||||
|  | 
 | ||||||
|  | #### Python/C++ Integration (7 issues)   | ||||||
|  | - [x] **#76** - UIEntity derived type preservation in collections - *Multiple Integrations* | ||||||
|  | - [ ] **#71** - Drawable base class hierarchy - *Extensive Overhaul* | ||||||
|  | - [ ] **#70** - PyPI wheel distribution - *Extensive Overhaul* | ||||||
|  | - [~] **#32** - Executable behave like `python` command - *Extensive Overhaul* *(90% Complete: -h, -V, -c, -m, -i, script execution, sys.argv, --exec all implemented. Only stdin (-) support missing)* | ||||||
|  | - [ ] **#35** - TCOD as built-in module - *Extensive Overhaul*   | ||||||
|  | - [~] **#14** - Expose SFML as built-in module - *Research Complete, Implementation Pending* | ||||||
|  | - [ ] **#46** - Subinterpreter threading tests - *Multiple Integrations* | ||||||
|  | 
 | ||||||
|  | #### UI/Rendering System (12 issues) | ||||||
|  | - [x] **#63** ⚠️ **Alpha Blocker** - Z-order for UIDrawables - *Multiple Integrations* | ||||||
|  | - [x] **#59** ⚠️ **Alpha Blocker** - Animation system - *Completed! (2025-07-05)*   | ||||||
|  | - [ ] **#6** ⚠️ **Alpha Blocker** - RenderTexture for all UIDrawables - *Extensive Overhaul* | ||||||
|  | - [ ] **#10** - UIDrawable visibility/AABB system - *Extensive Overhaul* | ||||||
|  | - [ ] **#8** - UIGrid RenderTexture viewport sizing - *Multiple Integrations* | ||||||
|  | - [x] **#9** - UIGrid RenderTexture resize handling - *Multiple Integrations* | ||||||
|  | - [ ] **#52** - UIGrid skip out-of-bounds entities - *Isolated Fix* | ||||||
|  | - [ ] **#50** - UIGrid background color field - *Isolated Fix* | ||||||
|  | - [ ] **#19** - Sprite get/set texture methods - *Multiple Integrations* | ||||||
|  | - [ ] **#17** - Move UISprite position into sf::Sprite - *Isolated Fix* | ||||||
|  | - [x] **#33** - Sprite index validation against texture range - *Fixed* | ||||||
|  | 
 | ||||||
|  | #### Grid/Entity System (6 issues) | ||||||
|  | - [ ] **#30** - Entity/Grid association management (.die() method) - *Extensive Overhaul* | ||||||
|  | - [ ] **#16** - Grid strict mode for entity knowledge/visibility - *Extensive Overhaul*   | ||||||
|  | - [ ] **#67** - Grid stitching for infinite worlds - *Extensive Overhaul* | ||||||
|  | - [ ] **#15** - UIGridPointState cleanup and standardization - *Multiple Integrations* | ||||||
|  | - [ ] **#20** - UIGrid get_grid_size standardization - *Multiple Integrations* | ||||||
|  | - [x] **#12** - GridPoint/GridPointState forbid direct init - *Isolated Fix* | ||||||
|  | 
 | ||||||
|  | #### Scene/Window Management (5 issues)  | ||||||
|  | - [x] **#61** - Scene object encapsulating key callbacks - *Completed Phase 5* | ||||||
|  | - [x] **#34** - Window object for resolution/scaling - *Completed Phase 5* | ||||||
|  | - [ ] **#62** - Multiple windows support - *Extensive Overhaul*   | ||||||
|  | - [ ] **#49** - Window resolution & viewport controls - *Multiple Integrations* | ||||||
|  | - [x] **#1** - Scene resize event handling - *Completed Phase 5* | ||||||
|  | 
 | ||||||
|  | ### 🔧 Quality of Life Features | ||||||
|  | 
 | ||||||
|  | #### UI Enhancement Features (8 issues) | ||||||
|  | - [ ] **#39** - Name field on UIDrawables - *Multiple Integrations* | ||||||
|  | - [ ] **#40** - `only_one` arg for unique naming - *Multiple Integrations* | ||||||
|  | - [ ] **#41** - `.find(name)` method for collections - *Multiple Integrations* | ||||||
|  | - [ ] **#38** - `children` arg for Frame initialization - *Isolated Fix* | ||||||
|  | - [ ] **#42** - Click callback arg for UIDrawable init - *Isolated Fix*   | ||||||
|  | - [x] **#27** - UIEntityCollection.extend() method - *Fixed* | ||||||
|  | - [ ] **#28** - UICollectionIter for scene ui iteration - *Isolated Fix* | ||||||
|  | - [ ] **#26** - UIEntityCollectionIter implementation - *Isolated Fix* | ||||||
|  | 
 | ||||||
|  | ### 🧹 Refactoring & Cleanup | ||||||
|  | 
 | ||||||
|  | #### Code Cleanup (7 issues) | ||||||
|  | - [x] **#3** ⚠️ **Alpha Blocker** - Remove `McRFPy_API::player_input` - *Completed* | ||||||
|  | - [x] **#2** ⚠️ **Alpha Blocker** - Review `registerPyAction` necessity - *Completed* | ||||||
|  | - [ ] **#7** - Remove unsafe no-argument constructors - *Multiple Integrations* | ||||||
|  | - [ ] **#21** - PyUIGrid dealloc cleanup - *Isolated Fix* | ||||||
|  | - [ ] **#75** - REPL thread separation from SFML window - *Multiple Integrations* | ||||||
|  | 
 | ||||||
|  | ### 📚 Demo & Documentation | ||||||
|  | 
 | ||||||
|  | #### Documentation (2 issues) | ||||||
|  | - [x] **#47** ⚠️ **Alpha Blocker** - Alpha release README.md - *Isolated Fix* | ||||||
|  | - [ ] **#48** - Dependency compilation documentation - *Isolated Fix* | ||||||
|  | 
 | ||||||
|  | #### Demo Projects (6 issues)   | ||||||
|  | - [ ] **#54** - Jupyter notebook integration demo - *Multiple Integrations* | ||||||
|  | - [ ] **#55** - Hunt the Wumpus AI demo - *Multiple Integrations* | ||||||
|  | - [ ] **#53** - Web interface input demo - *Multiple Integrations* *(New automation API could help)* | ||||||
|  | - [ ] **#45** - Accessibility mode demos - *Multiple Integrations* *(New automation API could help test)* | ||||||
|  | - [ ] **#36** - Dear ImGui integration tests - *Extensive Overhaul* | ||||||
|  | - [ ] **#65** - Python Explorer scene (replaces uitest) - *Extensive Overhaul* | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🎮 STRATEGIC DIRECTION | ||||||
|  | 
 | ||||||
|  | ### Engine Philosophy Maintained | ||||||
|  | - **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 | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 📚 REFERENCES & CONTEXT | ||||||
|  | 
 | ||||||
|  | **Issue Dependencies** (Key Chains): | ||||||
|  | - Iterator System: Grid points → #73 → #69 (Alpha Blocker) | ||||||
|  | - UI Hierarchy: #71 → #63 (Alpha Blocker)  | ||||||
|  | - Rendering: #6 (Alpha Blocker) → #8, #9 → #10 | ||||||
|  | - Entity System: #30 → #16 → #67 | ||||||
|  | - Window Management: #34 → #49, #61 → #62 | ||||||
|  | 
 | ||||||
|  | **Commit References**: | ||||||
|  | - 167636c: Iterator improvements (UICollection/UIEntityCollection complete) | ||||||
|  | - Recent work: 7DRL 2025 completion, RPATH updates, console improvements | ||||||
|  | 
 | ||||||
|  | **Architecture Files**: | ||||||
|  | - Iterator patterns: src/UICollection.cpp, src/UIGrid.cpp | ||||||
|  | - Python integration: src/McRFPy_API.cpp, src/PyObjectUtils.h | ||||||
|  | - Game implementation: src/scripts/ (Crypt of Sokoban complete game) | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🔮 FUTURE VISION: Pure Python Extension Architecture | ||||||
|  | 
 | ||||||
|  | ### Concept: McRogueFace as a Traditional Python Package | ||||||
|  | **Status**: Unscheduled - 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 | ||||||
|  | 
 | ||||||
|  | ### Implementation Phases (If Pursued) | ||||||
|  | 1. **Proof of Concept**: Simple SFML binding as Python extension | ||||||
|  | 2. **Core Extraction**: Separate rendering from Python embedding | ||||||
|  | 3. **Module Design**: Define clean API boundaries | ||||||
|  | 4. **Incremental Migration**: Move systems one at a time | ||||||
|  | 5. **Compatibility Layer**: Support existing games during transition | ||||||
|  | 
 | ||||||
|  | ### 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. | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 🚀 IMMEDIATE NEXT STEPS (Priority Order) | ||||||
|  | 
 | ||||||
|  | ### TODAY (July 12) - CRITICAL PATH: | ||||||
|  | 1. **FIX ANIMATION BLOCKERS** for Tutorial Part 2: | ||||||
|  |    - Implement input queueing during animations | ||||||
|  |    - Add destination square reservation | ||||||
|  |    - Test Pokemon-style continuous movement | ||||||
|  | 2. **FIX GRID CLICKING** (discovered broken in headless): | ||||||
|  |    - Uncomment and implement click events | ||||||
|  |    - Add tile coordinate conversion | ||||||
|  |    - Enable nested grid support | ||||||
|  | 3. **CREATE TUTORIAL ANNOUNCEMENT** if blockers fixed | ||||||
|  | 
 | ||||||
|  | ### Weekend (July 13-14) - Tutorial Sprint: | ||||||
|  | 1. **Regenerate Parts 3-6** (machine drafts are broken) | ||||||
|  | 2. **Create Parts 7-10**: Interface, Items, Targeting, Save/Load | ||||||
|  | 3. **Create Parts 11-15**: Dungeon levels, difficulty, equipment | ||||||
|  | 4. **Post more frequently during event** (narrator emphasis) | ||||||
|  | 
 | ||||||
|  | ### Architecture Decision Log: | ||||||
|  | - **DECIDED**: Use three-layer architecture (visual/world/perspective) | ||||||
|  | - **DECIDED**: Spatial hashing over quadtrees for entities | ||||||
|  | - **DECIDED**: Batch operations are mandatory, not optional | ||||||
|  | - **DECIDED**: TCOD integration as mcrfpy.libtcod submodule | ||||||
|  | - **DECIDED**: Tutorial must showcase McRogueFace strengths, not mimic TCOD | ||||||
|  | 
 | ||||||
|  | ### Risk Mitigation: | ||||||
|  | - **If TCOD integration delays**: Use pure Python FOV for tutorial | ||||||
|  | - **If performance issues**: Focus on <100x100 maps for demos | ||||||
|  | - **If tutorial incomplete**: Ship with 4 solid parts + roadmap | ||||||
|  | - **If bugs block progress**: Document as "known issues" and continue | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | ## 📋 COMPREHENSIVE ISSUES FROM TRANSCRIPT ANALYSIS | ||||||
|  | 
 | ||||||
|  | ### Animation System (6 issues) | ||||||
|  | 1. **Input Queue During Animation**: Queue one additional move during animation | ||||||
|  | 2. **Destination Square Reservation**: Block target when movement begins   | ||||||
|  | 3. **Pokemon-Style Movement**: Smooth continuous movement with input handling | ||||||
|  | 4. **Animation Callbacks**: Add completion callbacks with parameters | ||||||
|  | 5. **Property Conflict Prevention**: Prevent multiple animations on same property | ||||||
|  | 6. **Remove Bare Pointers**: Complete refactoring to weak references ✅ | ||||||
|  | 
 | ||||||
|  | ### Grid System (6 issues) | ||||||
|  | 7. **Grid Click Implementation**: Fix commented-out events in headless | ||||||
|  | 8. **Tile Coordinate Conversion**: Convert mouse to tile coordinates | ||||||
|  | 9. **Nested Grid Support**: Enable clicking on grids within grids | ||||||
|  | 10. **Grid Rendering Performance**: Implement 256x256 subgrid system | ||||||
|  | 11. **Dirty Flagging**: Add dirty flag propagation from base | ||||||
|  | 12. **Grid Point Animation**: Enable animating individual tiles | ||||||
|  | 
 | ||||||
|  | ### Python API (6 issues) | ||||||
|  | 13. **Regenerate Python Bindings**: Create consistent interface generation | ||||||
|  | 14. **Vector Class Enhancement**: Add [0], [1] indexing to vectors | ||||||
|  | 15. **Fix Object Splitting**: Preserve Python derived class types | ||||||
|  | 16. **Standardize Constructors**: Make all constructors consistent | ||||||
|  | 17. **Color Class Bindings**: Properly expose SFML Color class | ||||||
|  | 18. **Font Class Bindings**: Properly expose SFML Font class | ||||||
|  | 
 | ||||||
|  | ### Architecture (8 issues) | ||||||
|  | 19. **Scene as Drawable**: Refactor Scene to inherit from Drawable | ||||||
|  | 20. **Scene Visibility System**: Implement exclusive visibility switching | ||||||
|  | 21. **Replace Transition System**: Use animations not special transitions | ||||||
|  | 22. **Parent-Child UI**: Add parent field to UI drawables | ||||||
|  | 23. **Collection Methods**: Implement append/remove/extend with parent updates | ||||||
|  | 24. **Timer Object System**: Replace string-dictionary timers | ||||||
|  | 25. **One-Shot Timer Mode**: Implement proper one-shot functionality | ||||||
|  | 26. **Button Mechanics**: Any entity type can trigger buttons | ||||||
|  | 
 | ||||||
|  | ### Entity System (4 issues) | ||||||
|  | 27. **Step-On Entities**: Implement trigger when stepped on | ||||||
|  | 28. **Bump Interaction**: Add bump-to-interact behavior | ||||||
|  | 29. **Type-Aware Interactions**: Entity interactions based on type | ||||||
|  | 30. **Button Mechanics**: Any entity can trigger buttons | ||||||
|  | 
 | ||||||
|  | ### Tutorial & Documentation (4 issues) | ||||||
|  | 31. **Fix Part 2 Tutorial**: Unblock with animation fixes | ||||||
|  | 32. **Regenerate Parts 3-6**: Replace machine-generated content | ||||||
|  | 33. **API Documentation**: Document ergonomic improvements | ||||||
|  | 34. **Tutorial Alignment**: Ensure parts match TCOD structure | ||||||
|  | 
 | ||||||
|  | --- | ||||||
|  | 
 | ||||||
|  | *Last Updated: 2025-07-12 (CRITICAL TUTORIAL SPRINT)* | ||||||
|  | *Next Review: July 15 after event start*   | ||||||
		Loading…
	
		Reference in New Issue