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