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
+62 -1
View File
@@ -1,4 +1,4 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.0.31903.59
@@ -13,31 +13,92 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Theriapolis.Tools", "Theria
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Theriapolis.Tests", "Theriapolis.Tests\Theriapolis.Tests.csproj", "{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Theriapolis.Godot", "Theriapolis.Godot\Theriapolis.Godot.csproj", "{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Debug|x64 = Debug|x64
Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
Release|x64 = Release|x64
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|x64.ActiveCfg = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|x64.Build.0 = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|x86.ActiveCfg = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Debug|x86.Build.0 = Debug|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|Any CPU.Build.0 = Release|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|x64.ActiveCfg = Release|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|x64.Build.0 = Release|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|x86.ActiveCfg = Release|Any CPU
{A1A2A3A4-B1B2-C1C2-D1D2-E1E2E3E4E5E6}.Release|x86.Build.0 = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|x64.ActiveCfg = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|x64.Build.0 = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|x86.ActiveCfg = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Debug|x86.Build.0 = Debug|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|Any CPU.Build.0 = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|x64.ActiveCfg = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|x64.Build.0 = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|x86.ActiveCfg = Release|Any CPU
{B1B2B3B4-C1C2-D1D2-E1E2-F1F2F3F4F5F6}.Release|x86.Build.0 = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|x64.ActiveCfg = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|x64.Build.0 = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|x86.ActiveCfg = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Debug|x86.Build.0 = Debug|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|Any CPU.Build.0 = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|x64.ActiveCfg = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|x64.Build.0 = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|x86.ActiveCfg = Release|Any CPU
{C1C2C3C4-D1D2-E1E2-F1F2-A1A2A3A4A5A6}.Release|x86.Build.0 = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|x64.ActiveCfg = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|x64.Build.0 = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|x86.ActiveCfg = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Debug|x86.Build.0 = Debug|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|Any CPU.Build.0 = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|x64.ActiveCfg = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|x64.Build.0 = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|x86.ActiveCfg = Release|Any CPU
{D1D2D3D4-E1E2-F1F2-A1A2-B1B2B3B4B5B6}.Release|x86.Build.0 = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|x64.ActiveCfg = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|x64.Build.0 = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|x86.ActiveCfg = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Debug|x86.Build.0 = Debug|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|Any CPU.Build.0 = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|x64.ActiveCfg = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|x64.Build.0 = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|x86.ActiveCfg = Release|Any CPU
{E1E2E3E4-F1F2-A1A2-B1B2-C1C2C3C4C5C6}.Release|x86.Build.0 = Release|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|x64.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|x64.Build.0 = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|x86.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Debug|x86.Build.0 = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|Any CPU.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|Any CPU.Build.0 = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|x64.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|x64.Build.0 = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|x86.ActiveCfg = Debug|Any CPU
{1E1A085D-6303-450C-BBF6-2B44C2CCA0FF}.Release|x86.Build.0 = Debug|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal