feat: Phase 1 - safe constructors and _Drawable foundation

Closes #7 - Make all UI class constructors safe:
- Added safe default constructors for UISprite, UIGrid, UIEntity, UICaption
- Initialize all members to predictable values
- Made Python init functions accept no arguments
- Added x,y properties to UIEntity

Closes #71 - Create _Drawable Python base class:
- Created PyDrawable.h/cpp with base type (not yet inherited by UI types)
- Registered in module initialization

Closes #87 - Add visible property:
- Added bool visible=true to UIDrawable base class
- All render methods check visibility before drawing

Closes #88 - Add opacity property:
- Added float opacity=1.0 to UIDrawable base class
- UICaption and UISprite apply opacity to alpha channel

Closes #89 - Add get_bounds() method:
- Virtual method returns sf::FloatRect(x,y,w,h)
- Implemented in Frame, Caption, Sprite, Grid

Closes #98 - Add move() and resize() methods:
- move(dx,dy) for relative movement
- resize(w,h) for absolute sizing
- Caption resize is no-op (size controlled by font)

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
John McCardle 2025-07-06 00:13:39 -04:00
commit f1b354e47d
15 changed files with 531 additions and 161 deletions

View file

@ -155,7 +155,7 @@ Rendering Layer:
- from_hex("#FF0000"), to_hex()
- lerp(other_color, t) for interpolation
4. NEW - Timer objects
4. #103 - Timer objects
timer = mcrfpy.Timer("my_timer", callback, 1000)
timer.pause()
timer.resume()
@ -180,7 +180,7 @@ Rendering Layer:
- scene.find("button1") returns element
- collection.find("enemy*") returns list
4. NEW - Basic profiling/metrics
4. #104 - Basic profiling/metrics
- Frame time tracking
- Draw call counting
- Python vs C++ time split
@ -211,7 +211,7 @@ Rendering Layer:
- Option 2: mcrfpy.sfml submodule
- Option 3: Direct integration
5. NEW - Scene transitions
5. 105 - Scene transitions
scene.fade_to(next_scene, duration=1.0)
scene.slide_out(direction="left")
```
@ -232,10 +232,10 @@ Rendering Layer:
3. #50 - Grid background colors
grid.background_color = mcrfpy.Color(50, 50, 50)
4. NEW - Shader support (stretch goal)
4. #106 - Shader support
sprite.shader = "glow.frag"
5. NEW - Particle system (stretch goal)
5. #107 - Particle system
particles = mcrfpy.ParticleEmitter()
```
*Rationale*: This unlocks professional visual effects but is complex.
@ -245,7 +245,7 @@ Rendering Layer:
```
1. #85 - Replace all "docstring" placeholders
2. #86 - Add parameter documentation
3. Generate .pyi type stubs for IDE support
3. #108 - Generate .pyi type stubs for IDE support
4. #70 - PyPI wheel preparation
5. API reference generator tool
```
@ -259,7 +259,7 @@ Rendering Layer:
**Track A: Entity Systems**
- Entity/Grid integration (#30)
- Timer objects (NEW)
- Timer objects (#103)
- Vector/Color helpers (#93, #94)
**Track B: API Polish**
@ -270,7 +270,7 @@ Rendering Layer:
**Track C: Performance**
- Grid culling (#52)
- Visibility culling (part of #10)
- Profiling tools (NEW)
- Profiling tools (#104)
### 💎 **Quick Wins to Sprinkle Throughout**
1. Color helpers (#94) - 1 hour
@ -289,14 +289,14 @@ Rendering Layer:
### 🆕 **New Issues to Create**
1. **Timer Objects** - Pythonic timer management
1. **Timer Objects** - Pythonic timer management (#103)
2. **Event System Enhancement** - Mouse enter/leave, drag, right-click
3. **Resource Manager** - Centralized asset loading
4. **Serialization System** - Save/load game state
5. **Scene Transitions** - Fade, slide, custom effects
6. **Profiling Tools** - Performance metrics
7. **Particle System** - Visual effects framework
8. **Shader Support** - Custom rendering effects
5. **Scene Transitions** - Fade, slide, custom effects (#105)
6. **Profiling Tools** - Performance metrics (#104)
7. **Particle System** - Visual effects framework (#107)
8. **Shader Support** - Custom rendering effects (#106)
---
@ -312,6 +312,7 @@ Rendering Layer:
- [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*
@ -327,21 +328,6 @@ Rendering Layer:
---
## ✅ ALPHA 0.1 RELEASE ACHIEVED! (All Blockers Complete)
### ✅ All Alpha Requirements Complete!
- [x] **#69** - Collections use Python Sequence Protocol - *Completed! (2025-07-05)*
- [x] **#63** - Z-order rendering for UIDrawables - *Completed! (2025-07-05)*
- [x] **#59** - Animation system for arbitrary UIDrawable fields - *Completed! (2025-07-05)*
- [x] **#47** - New README.md for Alpha release - *Completed*
- [x] **#3** - Remove deprecated `McRFPy_API::player_input` - *Completed*
- [x] **#2** - Remove `registerPyAction` system - *Completed*
### 📋 Moved to Beta:
- [ ] **#6** - RenderTexture concept - *Moved to Beta (not needed for Alpha)*
---
## 🗂 ISSUE TRIAGE BY SYSTEM (78 Total Issues)
### 🎮 Core Engine Systems
@ -351,7 +337,7 @@ Rendering Layer:
- [x] **#69** ⚠️ **Alpha Blocker** - Sequence Protocol refactor - *Completed! (2025-07-05)*
#### Python/C++ Integration (7 issues)
- [ ] **#76** - UIEntity derived type preservation in collections - *Multiple Integrations*
- [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)*
@ -360,12 +346,12 @@ Rendering Layer:
- [ ] **#46** - Subinterpreter threading tests - *Multiple Integrations*
#### UI/Rendering System (12 issues)
- [ ] **#63** ⚠️ **Alpha Blocker** - Z-order for UIDrawables - *Multiple Integrations*
- [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*
- [ ] **#9** - UIGrid RenderTexture resize handling - *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*
@ -378,7 +364,7 @@ Rendering Layer:
- [ ] **#67** - Grid stitching for infinite worlds - *Extensive Overhaul*
- [ ] **#15** - UIGridPointState cleanup and standardization - *Multiple Integrations*
- [ ] **#20** - UIGrid get_grid_size standardization - *Multiple Integrations*
- [ ] **#12** - GridPoint/GridPointState forbid direct init - *Isolated Fix*
- [x] **#12** - GridPoint/GridPointState forbid direct init - *Isolated Fix*
#### Scene/Window Management (5 issues)
- [ ] **#61** - Scene object encapsulating key callbacks - *Extensive Overhaul*
@ -411,7 +397,7 @@ Rendering Layer:
### 📚 Demo & Documentation
#### Documentation (2 issues)
- [ ] **#47** ⚠️ **Alpha Blocker** - Alpha release README.md - *Isolated Fix*
- [x] **#47** ⚠️ **Alpha Blocker** - Alpha release README.md - *Isolated Fix*
- [ ] **#48** - Dependency compilation documentation - *Isolated Fix*
#### Demo Projects (6 issues)
@ -424,83 +410,6 @@ Rendering Layer:
---
## 🎯 RECOMMENDED TRIAGE SEQUENCE
### Phase 1: Foundation Stabilization (1-2 weeks)
```
✅ COMPLETE AS OF 2025-01-03:
1. ✅ Fix Grid Segfault - Grid now supports None/null textures
2. ✅ Fix #78 Middle Mouse Click bug - Event type checking added
3. ✅ Fix Entity/Sprite property setters - PyVector conversion fixed
4. ✅ Fix #77 - Error message copy/paste bug fixed
5. ✅ Fix #74 - Grid.grid_y property added
6. ✅ Fix keypressScene() validation - Now rejects non-callable
7. ✅ Fix Sprite texture setter - No longer returns error without exception
8. ✅ Fix PyVector x/y properties - Were returning None
REMAINING IN PHASE 1:
9. ✅ Fix #73 - Entity.index() method for removal
10. ✅ Fix #27 - EntityCollection.extend() method
11. ✅ Fix #33 - Sprite index validation
12. Alpha Blockers (#3, #2) - Remove deprecated methods
```
### Phase 2: Alpha Release Preparation (4-6 weeks)
```
1. Collections Sequence Protocol (#69) - Major refactor, alpha blocker
2. Z-order rendering (#63) - Essential UI improvement, alpha blocker
3. RenderTexture overhaul (#6) - Core rendering improvement, alpha blocker
4. ✅ Animation system (#59) - COMPLETE! 30+ easing functions, all UI properties
5. ✅ Documentation (#47) - README.md complete, #48 dependency docs remaining
```
### Phase 3: Engine Architecture (6-8 weeks)
```
1. Drawable base class (#71) - Clean up inheritance patterns
2. Entity/Grid associations (#30) - Proper lifecycle management
3. Window object (#34) - Scene/window architecture
4. UIDrawable visibility (#10) - Rendering optimization
```
### Phase 4: Advanced Features (8-12 weeks)
```
1. Grid strict mode (#16) - Entity knowledge/visibility system
2. SFML/TCOD integration (#14, #35) - Expose native libraries
3. Scene object refactor (#61) - Better input handling
4. Name-based finding (#39, #40, #41) - UI element management
5. Demo projects (#54, #55, #36) - Showcase capabilities
```
### Ongoing/Low Priority
```
- PyPI distribution (#70) - Community access
- Multiple windows (#62) - Advanced use cases
- Grid stitching (#67) - Infinite world support
- Accessibility (#45) - Important but not blocking
- Subinterpreter tests (#46) - Performance research
```
---
## 📊 DIFFICULTY ASSESSMENT SUMMARY
**Isolated Fixes (24 issues)**: Single file/function changes
- Bugfixes: #77, #74, #37, #78
- Simple features: #73, #52, #50, #33, #17, #38, #42, #27, #28, #26, #12, #1
- Cleanup: #3, #2, #21, #47, #48
**Multiple Integrations (28 issues)**: Cross-system changes
- UI/Rendering: #63, #8, #9, #19, #39, #40, #41
- Grid/Entity: #15, #20, #76, #46, #49, #75
- Features: #54, #55, #53, #45, #7
**Extensive Overhauls (26 issues)**: Major architectural changes
- Core Systems: #69, #59, #6, #10, #30, #16, #67, #61, #34, #62
- Integration: #71, #70, #32, #35, #14
- Advanced: #36, #65
---
## 🎮 STRATEGIC DIRECTION
### Engine Philosophy Maintained
@ -514,13 +423,6 @@ REMAINING IN PHASE 1:
3. **Resource Management**: RAII everywhere, proper lifecycle handling
4. **Multi-Platform**: Windows/Linux feature parity maintained
### Success Metrics for Alpha 0.1
- [ ] All Alpha Blocker issues resolved (5 of 7 complete: #69, #59, #47, #3, #2)
- [ ] Grid point iteration complete and tested
- [ ] Clean build on Windows and Linux
- [ ] Documentation sufficient for external developers
- [ ] At least one compelling demo (Wumpus or Jupyter integration)
---
## 📚 REFERENCES & CONTEXT
@ -544,8 +446,3 @@ REMAINING IN PHASE 1:
---
*Last Updated: 2025-07-05*
*Total Open Issues: 62* (from original 78)
*Alpha Status: 🎉 COMPLETE! All blockers resolved!*
*Achievement Unlocked: Alpha 0.1 Release Ready*
*Next Phase: Beta features including RenderTexture (#6), advanced UI patterns, and platform polish*