Files
tekton/addons/godot_ai/handlers/camera_presets.gd

82 lines
2.2 KiB
GDScript

@tool
extends RefCounted
## Opinionated Camera2D / Camera3D presets.
##
## build(preset_name, overrides) -> {default_type, properties} | null
## properties are merged with caller overrides (overrides win).
const _PRESETS := {
# Top-down roguelite / arena — damped follow feel, drag deadzone.
"topdown_2d": {
"default_type": "2d",
"properties": {
"zoom": {"x": 2.0, "y": 2.0},
"anchor_mode": "drag_center",
"position_smoothing_enabled": true,
"position_smoothing_speed": 5.0,
"rotation_smoothing_enabled": false,
"drag_horizontal_enabled": true,
"drag_vertical_enabled": true,
"drag_left_margin": 0.2,
"drag_right_margin": 0.2,
"drag_top_margin": 0.2,
"drag_bottom_margin": 0.2,
},
},
# Platformer — tight horizontal follow, vertical snap with smoothing on.
"platformer_2d": {
"default_type": "2d",
"properties": {
"zoom": {"x": 1.5, "y": 1.5},
"anchor_mode": "drag_center",
"position_smoothing_enabled": true,
"position_smoothing_speed": 8.0,
"drag_horizontal_enabled": true,
"drag_vertical_enabled": false,
"drag_left_margin": 0.15,
"drag_right_margin": 0.15,
},
},
# Cinematic 3D — narrow FOV, long range. Good for dramatic wide shots.
"cinematic_3d": {
"default_type": "3d",
"properties": {
"fov": 40.0,
"near": 0.1,
"far": 500.0,
"projection": "perspective",
},
},
# Action 3D — wider FOV for first/third-person action gameplay.
"action_3d": {
"default_type": "3d",
"properties": {
"fov": 70.0,
"near": 0.1,
"far": 200.0,
"projection": "perspective",
},
},
}
static func list_presets() -> Array:
return _PRESETS.keys()
## Build a preset blueprint. Returns null if preset_name is unknown.
## overrides is merged on top of preset defaults (caller values win).
static func build(preset_name: String, overrides: Dictionary) -> Variant:
if not _PRESETS.has(preset_name):
return null
var preset: Dictionary = _PRESETS[preset_name]
var properties: Dictionary = (preset.get("properties", {}) as Dictionary).duplicate(true)
for key in overrides:
properties[key] = overrides[key]
return {
"default_type": preset.get("default_type", "2d"),
"properties": properties,
}