feat: setup initial repo and smallest working scene

This commit is contained in:
Rijad Zuzo
2026-06-17 19:39:38 +02:00
commit 20027bed4b
11 changed files with 309 additions and 0 deletions
+4
View File
@@ -0,0 +1,4 @@
root = true
[*]
charset = utf-8
+7
View File
@@ -0,0 +1,7 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
*.gd text eol=lf
*.tscn text eol=lf
*.tres text eol=lf
*.shader text eol=lf
*.gdshader text eol=lf
+44
View File
@@ -0,0 +1,44 @@
# Godot import cache
.import/
# Godot editor generated files
.godot/
# Export templates and builds
/export/
/exports/
/build/
/builds/
# Mono / C#
.mono/
data_*/
mono_crash.*
# Visual Studio / Rider
.vs/
.idea/
*.csproj
*.sln
*.user
*.DotSettings.user
# macOS
.DS_Store
# Linux
.directory
# Windows
Thumbs.db
desktop.ini
# Logs
*.log
# Temporary files
*.tmp
*.bak
# Godot crash reports
crash_handler*
+1
View File
@@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128"><rect width="124" height="124" x="2" y="2" fill="#363d52" stroke="#212532" stroke-width="4" rx="14"/><g fill="#fff" transform="translate(12.322 12.322)scale(.101)"><path d="M105 673v33q407 354 814 0v-33z"/><path fill="#478cbf" d="m105 673 152 14q12 1 15 14l4 67 132 10 8-61q2-11 15-15h162q13 4 15 15l8 61 132-10 4-67q3-13 15-14l152-14V427q30-39 56-81-35-59-83-108-43 20-82 47-40-37-88-64 7-51 8-102-59-28-123-42-26 43-46 89-49-7-98 0-20-46-46-89-64 14-123 42 1 51 8 102-48 27-88 64-39-27-82-47-48 49-83 108 26 42 56 81zm0 33v39c0 276 813 276 814 0v-39l-134 12-5 69q-2 10-14 13l-162 11q-12 0-16-11l-10-65H446l-10 65q-4 11-16 11l-162-11q-12-3-14-13l-5-69z"/><path d="M483 600c0 34 58 34 58 0v-86c0-34-58-34-58 0z"/><circle cx="725" cy="526" r="90"/><circle cx="299" cy="526" r="90"/></g><g fill="#414042" transform="translate(12.322 12.322)scale(.101)"><circle cx="307" cy="532" r="60"/><circle cx="717" cy="532" r="60"/></g></svg>

After

Width:  |  Height:  |  Size: 995 B

