# Godot Comparison SimVX's API is modeled on Godot but uses Pythonic conventions. This table maps common Godot patterns to their SimVX equivalents. ## API Mapping | Godot (GDScript) | SimVX (Python) | Notes | |-------------------|----------------|-------| | `@export var speed = 5.0` | `speed = Property(5.0)` | `Setting` is a kept alias for `Property` | | `signal health_changed` | `health_changed = Signal()` | Same observable pattern | | `health_changed.connect(fn)` | `conn = health_changed.connect(fn)` | Returns `Connection` with `disconnect()` | | `health_changed.connect(fn, CONNECT_ONE_SHOT)` | `health_changed.connect(fn, once=True)` | Auto-disconnects after first emit | | `func _ready():` | `def ready(self):` | No underscore prefix | | `func _process(delta):` | `def process(self, dt):` | Same | | `func _physics_process(delta):` | `def physics_process(self, dt):` | Same | | `$Player/Camera` | `self["Player/Camera"]` | `__getitem__` with slash paths | | `get_node("Player")` | `self.get_node("Player")` | Also works | | `get_tree()` | `self.tree` | Property; `get_tree()` kept as alias | | `queue_free()` | `self.destroy()` | `queue_free()` kept as alias | | `get_node("../Sibling")` | `self.get_node("../Sibling")` | Relative paths supported | | `is_in_group("enemies")` | `self.is_in_group("enemies")` | Same | | `add_to_group("enemies")` | `self.add_to_group("enemies")` | Same | ## Structural Differences - **Language**: Pure Python 3.13+ instead of GDScript/C#. Standard Python tooling (pytest, mypy, ruff) applies. - **Rendering**: Vulkan only. No OpenGL fallback. GPU-driven with multi-draw indirect -- no per-object draw calls. - **Math**: `Vec2`/`Vec3` are `numpy.ndarray` subclasses. All rotation APIs use **degrees** (not radians). - **Input**: Typed enum keys only -- `InputMap.add_action("jump", [Key.SPACE])`. No string-based legacy API. - **Scenes**: JSON serialization via `save_scene()`/`load_scene()`. No `.tscn`/`.tres` format. - **Coroutines**: Generator-based (`yield from wait(0.5)`) instead of `await`. No async/await runtime. ## Import Pattern ```python from simvx.core import Node, Node3D, Camera3D, MeshInstance3D from simvx.core import Property, Signal, Vec3, Mesh, Material from simvx.core import InputMap, Key, Input from simvx.graphics import App ``` The API is still evolving. When something feels awkward compared to Godot, the engine should be improved rather than worked around.