diff --git a/packages/stage-tamagotchi-godot/.editorconfig b/packages/stage-tamagotchi-godot/.editorconfig new file mode 100644 index 000000000..f28239ba5 --- /dev/null +++ b/packages/stage-tamagotchi-godot/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/packages/stage-tamagotchi-godot/.gitattributes b/packages/stage-tamagotchi-godot/.gitattributes new file mode 100644 index 000000000..8ad74f78d --- /dev/null +++ b/packages/stage-tamagotchi-godot/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/packages/stage-tamagotchi-godot/.gitignore b/packages/stage-tamagotchi-godot/.gitignore new file mode 100644 index 000000000..0af181cfb --- /dev/null +++ b/packages/stage-tamagotchi-godot/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/packages/stage-tamagotchi-godot/README.md b/packages/stage-tamagotchi-godot/README.md new file mode 100644 index 000000000..d0afaef80 --- /dev/null +++ b/packages/stage-tamagotchi-godot/README.md @@ -0,0 +1,71 @@ +# `@proj-airi/stage-tamagotchi-godot` + +Godot-native desktop stage runtime project for `stage-tamagotchi`. + +## What It Does + +- Hosts the Godot project used as the desktop-only stage runtime baseline. +- Provides the minimal scene, script, and .NET project structure for G0 stage work. +- Keeps Godot-owned assets, scenes, scripts, and future add-ons local to one workspace package. + +## What It Is Not + +- It is not the Electron host app. +- It does not own AIRI agent logic or adaptation-layer IPC contracts. +- It is not a web or mobile renderer package. + +## Current Scope + +- Desktop-only Godot sidecar runtime exploration for `stage-tamagotchi`. +- Godot C# project structure and minimal runtime skeleton. +- Early-stage scene and runtime validation work. + +## Directory Layout + +- `scenes/`: Godot scene files such as the current stage root. +- `scripts/`: C# runtime scripts attached to Godot nodes. +- `assets/`: Imported models, textures, materials, and other runtime assets. +- `addons/`: Godot plugins, editor/runtime add-ons, or vendored third-party Godot extensions. + +## When To Use It + +- Use it when working on the Godot-backed desktop stage runtime. +- Use it for Godot scene, asset, rendering, and character-runtime work. +- Use it as the package boundary for the desktop Godot stage project itself. + +## When Not To Use It + +- Do not put Electron main/renderer host logic here. +- Do not put AIRI agent orchestration or cross-process protocol definitions here. +- Do not use it as a generic cross-platform stage abstraction package. + +## Build + +- `pnpm -F @proj-airi/stage-tamagotchi-godot build` +- `pnpm -F @proj-airi/stage-tamagotchi-godot typecheck` + +Both commands currently run `dotnet build` against the Godot-generated C# project file. + +## Notes + +### Environment Management + +Recommended to use [GodotEnv](https://github.com/chickensoft-games/GodotEnv) to manage Godot versions. + +You can use the command below to set current Godot version for this project: + +```bash +godotenv godot use 4.6.2 +``` + +Then run the Godot editor with the current project: + +```bash +"$(godotenv godot env path)" ./packages/stage-tamagotchi-godot/project.godot +``` + +You can also run the game directly from the command line: + +```bash +"$(godotenv godot env path)" --path ./packages/stage-tamagotchi-godot +``` diff --git a/packages/stage-tamagotchi-godot/addons/.gitkeep b/packages/stage-tamagotchi-godot/addons/.gitkeep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/stage-tamagotchi-godot/addons/.gitkeep @@ -0,0 +1 @@ + diff --git a/packages/stage-tamagotchi-godot/assets/.gitkeep b/packages/stage-tamagotchi-godot/assets/.gitkeep new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/packages/stage-tamagotchi-godot/assets/.gitkeep @@ -0,0 +1 @@ + diff --git a/packages/stage-tamagotchi-godot/icon.svg b/packages/stage-tamagotchi-godot/icon.svg new file mode 100644 index 000000000..c6bbb7d82 --- /dev/null +++ b/packages/stage-tamagotchi-godot/icon.svg @@ -0,0 +1 @@ + diff --git a/packages/stage-tamagotchi-godot/icon.svg.import b/packages/stage-tamagotchi-godot/icon.svg.import new file mode 100644 index 000000000..e05f92f18 --- /dev/null +++ b/packages/stage-tamagotchi-godot/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3nt42la34mi3" +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 diff --git a/packages/stage-tamagotchi-godot/package.json b/packages/stage-tamagotchi-godot/package.json new file mode 100644 index 000000000..ef15ca329 --- /dev/null +++ b/packages/stage-tamagotchi-godot/package.json @@ -0,0 +1,22 @@ +{ + "name": "@proj-airi/stage-tamagotchi-godot", + "type": "module", + "version": "0.9.0", + "private": true, + "description": "Godot-native desktop stage runtime workspace package for stage-tamagotchi", + "author": { + "name": "Moeru AI Project AIRI Team", + "email": "airi@moeru.ai", + "url": "https://github.com/moeru-ai" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/moeru-ai/airi.git", + "directory": "packages/stage-tamagotchi-godot" + }, + "scripts": { + "build": "dotnet build ./stage-tamagotchi-godot.csproj", + "typecheck": "dotnet build ./stage-tamagotchi-godot.csproj" + } +} diff --git a/packages/stage-tamagotchi-godot/project.godot b/packages/stage-tamagotchi-godot/project.godot new file mode 100644 index 000000000..7063e921b --- /dev/null +++ b/packages/stage-tamagotchi-godot/project.godot @@ -0,0 +1,28 @@ +; 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="stage-tamagotchi-godot" +run/main_scene="uid://c4t68p7ibkjxg" +config/features=PackedStringArray("4.6", "C#", "Forward Plus") +config/icon="res://icon.svg" + +[dotnet] + +project/assembly_name="stage-tamagotchi-godot" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" diff --git a/packages/stage-tamagotchi-godot/scenes/stage-root.tscn b/packages/stage-tamagotchi-godot/scenes/stage-root.tscn new file mode 100644 index 000000000..cea40d137 --- /dev/null +++ b/packages/stage-tamagotchi-godot/scenes/stage-root.tscn @@ -0,0 +1,24 @@ +[gd_scene format=3 uid="uid://c4t68p7ibkjxg"] + +[ext_resource type="Script" uid="uid://cwngwb6eal55x" path="res://scripts/StageRoot.cs" id="1_k8kx6"] + +[sub_resource type="BoxMesh" id="BoxMesh_mr4xw"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_f1a2p"] +albedo_color = Color(0.772549, 0.882353, 0.984314, 1) + +[node name="Node3D" type="Node3D" unique_id=1704384288] +script = ExtResource("1_k8kx6") + +[node name="Camera3D" type="Camera3D" parent="." unique_id=1342789791] +transform = Transform3D(1, 0, 0, 0, 0.93969274, 0.34201992, 0, -0.34201992, 0.93969274, 0, 1.2, 3.5) +current = true + +[node name="OmniLight3D" type="OmniLight3D" parent="." unique_id=1692990068] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 2, 2) +light_color = Color(1, 0.956863, 0.909804, 1) +omni_range = 12.0 + +[node name="Box" type="MeshInstance3D" parent="." unique_id=840596041] +mesh = SubResource("BoxMesh_mr4xw") +surface_material_override/0 = SubResource("StandardMaterial3D_f1a2p") diff --git a/packages/stage-tamagotchi-godot/scripts/StageRoot.cs b/packages/stage-tamagotchi-godot/scripts/StageRoot.cs new file mode 100644 index 000000000..50c737c00 --- /dev/null +++ b/packages/stage-tamagotchi-godot/scripts/StageRoot.cs @@ -0,0 +1,16 @@ +using Godot; +using System; + +public partial class StageRoot : Node3D +{ + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + GD.Print("StageRoot ready"); + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + } +} diff --git a/packages/stage-tamagotchi-godot/scripts/StageRoot.cs.uid b/packages/stage-tamagotchi-godot/scripts/StageRoot.cs.uid new file mode 100644 index 000000000..ef99f487d --- /dev/null +++ b/packages/stage-tamagotchi-godot/scripts/StageRoot.cs.uid @@ -0,0 +1 @@ +uid://cwngwb6eal55x diff --git a/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.csproj b/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.csproj new file mode 100644 index 000000000..69849c62a --- /dev/null +++ b/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.csproj @@ -0,0 +1,8 @@ + + + net8.0 + net9.0 + true + StageTamagotchiGodot + + \ No newline at end of file diff --git a/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.sln b/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.sln new file mode 100644 index 000000000..02ad094fc --- /dev/null +++ b/packages/stage-tamagotchi-godot/stage-tamagotchi-godot.sln @@ -0,0 +1,19 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "stage-tamagotchi-godot", "stage-tamagotchi-godot.csproj", "{95468D0F-8DA0-4018-8339-3723064F84F3}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + ExportDebug|Any CPU = ExportDebug|Any CPU + ExportRelease|Any CPU = ExportRelease|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {95468D0F-8DA0-4018-8339-3723064F84F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {95468D0F-8DA0-4018-8339-3723064F84F3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {95468D0F-8DA0-4018-8339-3723064F84F3}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU + {95468D0F-8DA0-4018-8339-3723064F84F3}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU + {95468D0F-8DA0-4018-8339-3723064F84F3}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU + {95468D0F-8DA0-4018-8339-3723064F84F3}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU + EndGlobalSection +EndGlobal diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index af30b6988..159e1d0b1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3044,6 +3044,8 @@ importers: specifier: 'catalog:' version: 0.0.97 + packages/stage-tamagotchi-godot: {} + packages/stage-ui: dependencies: '@date-fns/utc':