feat(stage-tamagotchi-godot): migrate C# projects to .NET 10 (#2169)

This commit is contained in:
Garfield Lee
2026-08-02 18:43:24 +08:00
committed by GitHub
parent 9aa27af108
commit cfd9c26f09
34 changed files with 428 additions and 80 deletions
+8 -8
View File
@@ -26,12 +26,12 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v4
with: with:
dotnet-version: '8.0.x' dotnet-version: '10.0.x'
# Lint Godot C# code # Lint Godot C# code
- name: Lint Godot C# - name: Lint Godot C#
working-directory: ./engines/stage-tamagotchi-godot working-directory: ./engines/stage-tamagotchi-godot
run: dotnet format stage-tamagotchi-godot.sln --verify-no-changes run: dotnet format stage-tamagotchi-godot.slnx --verify-no-changes
- run: docker run -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:latest - run: docker run -v `pwd`:`pwd` -w `pwd` ghcr.io/realm/swiftlint:latest
working-directory: ./apps/stage-pocket working-directory: ./apps/stage-pocket
@@ -86,13 +86,13 @@ jobs:
if: matrix.app_name == 'stage-tamagotchi-godot' if: matrix.app_name == 'stage-tamagotchi-godot'
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v4
with: with:
dotnet-version: '8.0.x' dotnet-version: '10.0.x'
- name: Setup Godot - name: Setup Godot
if: matrix.app_name == 'stage-tamagotchi-godot' if: matrix.app_name == 'stage-tamagotchi-godot'
uses: chickensoft-games/setup-godot@v2 uses: chickensoft-games/setup-godot@v2
with: with:
version: 4.6.2 version: 4.7.1
use-dotnet: true use-dotnet: true
include-templates: true include-templates: true
@@ -106,8 +106,8 @@ jobs:
if: matrix.app_name == 'stage-tamagotchi-godot' if: matrix.app_name == 'stage-tamagotchi-godot'
working-directory: ./engines/stage-tamagotchi-godot working-directory: ./engines/stage-tamagotchi-godot
run: | run: |
mkdir -p build/linux mkdir -p out/linux
godot --headless --export-release "Linux x64" build/linux/godot-stage godot --headless --export-release "Linux x64" out/linux/godot-stage
unit-test: unit-test:
name: Unit Test name: Unit Test
@@ -135,13 +135,13 @@ jobs:
# if: matrix.app_name == 'stage-tamagotchi-godot' # if: matrix.app_name == 'stage-tamagotchi-godot'
# uses: actions/setup-dotnet@v4 # uses: actions/setup-dotnet@v4
# with: # with:
# dotnet-version: '8.0.x' # dotnet-version: '10.0.x'
# - name: Setup Godot # - name: Setup Godot
# if: matrix.app_name == 'stage-tamagotchi-godot' # if: matrix.app_name == 'stage-tamagotchi-godot'
# uses: chickensoft-games/setup-godot@v2 # uses: chickensoft-games/setup-godot@v2
# with: # with:
# version: 4.6.2 # version: 4.7.1
# use-dotnet: true # use-dotnet: true
# include-templates: true # include-templates: true
+8 -8
View File
@@ -143,12 +143,12 @@ jobs:
- name: Setup .NET - name: Setup .NET
uses: actions/setup-dotnet@v4 uses: actions/setup-dotnet@v4
with: with:
dotnet-version: '8.0.x' dotnet-version: '10.0.x'
- name: Setup Godot - name: Setup Godot
uses: chickensoft-games/setup-godot@v2 uses: chickensoft-games/setup-godot@v2
with: with:
version: '4.6.2' version: '4.7.1'
use-dotnet: true use-dotnet: true
include-templates: true include-templates: true
@@ -157,24 +157,24 @@ jobs:
working-directory: ./engines/stage-tamagotchi-godot working-directory: ./engines/stage-tamagotchi-godot
shell: bash shell: bash
run: | run: |
mkdir -p build/win mkdir -p out/win
godot --headless --export-release "Windows Desktop" build/win/godot-stage.exe godot --headless --export-release "Windows Desktop" out/win/godot-stage.exe
- name: Export Godot Stage (macOS) - name: Export Godot Stage (macOS)
if: matrix.os == 'macos-15-intel' || matrix.os == 'macos-26' if: matrix.os == 'macos-15-intel' || matrix.os == 'macos-26'
working-directory: ./engines/stage-tamagotchi-godot working-directory: ./engines/stage-tamagotchi-godot
shell: bash shell: bash
run: | run: |
mkdir -p build/mac mkdir -p out/mac
godot --headless --export-release "macOS" build/mac/godot-stage.app godot --headless --export-release "macOS" out/mac/godot-stage.app
- name: Export Godot Stage (Linux) - name: Export Godot Stage (Linux)
if: matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm' if: matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-24.04-arm'
working-directory: ./engines/stage-tamagotchi-godot working-directory: ./engines/stage-tamagotchi-godot
shell: bash shell: bash
run: | run: |
mkdir -p build/linux mkdir -p out/linux
godot --headless --export-release "Linux ${{ matrix.arch }}" build/linux/godot-stage godot --headless --export-release "Linux ${{ matrix.arch }}" out/linux/godot-stage
- name: Build (Windows Only) # Windows - name: Build (Windows Only) # Windows
if: matrix.os == 'windows-latest' if: matrix.os == 'windows-latest'
@@ -99,7 +99,7 @@ export default {
], ],
extraResources: [ extraResources: [
{ {
from: '../../engines/stage-tamagotchi-godot/build/${os}', from: '../../engines/stage-tamagotchi-godot/out/${os}',
to: 'godot-stage', to: 'godot-stage',
filter: ['**/*'], filter: ['**/*'],
}, },
@@ -0,0 +1,9 @@
<Project>
<PropertyGroup>
<!-- Keep the Godot assembly and its engine-local verification host on one runtime contract. -->
<TargetFramework>net10.0</TargetFramework>
<!-- Pin C# 14 so a newer SDK cannot silently change the engine language version. -->
<LangVersion>14.0</LangVersion>
</PropertyGroup>
</Project>
+11 -8
View File
@@ -54,8 +54,11 @@ Godot-native desktop stage runtime project for `stage-tamagotchi`.
- `pnpm -F @proj-airi/stage-tamagotchi-godot build` - `pnpm -F @proj-airi/stage-tamagotchi-godot build`
- `pnpm -F @proj-airi/stage-tamagotchi-godot typecheck` - `pnpm -F @proj-airi/stage-tamagotchi-godot typecheck`
- `pnpm -F @proj-airi/stage-tamagotchi-godot test`
Both commands currently run `dotnet build` against the Godot-generated C# project file. The engine uses the .NET 10 SDK, a shared `Directory.Build.props` contract, and the
`stage-tamagotchi-godot.slnx` solution. The build and typecheck commands compile both the
Godot runtime and the engine-local verification host; `test` executes that verification host.
## Development Runtime ## Development Runtime
@@ -279,16 +282,16 @@ that Tamagotchi materialized and sent over the sidecar WebSocket.
Export presets produce the sidecar runtime that Electron packages for release: Export presets produce the sidecar runtime that Electron packages for release:
```bash ```bash
godot --headless --export-release "Windows Desktop" build/win/godot-stage.exe godot --headless --export-release "Windows Desktop" out/win/godot-stage.exe
godot --headless --export-release "Linux" build/linux/godot-stage godot --headless --export-release "Linux" out/linux/godot-stage
godot --headless --export-release "macOS" build/mac/godot-stage.app godot --headless --export-release "macOS" out/mac/godot-stage.app
``` ```
The output directories intentionally match electron-builder's `${os}` names: The output directories intentionally match electron-builder's `${os}` names:
- Windows: `build/win` - Windows: `out/win`
- Linux: `build/linux` - Linux: `out/linux`
- macOS: `build/mac` - macOS: `out/mac`
`apps/stage-tamagotchi/electron-builder.config.ts` copies the matching directory `apps/stage-tamagotchi/electron-builder.config.ts` copies the matching directory
into `resources/godot-stage` via `extraResources`. To inspect an unpacked into `resources/godot-stage` via `extraResources`. To inspect an unpacked
@@ -307,7 +310,7 @@ Recommended to use [GodotEnv](https://github.com/chickensoft-games/GodotEnv) to
You can use the command below to set current Godot version for this project: You can use the command below to set current Godot version for this project:
```bash ```bash
godotenv godot use 4.6.2 godotenv godot use 4.7.1
``` ```
Then run the Godot editor with the current project: Then run the Godot editor with the current project:
@@ -90,7 +90,7 @@ light, or other final-frame judgments.
Launch the scene with the Godot mono binary: Launch the scene with the Godot mono binary:
```powershell ```powershell
C:\Godot_v4.6.2-stable_mono_win64\Godot_v4.6.2-stable_mono_win64.exe ` C:\Godot_v4.7.1-stable_mono_win64\Godot_v4.7.1-stable_mono_win64.exe `
--path "D:\TAworkspace\AIRIworkspace\airi\engines\stage-tamagotchi-godot" ` --path "D:\TAworkspace\AIRIworkspace\airi\engines\stage-tamagotchi-godot" `
--scene "res://tests/<check-name>/<checkName>.tscn" --scene "res://tests/<check-name>/<checkName>.tscn"
``` ```
+341 -24
View File
@@ -1,18 +1,31 @@
[runnable_presets]
"Windows Desktop"="Windows Desktop"
macOS="macOS"
Linux="Linux arm64"
[preset.0] [preset.0]
name="Windows Desktop" name="Windows Desktop"
platform="Windows Desktop" platform="Windows Desktop"
runnable=true
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="build/win/godot-stage.exe" export_path="out/win/godot-stage.exe"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
seed=0
encrypt_pck=false encrypt_pck=false
encrypt_directory=false encrypt_directory=false
script_export_mode=2
[preset.0.options] [preset.0.options]
@@ -22,7 +35,14 @@ debug/export_console_wrapper=0
binary_format/embed_pck=true binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
codesign/enable=false codesign/enable=false
codesign/timestamp=true
codesign/timestamp_server_url=""
codesign/digest_algorithm=1
codesign/description=""
codesign/custom_options=PackedStringArray()
application/modify_resources=true application/modify_resources=true
application/icon="" application/icon=""
application/console_wrapper_icon="" application/console_wrapper_icon=""
@@ -35,50 +55,316 @@ application/file_description="AIRI Godot Stage Sidecar"
application/copyright="" application/copyright=""
application/trademarks="" application/trademarks=""
application/export_angle=0 application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
ssh_remote_deploy/enabled=false ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
$settings = New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
Start-ScheduledTask -TaskName godot_remote_debug
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
Remove-Item -Recurse -Force '{temp_dir}'"
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=false
dotnet/embed_build_outputs=false
[preset.1] [preset.1]
name="Linux x64" name="macOS"
platform="Linux/X11" platform="macOS"
runnable=true
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="build/linux/godot-stage" export_path="out/mac/godot-stage.app"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
seed=0
encrypt_pck=false encrypt_pck=false
encrypt_directory=false encrypt_directory=false
script_export_mode=2
[preset.1.options] [preset.1.options]
binary_format/architecture="x86_64" export/distribution_type=1
binary_format/architecture="universal"
custom_template/debug="" custom_template/debug=""
custom_template/release="" custom_template/release=""
debug/export_console_wrapper=0 debug/export_console_wrapper=0
application/liquid_glass_icon=""
application/icon=""
application/icon_interpolation=4
application/bundle_identifier="ai.moeru.airi.godot-stage"
application/signature=""
application/app_category="Games"
application/short_version="1.0"
application/version="1.0"
application/copyright=""
application/copyright_localized={}
application/min_macos_version_x86_64="11.00"
application/min_macos_version_arm64="13.00"
application/export_angle=0
display/high_res=true
shader_baker/enabled=false
application/additional_plist_content=""
xcode/platform_build="14C18"
xcode/sdk_version="13.1"
xcode/sdk_build="22C55"
xcode/sdk_name="macosx13.1"
xcode/xcode_version="1420"
xcode/xcode_build="14C18"
codesign/codesign=0
codesign/installer_identity=""
codesign/apple_team_id=""
codesign/identity=""
codesign/entitlements/custom_file=""
codesign/entitlements/allow_jit_code_execution=false
codesign/entitlements/allow_unsigned_executable_memory=false
codesign/entitlements/allow_dyld_environment_variables=false
codesign/entitlements/disable_library_validation=false
codesign/entitlements/audio_input=false
codesign/entitlements/camera=false
codesign/entitlements/location=false
codesign/entitlements/address_book=false
codesign/entitlements/calendars=false
codesign/entitlements/photos_library=false
codesign/entitlements/apple_events=false
codesign/entitlements/debugging=false
codesign/entitlements/app_sandbox/enabled=false
codesign/entitlements/app_sandbox/network_server=false
codesign/entitlements/app_sandbox/network_client=false
codesign/entitlements/app_sandbox/device_usb=false
codesign/entitlements/app_sandbox/device_bluetooth=false
codesign/entitlements/app_sandbox/files_downloads=0
codesign/entitlements/app_sandbox/files_pictures=0
codesign/entitlements/app_sandbox/files_music=0
codesign/entitlements/app_sandbox/files_movies=0
codesign/entitlements/app_sandbox/files_user_selected=0
codesign/entitlements/app_sandbox/helper_executables=[]
codesign/entitlements/additional=""
codesign/custom_options=PackedStringArray()
notarization/notarization=0
privacy/microphone_usage_description=""
privacy/microphone_usage_description_localized={}
privacy/camera_usage_description=""
privacy/camera_usage_description_localized={}
privacy/location_usage_description=""
privacy/location_usage_description_localized={}
privacy/address_book_usage_description=""
privacy/address_book_usage_description_localized={}
privacy/calendar_usage_description=""
privacy/calendar_usage_description_localized={}
privacy/photos_library_usage_description=""
privacy/photos_library_usage_description_localized={}
privacy/desktop_folder_usage_description=""
privacy/desktop_folder_usage_description_localized={}
privacy/documents_folder_usage_description=""
privacy/documents_folder_usage_description_localized={}
privacy/downloads_folder_usage_description=""
privacy/downloads_folder_usage_description_localized={}
privacy/network_volumes_usage_description=""
privacy/network_volumes_usage_description_localized={}
privacy/removable_volumes_usage_description=""
privacy/removable_volumes_usage_description_localized={}
privacy/tracking_enabled=false
privacy/tracking_domains=PackedStringArray()
privacy/collected_data/name/collected=false
privacy/collected_data/name/linked_to_user=false
privacy/collected_data/name/used_for_tracking=false
privacy/collected_data/name/collection_purposes=0
privacy/collected_data/email_address/collected=false
privacy/collected_data/email_address/linked_to_user=false
privacy/collected_data/email_address/used_for_tracking=false
privacy/collected_data/email_address/collection_purposes=0
privacy/collected_data/phone_number/collected=false
privacy/collected_data/phone_number/linked_to_user=false
privacy/collected_data/phone_number/used_for_tracking=false
privacy/collected_data/phone_number/collection_purposes=0
privacy/collected_data/physical_address/collected=false
privacy/collected_data/physical_address/linked_to_user=false
privacy/collected_data/physical_address/used_for_tracking=false
privacy/collected_data/physical_address/collection_purposes=0
privacy/collected_data/other_contact_info/collected=false
privacy/collected_data/other_contact_info/linked_to_user=false
privacy/collected_data/other_contact_info/used_for_tracking=false
privacy/collected_data/other_contact_info/collection_purposes=0
privacy/collected_data/health/collected=false
privacy/collected_data/health/linked_to_user=false
privacy/collected_data/health/used_for_tracking=false
privacy/collected_data/health/collection_purposes=0
privacy/collected_data/fitness/collected=false
privacy/collected_data/fitness/linked_to_user=false
privacy/collected_data/fitness/used_for_tracking=false
privacy/collected_data/fitness/collection_purposes=0
privacy/collected_data/payment_info/collected=false
privacy/collected_data/payment_info/linked_to_user=false
privacy/collected_data/payment_info/used_for_tracking=false
privacy/collected_data/payment_info/collection_purposes=0
privacy/collected_data/credit_info/collected=false
privacy/collected_data/credit_info/linked_to_user=false
privacy/collected_data/credit_info/used_for_tracking=false
privacy/collected_data/credit_info/collection_purposes=0
privacy/collected_data/other_financial_info/collected=false
privacy/collected_data/other_financial_info/linked_to_user=false
privacy/collected_data/other_financial_info/used_for_tracking=false
privacy/collected_data/other_financial_info/collection_purposes=0
privacy/collected_data/precise_location/collected=false
privacy/collected_data/precise_location/linked_to_user=false
privacy/collected_data/precise_location/used_for_tracking=false
privacy/collected_data/precise_location/collection_purposes=0
privacy/collected_data/coarse_location/collected=false
privacy/collected_data/coarse_location/linked_to_user=false
privacy/collected_data/coarse_location/used_for_tracking=false
privacy/collected_data/coarse_location/collection_purposes=0
privacy/collected_data/sensitive_info/collected=false
privacy/collected_data/sensitive_info/linked_to_user=false
privacy/collected_data/sensitive_info/used_for_tracking=false
privacy/collected_data/sensitive_info/collection_purposes=0
privacy/collected_data/contacts/collected=false
privacy/collected_data/contacts/linked_to_user=false
privacy/collected_data/contacts/used_for_tracking=false
privacy/collected_data/contacts/collection_purposes=0
privacy/collected_data/emails_or_text_messages/collected=false
privacy/collected_data/emails_or_text_messages/linked_to_user=false
privacy/collected_data/emails_or_text_messages/used_for_tracking=false
privacy/collected_data/emails_or_text_messages/collection_purposes=0
privacy/collected_data/photos_or_videos/collected=false
privacy/collected_data/photos_or_videos/linked_to_user=false
privacy/collected_data/photos_or_videos/used_for_tracking=false
privacy/collected_data/photos_or_videos/collection_purposes=0
privacy/collected_data/audio_data/collected=false
privacy/collected_data/audio_data/linked_to_user=false
privacy/collected_data/audio_data/used_for_tracking=false
privacy/collected_data/audio_data/collection_purposes=0
privacy/collected_data/gameplay_content/collected=false
privacy/collected_data/gameplay_content/linked_to_user=false
privacy/collected_data/gameplay_content/used_for_tracking=false
privacy/collected_data/gameplay_content/collection_purposes=0
privacy/collected_data/customer_support/collected=false
privacy/collected_data/customer_support/linked_to_user=false
privacy/collected_data/customer_support/used_for_tracking=false
privacy/collected_data/customer_support/collection_purposes=0
privacy/collected_data/other_user_content/collected=false
privacy/collected_data/other_user_content/linked_to_user=false
privacy/collected_data/other_user_content/used_for_tracking=false
privacy/collected_data/other_user_content/collection_purposes=0
privacy/collected_data/browsing_history/collected=false
privacy/collected_data/browsing_history/linked_to_user=false
privacy/collected_data/browsing_history/used_for_tracking=false
privacy/collected_data/browsing_history/collection_purposes=0
privacy/collected_data/search_history/collected=false
privacy/collected_data/search_history/linked_to_user=false
privacy/collected_data/search_history/used_for_tracking=false
privacy/collected_data/search_history/collection_purposes=0
privacy/collected_data/user_id/collected=false
privacy/collected_data/user_id/linked_to_user=false
privacy/collected_data/user_id/used_for_tracking=false
privacy/collected_data/user_id/collection_purposes=0
privacy/collected_data/device_id/collected=false
privacy/collected_data/device_id/linked_to_user=false
privacy/collected_data/device_id/used_for_tracking=false
privacy/collected_data/device_id/collection_purposes=0
privacy/collected_data/purchase_history/collected=false
privacy/collected_data/purchase_history/linked_to_user=false
privacy/collected_data/purchase_history/used_for_tracking=false
privacy/collected_data/purchase_history/collection_purposes=0
privacy/collected_data/product_interaction/collected=false
privacy/collected_data/product_interaction/linked_to_user=false
privacy/collected_data/product_interaction/used_for_tracking=false
privacy/collected_data/product_interaction/collection_purposes=0
privacy/collected_data/advertising_data/collected=false
privacy/collected_data/advertising_data/linked_to_user=false
privacy/collected_data/advertising_data/used_for_tracking=false
privacy/collected_data/advertising_data/collection_purposes=0
privacy/collected_data/other_usage_data/collected=false
privacy/collected_data/other_usage_data/linked_to_user=false
privacy/collected_data/other_usage_data/used_for_tracking=false
privacy/collected_data/other_usage_data/collection_purposes=0
privacy/collected_data/crash_data/collected=false
privacy/collected_data/crash_data/linked_to_user=false
privacy/collected_data/crash_data/used_for_tracking=false
privacy/collected_data/crash_data/collection_purposes=0
privacy/collected_data/performance_data/collected=false
privacy/collected_data/performance_data/linked_to_user=false
privacy/collected_data/performance_data/used_for_tracking=false
privacy/collected_data/performance_data/collection_purposes=0
privacy/collected_data/other_diagnostic_data/collected=false
privacy/collected_data/other_diagnostic_data/linked_to_user=false
privacy/collected_data/other_diagnostic_data/used_for_tracking=false
privacy/collected_data/other_diagnostic_data/collection_purposes=0
privacy/collected_data/environment_scanning/collected=false
privacy/collected_data/environment_scanning/linked_to_user=false
privacy/collected_data/environment_scanning/used_for_tracking=false
privacy/collected_data/environment_scanning/collection_purposes=0
privacy/collected_data/hands/collected=false
privacy/collected_data/hands/linked_to_user=false
privacy/collected_data/hands/used_for_tracking=false
privacy/collected_data/hands/collection_purposes=0
privacy/collected_data/head/collected=false
privacy/collected_data/head/linked_to_user=false
privacy/collected_data/head/used_for_tracking=false
privacy/collected_data/head/collection_purposes=0
privacy/collected_data/other_data_types/collected=false
privacy/collected_data/other_data_types/linked_to_user=false
privacy/collected_data/other_data_types/used_for_tracking=false
privacy/collected_data/other_data_types/collection_purposes=0
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
pkill -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\"
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=false
dotnet/embed_build_outputs=false
binary_format/embed_pck=true binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
ssh_remote_deploy/enabled=false
[preset.2] [preset.2]
name="macOS" name="Linux x64"
platform="macOS" platform="Linux"
runnable=true
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="build/mac/godot-stage.app" export_path="out/linux/godot-stage"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
seed=0
encrypt_pck=false encrypt_pck=false
encrypt_directory=false encrypt_directory=false
script_export_mode=2
[preset.2.options] [preset.2.options]
@@ -88,38 +374,69 @@ debug/export_console_wrapper=0
binary_format/embed_pck=true binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
codesign/codesign=0 shader_baker/enabled=false
codesign/entitlements/app_sandbox/enabled=false binary_format/architecture="x86_64"
notarization/notarization=0
application/bundle_identifier="ai.moeru.airi.godot-stage"
application/short_version="1.0"
application/version="1.0"
application/icon=""
ssh_remote_deploy/enabled=false ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
pkill -x -f \"{temp_dir}/{exe_name} {cmd_args}\"
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=false
dotnet/embed_build_outputs=false
[preset.3] [preset.3]
name="Linux arm64" name="Linux arm64"
platform="Linux/X11" platform="Linux"
runnable=true
dedicated_server=false dedicated_server=false
custom_features="" custom_features=""
export_filter="all_resources" export_filter="all_resources"
include_filter="" include_filter=""
exclude_filter="" exclude_filter=""
export_path="build/linux/godot-stage" export_path="out/linux/godot-stage"
patches=PackedStringArray()
patch_delta_encoding=false
patch_delta_compression_level_zstd=19
patch_delta_min_reduction=0.1
patch_delta_include_filters="*"
patch_delta_exclude_filters=""
encryption_include_filters="" encryption_include_filters=""
encryption_exclude_filters="" encryption_exclude_filters=""
seed=0
encrypt_pck=false encrypt_pck=false
encrypt_directory=false encrypt_directory=false
script_export_mode=2
[preset.3.options] [preset.3.options]
binary_format/architecture="arm64"
custom_template/debug="" custom_template/debug=""
custom_template/release="" custom_template/release=""
debug/export_console_wrapper=0 debug/export_console_wrapper=0
binary_format/embed_pck=true binary_format/embed_pck=true
texture_format/s3tc_bptc=true texture_format/s3tc_bptc=true
texture_format/etc2_astc=false texture_format/etc2_astc=false
ssh_remote_deploy/enabled=false shader_baker/enabled=false
binary_format/architecture="arm64"
ssh_remote_deploy/enabled=false
ssh_remote_deploy/host="user@host_ip"
ssh_remote_deploy/port="22"
ssh_remote_deploy/extra_args_ssh=""
ssh_remote_deploy/extra_args_scp=""
ssh_remote_deploy/run_script="#!/usr/bin/env bash
export DISPLAY=:0
unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\"
\"{temp_dir}/{exe_name}\" {cmd_args}"
ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash
pkill -x -f \"{temp_dir}/{exe_name} {cmd_args}\"
rm -rf \"{temp_dir}\""
dotnet/include_scripts_content=false
dotnet/include_debug_symbols=false
dotnet/embed_build_outputs=false
@@ -0,0 +1,7 @@
{
"sdk": {
"version": "10.0.100",
"rollForward": "latestFeature",
"allowPrerelease": false
}
}
+3 -2
View File
@@ -16,8 +16,9 @@
"directory": "engines/stage-tamagotchi-godot" "directory": "engines/stage-tamagotchi-godot"
}, },
"scripts": { "scripts": {
"build": "dotnet build ./stage-tamagotchi-godot.csproj", "build": "dotnet build ./stage-tamagotchi-godot.slnx",
"typecheck": "dotnet build ./stage-tamagotchi-godot.csproj", "typecheck": "dotnet build ./stage-tamagotchi-godot.slnx",
"test": "dotnet run --project ./tests/stage-tamagotchi-godot.tests/stage-tamagotchi-godot.tests.csproj",
"dump:render-stages": "node ./tools/dumpRenderStages.mjs --dump-render-stages ./artifacts/render-stages", "dump:render-stages": "node ./tools/dumpRenderStages.mjs --dump-render-stages ./artifacts/render-stages",
"dump:render-stages:upper-body": "node ./tools/dumpRenderStages.mjs --dump-render-stages ./artifacts/render-stages-upper-body --view-preset upper-body" "dump:render-stages:upper-body": "node ./tools/dumpRenderStages.mjs --dump-render-stages ./artifacts/render-stages-upper-body --view-preset upper-body"
} }
+3 -3
View File
@@ -12,7 +12,7 @@ config_version=5
config/name="stage-tamagotchi-godot" config/name="stage-tamagotchi-godot"
run/main_scene="res://scenes/stage-root.tscn" run/main_scene="res://scenes/stage-root.tscn"
config/features=PackedStringArray("4.6", "C#", "Forward Plus") config/features=PackedStringArray("4.7", "C#", "Forward Plus")
config/icon="res://icon.svg" config/icon="res://icon.svg"
[dotnet] [dotnet]
@@ -29,7 +29,7 @@ enabled=PackedStringArray("res://addons/Godot-MToon-Shader/plugin.cfg", "res://a
[rendering] [rendering]
anti_aliasing/quality/msaa_3d=2
scaling_3d/scale=2.0
rendering_device/driver.windows="d3d12" rendering_device/driver.windows="d3d12"
textures/vram_compression/import_etc2_astc=true textures/vram_compression/import_etc2_astc=true
anti_aliasing/quality/msaa_3d=2
scaling_3d/scale=2.0
@@ -0,0 +1 @@
uid://dp4po24xghxhw
@@ -0,0 +1 @@
uid://dfmp82vxdmjxq
@@ -0,0 +1 @@
uid://ulobbffet5mk
@@ -0,0 +1 @@
uid://d10mj6whfn22f
@@ -0,0 +1 @@
uid://jw67e75q5len
@@ -0,0 +1 @@
uid://bdisyd6lb4b4l
@@ -0,0 +1 @@
uid://bc71y46wb0eju
@@ -0,0 +1 @@
uid://ck6ytnddww2bw
@@ -0,0 +1 @@
uid://dstg774x40jce
@@ -0,0 +1 @@
uid://b3ty56200pkxu
@@ -0,0 +1 @@
uid://cgqe8if4gbmyj
@@ -0,0 +1 @@
uid://harlw7sjdv2d
@@ -0,0 +1 @@
uid://dn483ac2jeku8
@@ -0,0 +1 @@
uid://bd2uvqv2v3aey
@@ -0,0 +1 @@
uid://cyjfs316pmyyx
@@ -1,9 +1,8 @@
<Project Sdk="Godot.NET.Sdk/4.6.2"> <Project Sdk="Godot.NET.Sdk/4.7.1">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<TargetFramework Condition=" '$(GodotTargetPlatform)' == 'android' ">net9.0</TargetFramework>
<EnableDynamicLoading>true</EnableDynamicLoading> <EnableDynamicLoading>true</EnableDynamicLoading>
<RootNamespace>StageTamagotchiGodot</RootNamespace> <RootNamespace>StageTamagotchiGodot</RootNamespace>
<TargetFramework>net10.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<!-- Keep generated sources and verification harnesses out of the game assembly. --> <!-- Keep generated sources and verification harnesses out of the game assembly. -->
@@ -1,19 +0,0 @@
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
@@ -0,0 +1,12 @@
<Solution>
<Configurations>
<BuildType Name="Debug" />
<BuildType Name="Release" />
<BuildType Name="ExportDebug" />
<BuildType Name="ExportRelease" />
</Configurations>
<Folder Name="/tests/">
<Project Path="tests/stage-tamagotchi-godot.tests/stage-tamagotchi-godot.tests.csproj" />
</Folder>
<Project Path="stage-tamagotchi-godot.csproj" />
</Solution>
@@ -1,4 +1,6 @@
<Project> <Project>
<Import Project="$(MSBuildThisFileDirectory)..\..\Directory.Build.props" />
<PropertyGroup> <PropertyGroup>
<ArtifactsRoot>$(MSBuildThisFileDirectory)..\..\.godot\mono\temp\tests\</ArtifactsRoot> <ArtifactsRoot>$(MSBuildThisFileDirectory)..\..\.godot\mono\temp\tests\</ArtifactsRoot>
<ArtifactsRoot>$([System.IO.Path]::GetFullPath('$(ArtifactsRoot)'))</ArtifactsRoot> <ArtifactsRoot>$([System.IO.Path]::GetFullPath('$(ArtifactsRoot)'))</ArtifactsRoot>
@@ -6,7 +6,7 @@ using System.IO;
/// ///
/// Call stack: /// Call stack:
/// ///
/// dotnet run --project tests/StageTamagotchiGodot.Tests /// dotnet run --project tests/stage-tamagotchi-godot.tests
/// -> <see cref="Main"/> /// -> <see cref="Main"/>
/// -> <see cref="CameraGroundConstraint"/> /// -> <see cref="CameraGroundConstraint"/>
/// -> <see cref="StageViewStateRules"/> /// -> <see cref="StageViewStateRules"/>
@@ -28,7 +28,7 @@ internal static class Program
CameraGroundConstraint.NormalizePreservesCameraYAboveStageGround(); CameraGroundConstraint.NormalizePreservesCameraYAboveStageGround();
StageEnvironmentAssets.ResolvesThreeStageSkyHdriFromGodotProjectDirectory(); StageEnvironmentAssets.ResolvesThreeStageSkyHdriFromGodotProjectDirectory();
StageEnvironmentAssets.ReturnsEmptyPathWhenThreeStageSkyHdriIsUnavailable(); StageEnvironmentAssets.ReturnsEmptyPathWhenThreeStageSkyHdriIsUnavailable();
Console.WriteLine("StageTamagotchiGodot.Tests passed."); Console.WriteLine("stage-tamagotchi-godot.tests passed.");
return 0; return 0;
} }
catch (Exception error) catch (Exception error)
@@ -1,7 +1,6 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ProjectDirInput>$(MSBuildThisFileDirectory)..\..</ProjectDirInput> <ProjectDirInput>$(MSBuildThisFileDirectory)..\..</ProjectDirInput>
<GodotProjectDir>$([System.IO.Path]::GetFullPath('$(ProjectDirInput)'))</GodotProjectDir> <GodotProjectDir>$([System.IO.Path]::GetFullPath('$(ProjectDirInput)'))</GodotProjectDir>
<GodotDir>$([MSBuild]::EnsureTrailingSlash('$(GodotProjectDir)'))</GodotDir> <GodotDir>$([MSBuild]::EnsureTrailingSlash('$(GodotProjectDir)'))</GodotDir>