M0: Scaffold Theriapolis.Godot project (hello-world)

First milestone of the Godot port. Establishes the new project structure
and verifies the toolchain is wired up end-to-end.

- Godot.NET.Sdk/4.6.2 targeting net8.0; references Theriapolis.Core
- project.godot configured for borderless fullscreen at native resolution
  (per port plan §10 resolved decisions); F11 toggles to windowed
- Main.tscn + Main.cs hello-world; nearest-neighbor texture filtering
- icon.svg placeholder (T in gild on dark)
- Added to Theriapolis.sln

Verification:
- dotnet build Theriapolis.Godot.csproj: 0 errors, 0 warnings
- dotnet build Theriapolis.sln: 0 errors (6 pre-existing warnings unrelated)
- dotnet test: 708/708 pass in 26s (unchanged from master)
- Godot 4.6.2 opens project; fullscreen + F11 toggle confirmed visually

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Christopher Wiebe
2026-04-30 20:52:35 -07:00
parent b451f83174
commit 59e86af7a2
6 changed files with 162 additions and 1 deletions
+23
View File
@@ -0,0 +1,23 @@
using Godot;
namespace Theriapolis.GodotHost;
public partial class Main : Node
{
public override void _Ready()
{
GD.Print("Theriapolis.Godot host ready (M0 hello-world).");
}
public override void _UnhandledInput(InputEvent @event)
{
if (@event.IsActionPressed("ui_toggle_fullscreen"))
{
var mode = DisplayServer.WindowGetMode();
DisplayServer.WindowSetMode(
mode == DisplayServer.WindowMode.Fullscreen
? DisplayServer.WindowMode.Windowed
: DisplayServer.WindowMode.Fullscreen);
}
}
}
+20
View File
@@ -0,0 +1,20 @@
[gd_scene load_steps=2 format=3 uid="uid://btheriapolis0m0"]
[ext_resource type="Script" path="res://Main.cs" id="1_main"]
[node name="Main" type="Node"]
script = ExtResource("1_main")
[node name="Label" type="Label" parent="."]
anchors_preset = 8
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
offset_left = -200.0
offset_top = -16.0
offset_right = 200.0
offset_bottom = 16.0
horizontal_alignment = 1
vertical_alignment = 1
text = "Theriapolis · Godot port · M0 · F11 toggles fullscreen"
@@ -0,0 +1,13 @@
<Project Sdk="Godot.NET.Sdk/4.6.2">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>12</LangVersion>
<Nullable>enable</Nullable>
<EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>Theriapolis.GodotHost</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Theriapolis.Core\Theriapolis.Core.csproj" />
</ItemGroup>
</Project>
+5
View File
@@ -0,0 +1,5 @@
<svg width="128" height="128" viewBox="0 0 128 128" xmlns="http://www.w3.org/2000/svg">
<rect width="128" height="128" fill="#1c1410"/>
<rect x="6" y="6" width="116" height="116" fill="none" stroke="#d8a84a" stroke-width="2"/>
<text x="64" y="78" font-family="serif" font-size="64" font-style="italic" fill="#d8a84a" text-anchor="middle">T</text>
</svg>

After

Width:  |  Height:  |  Size: 360 B

+39
View File
@@ -0,0 +1,39 @@
; Engine configuration file.
; Generated for Theriapolis Godot port (M0).
;
; Format documentation: https://docs.godotengine.org/en/stable/classes/class_projectsettings.html
config_version=5
[application]
config/name="Theriapolis"
config/description="Theriapolis — TTRPG worldgen + simulation game (Godot port)."
run/main_scene="res://Main.tscn"
config/features=PackedStringArray("4.6", "C#", "Forward Plus")
config/icon="res://icon.svg"
[display]
; Borderless fullscreen at the primary monitor's native resolution
; (per port plan §10 resolved decisions). F11 toggles to windowed.
window/size/mode=3
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
[dotnet]
project/assembly_name="Theriapolis.Godot"
[input]
ui_toggle_fullscreen={
"deadzone": 0.5,
"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":4194342,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
]
}
[rendering]
renderer/rendering_method="forward_plus"
textures/canvas_textures/default_texture_filter=0