382 lines
11 KiB
Markdown
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.
|