+43
View File
@@ -0,0 +1,43 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cvx06gdtgk2fp"
path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://icon.svg"
dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false
+39
View File
@@ -0,0 +1,39 @@
; Engine configuration file.
; It's best edited using the editor UI and not directly,
; since the parameters that go here are not all obvious.
;
; Format:
; [section] ; section goes between []
; param=value ; assign values to parameters
config_version=5
[application]
config/name="the-steward"
run/main_scene="uid://rs3hv73svbpa"
config/features=PackedStringArray("4.5", "Forward Plus")
config/icon="res://icon.svg"
[input]
move_forward={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":87,"key_label":0,"unicode":119,"location":0,"echo":false,"script":null)
]
}
move_backward={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":83,"key_label":0,"unicode":115,"location":0,"echo":false,"script":null)
]
}
move_left={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":65,"key_label":0,"unicode":97,"location":0,"echo":false,"script":null)
]
}
move_right={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":68,"key_label":0,"unicode":100,"location":0,"echo":false,"script":null)
]
}
+74
View File
@@ -0,0 +1,74 @@
[gd_scene load_steps=9 format=3 uid="uid://rs3hv73svbpa"]
[ext_resource type="Script" uid="uid://4mg67crlim53" path="res://scenes/player/player.gd" id="1_o5qli"]
[ext_resource type="Script" uid="uid://ii8ai801jur2" path="res://scenes/player/camera_rig.gd" id="2_0wfyh"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_o5qli"]
albedo_color = Color(0.16862746, 0.52156866, 0.30588236, 1)
[sub_resource type="BoxMesh" id="BoxMesh_sgp6g"]
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_o5qli"]
radius = 0.4
height = 1.7
[sub_resource type="CapsuleMesh" id="CapsuleMesh_sgp6g"]
[sub_resource type="BoxMesh" id="BoxMesh_0wfyh"]
[sub_resource type="Environment" id="Environment_o5qli"]
background_mode = 1
background_color = Color(0.46428233, 0.7990817, 0.98692364, 1)
ambient_light_source = 2
ambient_light_color = Color(1, 1, 1, 1)
ambient_light_energy = 0.5
[node name="Main" type="Node3D"]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
transform = Transform3D(0.8660254, -0.43301272, 0.24999999, 0, 0.49999997, 0.86602545, -0.5, -0.75, 0.43301266, 0, 0, 0)
light_energy = 2.0
[node name="World" type="Node3D" parent="."]
[node name="Ground" type="MeshInstance3D" parent="World"]
transform = Transform3D(30, 0, 0, 0, 0.1, 0, 0, 0, 30, 0, -0.05, 0)
material_override = SubResource("StandardMaterial3D_o5qli")
mesh = SubResource("BoxMesh_sgp6g")
[node name="Player" type="CharacterBody3D" parent="." node_paths=PackedStringArray("camera_rig")]
script = ExtResource("1_o5qli")
camera_rig = NodePath("../CameraRig")
[node name="CollisionShape3D" type="CollisionShape3D" parent="Player"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
shape = SubResource("CapsuleShape3D_o5qli")
[node name="MeshInstance3D" type="MeshInstance3D" parent="Player"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.85, 0)
mesh = SubResource("CapsuleMesh_sgp6g")
[node name="FaceMarker" type="MeshInstance3D" parent="Player"]
transform = Transform3D(0.15, 0, 0, 0, 0.15, 0, 0, 0, 0.4, 0, 1.2, 0.6266626)
mesh = SubResource("BoxMesh_0wfyh")
[node name="CameraRig" type="Node3D" parent="." node_paths=PackedStringArray("target")]
transform = Transform3D(1, 0, 0, 0, 0.57357645, 0.81915206, 0, -0.81915206, 0.57357645, 0, 10, 8)
script = ExtResource("2_0wfyh")
target = NodePath("../Player")
follow_speed = 8.0
deadzone_right = 2.0
deadzone_forward = 2.0
[node name="Camera3D" type="Camera3D" parent="CameraRig"]
current = true
fov = 65.0
[node name="SimulationManager" type="Node" parent="."]
[node name="WorldViewManager" type="Node" parent="."]
[node name="EventBus" type="Node" parent="."]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_o5qli")
+58
View File
@@ -0,0 +1,58 @@
extends Node3D
@export var target: Node3D
@export var follow_offset := Vector3(0, 10, 8)
@export var follow_speed := 12.0
@export var mouse_sensitivity := 0.002
@export var deadzone_right := 3.0
@export var deadzone_forward := 3.0
var yaw := 0.0
var focus_position := Vector3.ZERO
func _ready() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
if target:
focus_position = target.global_position
global_position = focus_position + follow_offset
func _unhandled_input(event: InputEvent) -> void:
if event is InputEventMouseMotion:
yaw -= event.relative.x * mouse_sensitivity
if event.is_action_pressed("ui_cancel"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
func _process(delta: float) -> void:
if target == null:
return
rotation = Vector3(deg_to_rad(-55), yaw, 0)
var target_pos := target.global_position
var diff := target_pos - focus_position
# Camera-relative horizontal axes
var cam_right := Vector3.RIGHT.rotated(Vector3.UP, yaw).normalized()
var cam_forward := Vector3.FORWARD.rotated(Vector3.UP, yaw).normalized()
var diff_right := diff.dot(cam_right)
var diff_forward := diff.dot(cam_forward)
if abs(diff_right) > deadzone_right:
focus_position += cam_right * (diff_right - sign(diff_right) * deadzone_right)
if abs(diff_forward) > deadzone_forward:
focus_position += cam_forward * (diff_forward - sign(diff_forward) * deadzone_forward)
var rotated_offset := follow_offset.rotated(Vector3.UP, yaw)
var desired_position := focus_position + rotated_offset
global_position = global_position.lerp(
desired_position,
1.0 - exp(-follow_speed * delta)
)
+1
View File
@@ -0,0 +1 @@
uid://ii8ai801jur2
+37
View File
@@ -0,0 +1,37 @@
extends CharacterBody3D
@export var move_speed := 7.0
@export var acceleration := 18.0
@export var rotation_speed := 12.0
@export var camera_rig: Node3D
func _physics_process(delta: float) -> void:
var input := Input.get_vector(
"move_left",
"move_right",
"move_forward",
"move_backward"
)
var forward := -camera_rig.global_transform.basis.z
var right := camera_rig.global_transform.basis.x
forward.y = 0
right.y = 0
forward = forward.normalized()
right = right.normalized()
var direction := (right * input.x + forward * -input.y).normalized()
var target_velocity := direction * move_speed
velocity.x = move_toward(velocity.x, target_velocity.x, acceleration * delta)
velocity.z = move_toward(velocity.z, target_velocity.z, acceleration * delta)
velocity.y = 0.0
move_and_slide()
if direction.length() > 0.01:
var target_angle := atan2(direction.x, direction.z)
rotation.y = lerp_angle(rotation.y, target_angle, rotation_speed * delta)
+1
View File
@@ -0,0 +1 @@
uid://4mg67crlim53