AeThex-Engine-Core/docs/API_REFERENCE.md
2026-02-24 05:02:32 +00:00

718 lines
14 KiB
Markdown

# AeThex API Reference
Complete reference for AeThex-specific features and APIs.
## Table of Contents
- [Cloud Services](#cloud-services)
- [AI Assistant](#ai-assistant)
- [Studio Bridge](#studio-bridge)
- [Multiplayer](#multiplayer)
- [Authentication](#authentication)
- [Cloud Saves](#cloud-saves)
- [Analytics](#analytics)
---
## Cloud Services
### AeThexCloud Singleton
Global singleton for all cloud operations.
```gdscript
# Available everywhere as 'AeThexCloud'
var cloud = AeThexCloud
```
#### Methods
##### `connect_to_cloud() -> bool`
Establish connection to AeThex cloud services.
```gdscript
func _ready():
if AeThexCloud.connect_to_cloud():
print("Connected to cloud!")
else:
print("Connection failed")
```
**Returns:** `true` if connection successful
---
##### `get_connection_status() -> String`
Get current cloud connection status.
```gdscript
var status = AeThexCloud.get_connection_status()
# Returns: "connected", "disconnected", "connecting", "error"
```
---
##### `disconnect_from_cloud()`
Disconnect from cloud services.
```gdscript
func _exit_tree():
AeThexCloud.disconnect_from_cloud()
```
---
## Multiplayer
### Quick Setup (3 Lines)
```gdscript
extends Node
func _ready():
# That's it - multiplayer is ready!
AeThexMultiplayer.create_room("my-game-room")
AeThexMultiplayer.connect("player_joined", self, "_on_player_joined")
AeThexMultiplayer.connect("player_left", self, "_on_player_left")
func _on_player_joined(player_id: int):
print("Player %d joined!" % player_id)
func _on_player_left(player_id: int):
print("Player %d left" % player_id)
```
### AeThexMultiplayer Singleton
#### Methods
##### `create_room(room_name: String, max_players: int = 8) -> bool`
Create a new multiplayer room.
```gdscript
var success = AeThexMultiplayer.create_room("lobby-1", 4)
if success:
print("Room created! Code:", AeThexMultiplayer.get_room_code())
```
**Parameters:**
- `room_name` - Unique room identifier
- `max_players` - Maximum players allowed (default: 8)
**Returns:** `true` if room created successfully
---
##### `join_room(room_code: String) -> bool`
Join an existing room using a room code.
```gdscript
func join_clicked():
var code = $RoomCodeInput.text
if AeThexMultiplayer.join_room(code):
get_tree().change_scene("res://game.tscn")
```
**Returns:** `true` if join successful
---
##### `get_room_code() -> String`
Get the current room's join code.
```gdscript
var code = AeThexMultiplayer.get_room_code()
$CodeLabel.text = "Code: " + code
```
---
##### `leave_room()`
Leave current multiplayer session.
```gdscript
func quit_to_menu():
AeThexMultiplayer.leave_room()
get_tree().change_scene("res://menu.tscn")
```
---
##### `get_players() -> Array`
Get list of all players in room.
```gdscript
var players = AeThexMultiplayer.get_players()
for player in players:
print("Player ID:", player.id)
print("Username:", player.username)
print("Is Ready:", player.is_ready)
```
**Returns:** Array of player dictionaries with:
- `id` (int) - Unique player ID
- `username` (String) - Display name
- `is_ready` (bool) - Ready status
- `ping` (int) - Latency in ms
---
##### `send_message(type: String, data: Dictionary)`
Send custom message to all players.
```gdscript
func shoot_projectile(position: Vector2, direction: Vector2):
AeThexMultiplayer.send_message("projectile_spawn", {
"position": position,
"direction": direction,
"owner_id": get_tree().get_network_unique_id()
})
```
---
#### Signals
##### `player_joined(player_id: int)`
Emitted when a player joins the room.
```gdscript
func _on_player_joined(player_id):
var player_node = spawn_player(player_id)
$PlayersNode.add_child(player_node)
```
---
##### `player_left(player_id: int)`
Emitted when a player leaves.
```gdscript
func _on_player_left(player_id):
var player = $PlayersNode.get_node(str(player_id))
if player:
player.queue_free()
```
---
##### `room_closed()`
Emitted when room host closes the room.
```gdscript
func _on_room_closed():
show_message("Host closed the room")
get_tree().change_scene("res://menu.tscn")
```
---
##### `message_received(from_id: int, type: String, data: Dictionary)`
Emitted when custom message is received.
```gdscript
func _on_message_received(from_id, type, data):
match type:
"projectile_spawn":
spawn_projectile(data.position, data.direction)
"chat_message":
add_chat_message(data.username, data.text)
```
---
### RPC Alternative
Standard RPC syntax works automatically with AeThex multiplayer:
```gdscript
# Define synchronized variable
puppet var position = Vector2()
# Call remote function
rpc("update_position", global_position)
# Remote function
remote func update_position(new_pos):
position = new_pos
```
---
## Authentication
### AeThexAuth Singleton
#### Methods
##### `login_with_email(email: String, password: String) -> Dictionary`
Login with email and password.
```gdscript
func login_clicked():
var result = await AeThexAuth.login_with_email(
$EmailInput.text,
$PasswordInput.text
)
if result.success:
print("Logged in as:", result.user.username)
get_tree().change_scene("res://menu.tscn")
else:
$ErrorLabel.text = result.error
```
**Returns:** Dictionary with:
- `success` (bool)
- `user` (Dictionary) - User info if successful
- `error` (String) - Error message if failed
---
##### `login_as_guest() -> Dictionary`
Create temporary guest account.
```gdscript
func play_as_guest():
var result = await AeThexAuth.login_as_guest()
if result.success:
start_game()
```
---
##### `login_with_google() -> Dictionary`
OAuth login with Google.
```gdscript
func google_login_clicked():
var result = await AeThexAuth.login_with_google()
if result.success:
start_game()
```
---
##### `register(email: String, password: String, username: String) -> Dictionary`
Create new account.
```gdscript
func register_clicked():
var result = await AeThexAuth.register(
$EmailInput.text,
$PasswordInput.text,
$UsernameInput.text
)
if result.success:
print("Account created!")
else:
show_error(result.error)
```
---
##### `logout()`
Log out current user.
```gdscript
func logout_clicked():
AeThexAuth.logout()
get_tree().change_scene("res://login.tscn")
```
---
##### `get_current_user() -> Dictionary`
Get currently logged in user.
```gdscript
var user = AeThexAuth.get_current_user()
if user:
$UsernameLabel.text = user.username
$AvatarTexture.texture = load_avatar(user.avatar_url)
```
**Returns:** Dictionary with:
- `id` (String) - User ID
- `username` (String) - Display name
- `email` (String) - Email address
- `avatar_url` (String) - Avatar image URL
- `is_guest` (bool) - Whether guest account
---
##### `is_logged_in() -> bool`
Check if user is logged in.
```gdscript
func _ready():
if not AeThexAuth.is_logged_in():
get_tree().change_scene("res://login.tscn")
```
---
## Cloud Saves
### AeThexSaves Singleton
Automatic cloud save synchronization.
#### Methods
##### `save_game(slot: String, data: Dictionary) -> bool`
Save game data to cloud.
```gdscript
func save_game():
var save_data = {
"level": current_level,
"health": player.health,
"inventory": player.inventory,
"position": {
"x": player.position.x,
"y": player.position.y
}
}
if AeThexSaves.save_game("slot_1", save_data):
print("Game saved!")
else:
print("Save failed")
```
**Parameters:**
- `slot` - Save slot name (e.g., "slot_1", "autosave")
- `data` - Dictionary of game data (auto-serialized)
**Returns:** `true` if save successful
---
##### `load_game(slot: String) -> Dictionary`
Load game data from cloud.
```gdscript
func load_game():
var data = await AeThexSaves.load_game("slot_1")
if data:
current_level = data.level
player.health = data.health
player.inventory = data.inventory
player.position = Vector2(data.position.x, data.position.y)
print("Game loaded!")
else:
print("No save found")
```
**Returns:** Dictionary with save data, or `null` if not found
---
##### `get_save_slots() -> Array`
List all available save slots.
```gdscript
func show_load_menu():
var slots = await AeThexSaves.get_save_slots()
for slot in slots:
var button = SaveSlotButton.new()
button.text = slot.name
button.metadata = slot.timestamp
$SavesList.add_child(button)
```
**Returns:** Array of dictionaries with:
- `name` (String) - Slot name
- `timestamp` (int) - Unix timestamp
- `size_bytes` (int) - Save file size
---
##### `delete_save(slot: String) -> bool`
Delete a save slot.
```gdscript
func delete_clicked():
if AeThexSaves.delete_save("slot_1"):
print("Save deleted")
```
---
##### `set_auto_save(enabled: bool, interval: float = 60.0)`
Configure automatic saving.
```gdscript
func _ready():
# Auto-save every 2 minutes
AeThexSaves.set_auto_save(true, 120.0)
```
**Parameters:**
- `enabled` - Whether auto-save is active
- `interval` - Seconds between auto-saves (default: 60)
---
#### Signals
##### `save_completed(slot: String)`
Emitted when save finishes.
```gdscript
func _ready():
AeThexSaves.connect("save_completed", self, "_on_save_done")
func _on_save_done(slot):
show_notification("Game saved!")
```
---
##### `sync_started()`
Emitted when cloud sync begins.
```gdscript
func _on_sync_started():
$SyncIndicator.visible = true
```
---
##### `sync_completed()`
Emitted when cloud sync finishes.
```gdscript
func _on_sync_completed():
$SyncIndicator.visible = false
```
---
## AI Assistant
### AeThexAI Singleton
In-game AI help and code generation.
#### Methods
##### `ask_question(question: String) -> String`
Get AI answer to a question.
```gdscript
func help_button_clicked():
var answer = await AeThexAI.ask_question(
"How do I add a jump mechanic?"
)
$HelpText.text = answer
```
---
##### `generate_code(prompt: String, language: String = "gdscript") -> String`
Generate code from description.
```gdscript
func generate_clicked():
var code = await AeThexAI.generate_code(
"Create a health bar that decreases when player takes damage",
"gdscript"
)
$CodeEditor.text = code
```
**Parameters:**
- `prompt` - Description of desired code
- `language` - "gdscript", "csharp", or "cpp"
---
##### `explain_code(code: String) -> String`
Get explanation of code.
```gdscript
func explain_clicked():
var explanation = await AeThexAI.explain_code($CodeEditor.text)
$ExplanationLabel.text = explanation
```
---
##### `suggest_fix(error_message: String, code: String) -> String`
Get suggestion for fixing an error.
```gdscript
func _on_error_occurred(error):
var fix = await AeThexAI.suggest_fix(error, $CodeEditor.text)
show_suggestion_popup(fix)
```
---
## Analytics
### AeThexAnalytics Singleton
Track game events and player behavior.
#### Methods
##### `track_event(event_name: String, properties: Dictionary = {})`
Log custom event.
```gdscript
func level_completed():
AeThexAnalytics.track_event("level_complete", {
"level": current_level,
"time_seconds": level_time,
"score": player_score
})
```
---
##### `track_screen(screen_name: String)`
Track screen view.
```gdscript
func _ready():
AeThexAnalytics.track_screen("main_menu")
```
---
##### `set_user_property(key: String, value)`
Set user attribute.
```gdscript
func _ready():
AeThexAnalytics.set_user_property("player_level", 5)
AeThexAnalytics.set_user_property("vip_status", true)
```
---
## Studio Bridge
### AeThexStudio Singleton
Communicate with Studio IDE.
#### Methods
##### `send_to_studio(command: String, args: Dictionary = {})`
Send command to Studio.
```gdscript
func debug_node():
AeThexStudio.send_to_studio("highlight_node", {
"path": get_path()
})
```
---
##### `log_message(message: String, type: String = "info")`
Send log message to Studio console.
```gdscript
func custom_log(msg):
AeThexStudio.log_message(msg, "debug")
# Types: "info", "warning", "error", "debug"
```
---
## Environment Variables
Configure AeThex through environment variables:
```bash
# Cloud API endpoint
export AETHEX_API_URL="https://api.aethex.games"
# Disable cloud features
export AETHEX_OFFLINE_MODE="true"
# Studio connection
export AETHEX_STUDIO_PORT="9002"
# Debug logging
export AETHEX_DEBUG="true"
```
Or in project settings:
```gdscript
# project.godot
[aethex]
api_url="https://api.aethex.games"
offline_mode=false
studio_port=9002
debug_mode=false
```
---
## Error Codes
Common error codes and solutions:
| Code | Meaning | Solution |
|------|---------|----------|
| `CLOUD_001` | Connection timeout | Check internet connection |
| `CLOUD_002` | Authentication failed | Re-login required |
| `CLOUD_003` | Rate limit exceeded | Wait and retry |
| `MP_001` | Room full | Join different room |
| `MP_002` | Invalid room code | Check code and retry |
| `SAVE_001` | Save quota exceeded | Delete old saves |
| `AUTH_001` | Invalid credentials | Check email/password |
| `AUTH_002` | Account exists | Use different email |
---
## Best Practices
### Connection Management
```gdscript
func _ready():
# Always check connection before cloud operations
if not AeThexCloud.is_connected():
AeThexCloud.connect_to_cloud()
await AeThexCloud.connection_established
```
### Error Handling
```gdscript
func save_game():
var result = AeThexSaves.save_game("slot_1", data)
if not result:
# Fallback to local save
save_locally(data)
```
### Multiplayer State Sync
```gdscript
# Use @rpc for automatic synchronization
@rpc("any_peer", "reliable")
func update_position(pos: Vector2):
position = pos
func _physics_process(delta):
if is_multiplayer_master():
rpc("update_position", position)
```
---
## See Also
- [Getting Started Guide](../GETTING_STARTED.md)
- [Cloud Services Architecture](CLOUD_SERVICES_ARCHITECTURE.md)
- [Multiplayer Tutorial](tutorials/MULTIPLAYER_TUTORIAL.md)
- [Studio Bridge Guide](STUDIO_BRIDGE_GUIDE.md)