Files
Code_of_Conquest/godot_client/docs/GETTING_STARTED.md
2025-11-24 23:10:55 -06:00

382 lines
11 KiB
Markdown

# Getting Started with Godot Client
## Phase 1 Complete! ✓
The foundation for the Godot client is now in place. Here's what's been created:
### What's Built
**Project Structure**: Complete directory organization
**Core Services**: HTTPClient and StateManager singletons
**Theme System**: Color palette and styling utilities
**UI Components**: CustomButton, Card, FormField
**Documentation**: Architecture, themes, components, export
### Project Structure
```
godot_client/
├── project.godot # Main project file
├── README.md # Project overview
├── ARCHITECTURE.md # Architecture documentation
├── THEME_SETUP.md # Theme and font setup guide
├── EXPORT.md # Export configuration guide
├── GETTING_STARTED.md # This file
├── scenes/
│ ├── auth/ # Authentication screens (TODO)
│ ├── character/ # Character management (TODO)
│ ├── combat/ # Combat UI (TODO)
│ ├── world/ # World exploration (TODO)
│ └── components/ # Reusable UI components
│ └── README.md # Component documentation
├── scripts/
│ ├── services/
│ │ ├── http_client.gd # ✓ API communication service
│ │ └── state_manager.gd # ✓ Global state management
│ ├── models/ # Data models (TODO)
│ ├── utils/
│ │ └── theme_colors.gd # ✓ Color palette
│ └── components/
│ ├── custom_button.gd # ✓ Custom button component
│ ├── card.gd # ✓ Card container component
│ └── form_field.gd # ✓ Form input component
└── assets/
├── fonts/ # Fonts (TODO: download)
│ └── README.md # Font installation guide
├── themes/ # Theme resources (TODO: create in editor)
└── ui/ # UI assets (icons, etc.)
```
## Next Steps
### 1. Open Project in Godot
1. **Download Godot 4.5** from [godotengine.org](https://godotengine.org/)
2. **Launch Godot and import project**:
- Click "Import"
- Navigate to `godot_client/project.godot`
- Click "Import & Edit"
3. **Install export templates** (for exporting to platforms):
- Editor → Manage Export Templates
- Download and Install
### 2. Set Up Fonts
1. **Download fonts**:
- [Cinzel](https://fonts.google.com/specimen/Cinzel) - for headings
- [Lato](https://fonts.google.com/specimen/Lato) - for body text
2. **Copy to project**:
- Extract .ttf files
- Copy to `godot_client/assets/fonts/`
- Files needed:
- Cinzel-Regular.ttf, Cinzel-Medium.ttf, Cinzel-SemiBold.ttf, Cinzel-Bold.ttf
- Lato-Regular.ttf, Lato-Bold.ttf, Lato-Italic.ttf
3. **Reimport in Godot** (automatic, or click "Reimport" in FileSystem panel)
See `THEME_SETUP.md` for details.
### 3. Create Main Theme
1. **Create theme resource**:
- Right-click `assets/themes/` in Godot FileSystem
- New Resource → Theme
- Save as `main_theme.tres`
2. **Configure theme** (see `THEME_SETUP.md`):
- Set default font to Lato-Regular.ttf
- Configure button colors and styleboxes
- Configure panel styleboxes
- Configure input field styles
3. **Set project theme**:
- Project → Project Settings → GUI → Theme
- Set Custom Theme to `res://assets/themes/main_theme.tres`
### 4. Configure Backend URL
Edit `scripts/services/http_client.gd`:
```gdscript
# Line 16
const API_BASE_URL := "http://localhost:5000" # Change if needed
```
For production, you might use:
- `https://api.codeofconquest.com`
- Or make it configurable via settings
### 5. Create Main Scene
Create `scenes/main.tscn`:
1. **Scene → New Scene**
2. **Root node**: Control
3. **Add script**: `scripts/main.gd`
**main.gd**:
```gdscript
extends Control
func _ready() -> void:
print("Code of Conquest starting...")
# Check if authenticated
if StateManager.is_authenticated():
print("User authenticated, loading character list...")
# TODO: Navigate to character list
else:
print("Not authenticated, showing login...")
# TODO: Navigate to login
```
4. **Set as main scene**:
- Project → Project Settings → Application → Run
- Set Main Scene to `res://scenes/main.tscn`
### 6. Test Services
Create a test scene to verify services work:
**scenes/test_services.tscn**:
- Root: Control
- Add: Button ("Test API")
**test_services.gd**:
```gdscript
extends Control
@onready var test_button = $TestButton
func _ready():
test_button.pressed.connect(_on_test_clicked)
func _on_test_clicked():
print("Testing HTTPClient...")
# Test API call (replace with real endpoint)
# Note: Can use HTTPClient directly in _ready() or later
HTTPClient.http_get("/api/v1/health", _on_api_success, _on_api_error)
# Alternative (always works):
# get_node("/root/HTTPClient").http_get("/api/v1/health", _on_api_success, _on_api_error)
func _on_api_success(response):
print("API Success!")
print("Status: ", response.status)
print("Result: ", response.result)
func _on_api_error(response):
print("API Error!")
print("Error: ", response.get_error_message())
```
**Note**: If you get "Static function not found" errors, use `get_node("/root/HTTPClient")` instead of direct `HTTPClient` access.
Run this scene (F6) and click the button to test API connectivity.
## Phase 2: Authentication Screens
Once the foundation is set up, proceed with Phase 2 (Week 2):
### Auth Screens to Build
1. **Login Screen** (`scenes/auth/login.tscn`)
- Email and password fields (using FormField)
- Login button (using CustomButton)
- Links to register and forgot password
2. **Register Screen** (`scenes/auth/register.tscn`)
- Email, password, confirm password
- Validation
- Register button
3. **Forgot Password** (`scenes/auth/forgot_password.tscn`)
- Email field
- Send reset link button
4. **Reset Password** (`scenes/auth/reset_password.tscn`)
- New password and confirm
- Reset button
5. **Email Verification** (`scenes/auth/verify_email.tscn`)
- Verification status display
### Example: Login Screen
1. **Create scene**: `scenes/auth/login.tscn`
2. **Root**: Control node
3. **Add**:
- Card container (center of screen)
- FormField for email
- FormField for password
- CustomButton for login
- Label for errors
4. **Attach script**: `scenes/auth/login.gd`
See `ARCHITECTURE.md` for complete login implementation example.
## Helpful Resources
### Documentation Created
- **README.md** - Project overview, setup, and development guide
- **ARCHITECTURE.md** - Complete architecture documentation with examples
- **THEME_SETUP.md** - Theme creation and font setup
- **EXPORT.md** - Platform export configuration
- **scenes/components/README.md** - UI component guide
### External Resources
- [Godot Documentation](https://docs.godotengine.org/en/stable/)
- [GDScript Reference](https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html)
- [Godot UI Tutorials](https://docs.godotengine.org/en/stable/tutorials/ui/index.html)
## Common Issues
### "Autoload not found" error
**Problem**: HTTPClient or StateManager not found
**Solution**: Check `project.godot` has these lines in `[autoload]` section:
```
HTTPClient="*res://scripts/services/http_client.gd"
StateManager="*res://scripts/services/state_manager.gd"
```
### "Class ThemeColors not found"
**Problem**: ThemeColors class not recognized
**Solution**:
1. Check file exists at `scripts/utils/theme_colors.gd`
2. Restart Godot (to refresh script cache)
3. Ensure `class_name ThemeColors` is at top of file
### API calls failing
**Problem**: HTTPClient can't connect to Flask backend
**Solution**:
1. Ensure Flask backend is running on `localhost:5000`
2. Check `API_BASE_URL` in `http_client.gd`
3. Check Flask CORS settings if running on different port/domain
### Fonts not showing
**Problem**: Custom fonts not displaying
**Solution**:
1. Ensure .ttf files are in `assets/fonts/`
2. Check font imports (click font in FileSystem)
3. Verify theme is set in Project Settings
## Development Workflow
### Typical Development Session
1. **Start Flask backend**:
```bash
cd /home/ptarrant/repos/coc
source venv/bin/activate
python -m flask run
```
2. **Open Godot project**:
- Launch Godot
- Open `godot_client`
3. **Work on scene**:
- Edit scene in Godot editor
- Attach/edit scripts
- Test with F6 (run scene) or F5 (run project)
4. **Debug**:
- Check Output panel for print statements
- Check Debugger panel for errors
- Use Godot debugger (breakpoints, step through)
5. **Test on device**:
- Export to platform (see `EXPORT.md`)
- Test on real device
### Git Workflow
```bash
# Create feature branch
git checkout -b feature/login-screen
# Work on feature
# (edit files in Godot)
# Commit changes
git add godot_client/
git commit -m "feat: implement login screen UI"
# Merge to dev
git checkout dev
git merge feature/login-screen
# When ready for production
git checkout master
git merge dev
```
## Testing
### Manual Testing Checklist
Before each release:
- [ ] Login/logout works
- [ ] Character creation works
- [ ] Character list displays correctly
- [ ] API errors are handled gracefully
- [ ] Network errors show user-friendly messages
- [ ] State persists after app restart
- [ ] Works on Windows
- [ ] Works on macOS
- [ ] Works on Linux
- [ ] Works on Android
- [ ] Works on iOS
- [ ] Works in web browser
### Performance Checklist
- [ ] App starts in < 3 seconds
- [ ] API calls complete in < 5 seconds
- [ ] UI is responsive (no lag)
- [ ] Memory usage is reasonable
- [ ] Battery usage is acceptable (mobile)
## Estimated Timeline
- **Phase 1: Foundation** - ✅ Complete
- **Phase 2: Authentication** (Week 2) - Ready to start
- **Phase 3: Character Management** (Weeks 3-4) - Documented
- **Phase 4: Platform Optimization** (Week 5) - Planned
- **Phase 5: Future Features** (Week 6+) - Ongoing
With full-time focus, you should have a working app with auth and character management in 4-5 weeks.
## Questions?
- Check documentation in this directory
- Read Godot documentation
- Check Flask backend API documentation in `/docs`
## Ready to Start?
1. ✅ Open project in Godot
2. ✅ Download and install fonts
3. ✅ Create main theme
4. ✅ Configure backend URL
5. ✅ Create main scene
6. ✅ Test services
7. 🚀 Start building auth screens!
Good luck with the migration! The foundation is solid, and you're ready to build out the UI.