diff --git a/.claude/agents/loopolis-godot-engineer.md b/.claude/agents/loopolis-godot-engineer.md index 9a7b69d..43bd122 100644 --- a/.claude/agents/loopolis-godot-engineer.md +++ b/.claude/agents/loopolis-godot-engineer.md @@ -63,7 +63,7 @@ godot/ ```bash DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec \ /Applications/Godot_mono.app/Contents/MacOS/Godot \ - --path /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/ \ + --path /path/to/loopolis/godot/ \ --editor ``` 5. Open `scenes/World.tscn` in the editor, then press **F5** to run. diff --git a/.claude/agents/loopolis-player.md b/.claude/agents/loopolis-player.md index f372b50..10c1d35 100644 --- a/.claude/agents/loopolis-player.md +++ b/.claude/agents/loopolis-player.md @@ -12,10 +12,7 @@ You play Loopolis by sending commands to a running simulation server. You do NOT ## Starting the Server ```bash -cd /Users/benjamin.eckstein/IdeaProjects/private/loopolis -export DOTNET_ROOT="/opt/homebrew/opt/dotnet/libexec" - -# Start server (blank or default scenario) +# Start server (blank or default scenario) — run from the repo root dotnet run --project src/Loopolis.Runner -- server default --speed 50 > /tmp/loopolis-player.log 2>&1 & sleep 3 @@ -28,10 +25,10 @@ echo "Playing session: $SESSION_ID" ```bash # Full state -cat /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/shared/state-${SESSION_ID}.json | python3 -m json.tool 2>/dev/null +cat ./godot/shared/state-${SESSION_ID}.json | python3 -m json.tool 2>/dev/null # Quick summary -cat /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/shared/state-${SESSION_ID}.json | python3 -c " +cat ./godot/shared/state-${SESSION_ID}.json | python3 -c " import json,sys d=json.load(sys.stdin) print(f'Tick:{d[\"tick\"]} Pop:{d[\"population\"]}/{d[\"maxCapacity\"]} Balance:\${d[\"balance\"]:.0f} Net:{d[\"netPerTick\"]:.1f}/tick Happy:{d[\"happiness\"]:.0%} State:{d[\"gameState\"]} Event:{d.get(\"activeEventName\") or \"-\"}') @@ -43,7 +40,7 @@ print(f'Tick:{d[\"tick\"]} Pop:{d[\"population\"]}/{d[\"maxCapacity\"]} Balance: Write to `command-{SESSION_ID}.json`. Always wait 0.3–0.5s between commands. ```bash -SHARED=/Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/shared +SHARED=./godot/shared # Pause/resume echo "{\"cmd\":\"pause\",\"sessionId\":\"$SESSION_ID\"}" > $SHARED/command-${SESSION_ID}.json; sleep 0.5 @@ -87,7 +84,7 @@ echo "{\"cmd\":\"set_speed\",\"ticksPerSecond\":2,\"sessionId\":\"$SESSION_ID\"} ```bash kill $(pgrep -f "Loopolis.Runner") 2>/dev/null -rm -f /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/shared/state-${SESSION_ID}.json +rm -f ./godot/shared/state-${SESSION_ID}.json ``` ## Your Gameplay Loop diff --git a/CLAUDE.md b/CLAUDE.md index baad813..89a7f5d 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -136,9 +136,9 @@ export DOTNET_ROOT="/opt/homebrew/opt/dotnet/libexec" dotnet run --project src/Loopolis.Runner -- server default --speed 2 # Terminal 2 — launch Godot viewer -DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec \ +DOTNET_ROOT=$(dirname $(dirname $(which dotnet))) \ /Applications/Godot_mono.app/Contents/MacOS/Godot \ - --path /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/ \ + --path /path/to/loopolis/godot/ \ --editor # → Open scenes/World.tscn → Press F5 ``` @@ -146,9 +146,9 @@ DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec \ ### Standalone mode (Godot runs its own simulation) ```bash # Don't run the server. Just open Godot — no state.json → standalone mode. -DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec \ +DOTNET_ROOT=$(dirname $(dirname $(which dotnet))) \ /Applications/Godot_mono.app/Contents/MacOS/Godot \ - --path /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/ \ + --path /path/to/loopolis/godot/ \ --editor ``` diff --git a/STATUS.md b/STATUS.md index e16570c..676243d 100644 --- a/STATUS.md +++ b/STATUS.md @@ -223,9 +223,9 @@ dotnet run --project src/Loopolis.Runner -- server default --speed 2 # persiste ```bash # Launch Godot editor (viewer mode if state.json exists, standalone otherwise) -DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec \ +DOTNET_ROOT=$(dirname $(dirname $(which dotnet))) \ /Applications/Godot_mono.app/Contents/MacOS/Godot \ - --path /Users/benjamin.eckstein/IdeaProjects/private/loopolis/godot/ \ + --path /path/to/loopolis/godot/ \ --editor # → Open scenes/World.tscn → Press F5 ``` diff --git a/godot/scripts/UI/MainMenu.cs b/godot/scripts/UI/MainMenu.cs index 2f65a09..52df099 100644 --- a/godot/scripts/UI/MainMenu.cs +++ b/godot/scripts/UI/MainMenu.cs @@ -522,10 +522,10 @@ private void ApplyCityName() private void OnServerGamePressed() { - // Launch the dotnet server as a background process - var projectPath = "/Users/benjamin.eckstein/IdeaProjects/private/loopolis"; - var cmd = $"export DOTNET_ROOT=/opt/homebrew/opt/dotnet/libexec && " + - $"cd {projectPath} && " + + // Derive the repo root from the Godot project location (res:// == godot/, parent == repo root) + var projectPath = System.IO.Path.GetFullPath( + System.IO.Path.Combine(ProjectSettings.GlobalizePath("res://"), "..")); + var cmd = $"cd {projectPath} && " + $"dotnet run --project src/Loopolis.Runner -- server default --speed 2 " + $"> /tmp/loopolis-server.log 2>&1 &";