# 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.