12 Commits
Author SHA1 Message Date
qwsdcvghyu89 4af85ded56 Fixed release action
Nightly Release / Export Game (push) Successful in 2m45s
2026-06-06 20:55:43 +10:00
qwsdcvghyu89 89dfa3f941 Added .NET installation step to action
Nightly Release / Export Game (push) Failing after 1m59s
2026-06-06 20:49:58 +10:00
qwsdcvghyu89 0e2edfddd7 Fixed download urls
Nightly Release / Export Game (push) Failing after 39s
2026-06-06 20:46:25 +10:00
qwsdcvghyu89 584d26c562 Added 7zip installation step
Nightly Release / Export Game (push) Failing after 29s
2026-06-06 20:43:36 +10:00
qwsdcvghyu89 2b4e967110 Fixed versioning mistake for release action
Nightly Release / Export Game (push) Failing after 21s
2026-06-06 20:23:03 +10:00
qwsdcvghyu89 2642e2f63b Fixed spelling mistake in action
Nightly Release / Export Game (push) Failing after 13s
2026-06-06 20:21:54 +10:00
qwsdcvghyu89 764b20e022 Fixed nightly build actioni
Nightly Release / Export Game (push) Failing after 44s
2026-06-06 20:20:03 +10:00
qwsdcvghyu89 fc80c5bc8a Tuned platformer physics
Nightly Release / Build Nightly (linux) (push) Failing after 4s
Nightly Release / Build Nightly (mac) (push) Failing after 4s
Nightly Release / Build Nightly (windows) (push) Failing after 4s
Nightly Release / Publish Nightly Release (push) Skipped
2026-06-06 20:05:38 +10:00
qwsdcvghyu89 57d532a474 Updatec castle tileset with 1x1s
Nightly Release / Build Nightly (linux) (push) Failing after 4s
Nightly Release / Build Nightly (mac) (push) Failing after 4s
Nightly Release / Build Nightly (windows) (push) Failing after 4s
Nightly Release / Publish Nightly Release (push) Skipped
2026-06-06 04:29:00 +10:00
qwsdcvghyu89 5afad3faaa Updated castle tileset
Nightly Release / Build Nightly (linux) (push) Failing after 4s
Nightly Release / Build Nightly (mac) (push) Failing after 4s
Nightly Release / Build Nightly (windows) (push) Failing after 3s
Nightly Release / Publish Nightly Release (push) Skipped
2026-06-06 04:16:25 +10:00
qwsdcvghyu89 ca304ab06e Merge branch 'main' of https://git.main.qwsdcvghyu.com/riley/wrplat-godot
Nightly Release / Build Nightly (linux) (push) Failing after 4s
Nightly Release / Build Nightly (mac) (push) Failing after 4s
Nightly Release / Build Nightly (windows) (push) Failing after 3s
Nightly Release / Publish Nightly Release (push) Skipped
2026-06-06 02:52:36 +10:00
qwsdcvghyu89 3288e37062 Updated pool.png with castle set 2026-06-06 02:52:23 +10:00
8 changed files with 683 additions and 77 deletions
+28 -63
View File
@@ -11,71 +11,36 @@ permissions:
contents: write contents: write
jobs: jobs:
# ---- Build each platform in parallel, upload outputs as artifacts ---- export_game:
build-nightly: runs_on: Debian-x86
name: Build Nightly (${{ matrix.platform }}) permissions:
runs-on: Debian-x86 contents: write
strategy: name: Export Game
matrix:
platform: [linux, windows, mac]
steps: steps:
- uses: actions/checkout@v4 - name: checkout
- name: Build uses: actions/checkout@v5
id: build - name: install .NET SDK
uses: felix-schindler/build-godot-action@v2.0.0 uses: actions/setup-dotnet@v4
with: with:
name: wrplat dotnet-version: '8.0.x'
preset: ${{ matrix.platform }} - name: install 7zip
debugMode: "true" run: apt-get update && apt-get install -y p7zip-full
- name: export game
- name: Upload build artifact id: export
uses: actions/upload-artifact@v4 uses: firebelley/godot-export@v8.0.0
with: with:
# Unique name per platform so the matrix jobs don't collide godot_executable_download_url: https://godot-releases.nbg1.your-objectstorage.com/4.6.3-stable/Godot_v4.6.3-stable_mono_linux_x86_64.zip
name: build-${{ matrix.platform }} godot_export_templates_download_url: https://godot-releases.nbg1.your-objectstorage.com/4.6.3-stable/Godot_v4.6.3-stable_mono_export_templates.tpz
path: ${{ github.workspace }}/${{ steps.build.outputs.build }} relative_project_path: ./
if-no-files-found: error archive_output: true
- name: create release
# ---- Runs once, only after all three builds succeed ---- uses: akkuman/gitea-release-action@v1
release-nightly:
name: Publish Nightly Release
needs: build-nightly
runs-on: Debian-x86
steps:
- uses: actions/checkout@v4
- name: Download all build artifacts
uses: actions/download-artifact@v4
with: with:
# No 'name' → grabs every artifact, each into dist/<artifact-name>/ # token: ${{ secrets.GITHUB_TOKEN }}
path: dist # generateReleaseNotes: true
# tag: ${{ github.ref_name }}
- name: Clean up old release & move tag files: ${{ steps.export.outputs.archive_directory }}/*
run: | # commit: ${{ gitea.sha }}
# Find and delete the old Gitea release payload via API # allowUpdates: true
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \ name: Latest Nightly Build
"${{ github.api_url }}/repos/${{ github.repository }}/releases/tags/nightly" | jq -r '.id')
if [ "$RELEASE_ID" != "null" ] && [ -n "$RELEASE_ID" ]; then
echo "Deleting old release ID: $RELEASE_ID"
curl -s -X DELETE -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
"${{ github.api_url }}/repos/${{ github.repository }}/releases/$RELEASE_ID"
fi
# Force the 'nightly' tag onto this commit and push it
git tag -f nightly ${{ github.sha }}
git push -f origin nightly
- name: Publish release
uses: softprops/action-gh-release@v2
with:
tag_name: nightly
target_commitish: ${{ github.sha }}
name: "Nightly Development Build"
body: |
Automated rolling nightly build from the latest commit on `main`.
**Commit:** ${{ github.sha }}
prerelease: true prerelease: true
files: dist/**/*
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+1
View File
@@ -1,3 +1,4 @@
# Godot 4+ specific ignores # Godot 4+ specific ignores
.godot/ .godot/
/android/ /android/
builds/
+387
View File
@@ -0,0 +1,387 @@
[preset.0]
name="Win64D"
platform="Windows Desktop"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="builds/win64d/wrplat_win64d.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_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.0.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=true
binary_format/architecture="x86_64"
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/icon=""
application/console_wrapper_icon=""
application/icon_interpolation=4
application/file_version=""
application/product_version=""
application/company_name=""
application/product_name="Wrplat"
application/file_description=""
application/copyright=""
application/trademarks=""
application/export_angle=0
application/export_d3d12=0
application/d3d12_agility_sdk_multiarch=true
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=true
dotnet/embed_build_outputs=false
[preset.1]
name="macOS"
platform="macOS"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="builds/osx64d/wrplat_osx64d.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_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.1.options]
export/distribution_type=1
binary_format/architecture="universal"
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
application/liquid_glass_icon=""
application/icon=""
application/icon_interpolation=4
application/bundle_identifier="com.meticulous.wrplat"
application/signature=""
application/app_category="Games"
application/short_version=""
application/version=""
application/copyright=""
application/copyright_localized={}
application/min_macos_version_x86_64="10.12"
application/min_macos_version_arm64="11.00"
application/export_angle=0
display/high_res=true
shader_baker/enabled=true
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=1
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=true
dotnet/embed_build_outputs=false
[preset.2]
name="Linux"
platform="Linux"
runnable=true
dedicated_server=false
custom_features=""
export_filter="all_resources"
include_filter=""
exclude_filter=""
export_path="builds/linux64d/wrplat_linux64d.x86_64"
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_exclude_filters=""
seed=0
encrypt_pck=false
encrypt_directory=false
script_export_mode=2
[preset.2.options]
custom_template/debug=""
custom_template/release=""
debug/export_console_wrapper=1
binary_format/embed_pck=false
texture_format/s3tc_bptc=true
texture_format/etc2_astc=false
shader_baker/enabled=false
binary_format/architecture="x86_64"
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=true
dotnet/embed_build_outputs=false
File diff suppressed because one or more lines are too long
+1
View File
@@ -58,3 +58,4 @@ look_down={
[rendering] [rendering]
rendering_device/driver.windows="d3d12" rendering_device/driver.windows="d3d12"
textures/vram_compression/import_etc2_astc=true
Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 48 KiB

+223
View File
@@ -39,34 +39,257 @@ texture_region_size = Vector2i(32, 32)
11:1/0 = 0 11:1/0 = 0
0:2/0 = 0 0:2/0 = 0
1:2/0 = 0 1:2/0 = 0
1:2/0/terrain_set = 0
1:2/0/terrain = 0
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:2/0/terrains_peering_bit/right_side = 0
1:2/0/terrains_peering_bit/bottom_right_corner = 0
1:2/0/terrains_peering_bit/bottom_side = 0
2:2/next_alternative_id = 3
2:2/0 = 0 2:2/0 = 0
2:2/0/terrain_set = 0
2:2/0/terrain = 0
2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:2/0/terrains_peering_bit/right_side = 0
2:2/0/terrains_peering_bit/bottom_right_corner = 0
2:2/0/terrains_peering_bit/bottom_side = 0
2:2/0/terrains_peering_bit/bottom_left_corner = 0
2:2/0/terrains_peering_bit/left_side = 0
2:2/1 = 1
2:2/1/flip_h = true
2:2/1/terrain_set = 0
2:2/1/terrain = 0
2:2/1/terrains_peering_bit/right_side = 0
2:2/1/terrains_peering_bit/bottom_right_corner = 0
2:2/1/terrains_peering_bit/bottom_side = 0
2:2/1/terrains_peering_bit/bottom_left_corner = 0
2:2/1/terrains_peering_bit/left_side = 0
3:2/0 = 0 3:2/0 = 0
3:2/0/terrain_set = 0
3:2/0/terrain = 0
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:2/0/terrains_peering_bit/bottom_side = 0
3:2/0/terrains_peering_bit/bottom_left_corner = 0
3:2/0/terrains_peering_bit/left_side = 0
4:2/0 = 0 4:2/0 = 0
4:2/0/terrain_set = 0
4:2/0/terrain = 0
4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
4:2/0/terrains_peering_bit/right_side = 0
5:2/0 = 0 5:2/0 = 0
5:2/0/terrain_set = 0
5:2/0/terrain = 0
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:2/0/terrains_peering_bit/right_side = 0
5:2/0/terrains_peering_bit/left_side = 0
6:2/0 = 0 6:2/0 = 0
6:2/0/terrain_set = 0
6:2/0/terrain = 0
6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:2/0/terrains_peering_bit/left_side = 0
7:2/0 = 0 7:2/0 = 0
8:2/0 = 0 8:2/0 = 0
9:2/0 = 0 9:2/0 = 0
10:2/0 = 0 10:2/0 = 0
11:2/0 = 0 11:2/0 = 0
0:3/0 = 0 0:3/0 = 0
1:3/next_alternative_id = 2
1:3/0 = 0 1:3/0 = 0
1:3/0/terrain_set = 0
1:3/0/terrain = 0
1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:3/0/terrains_peering_bit/right_side = 0
1:3/0/terrains_peering_bit/bottom_right_corner = 0
1:3/0/terrains_peering_bit/bottom_side = 0
1:3/0/terrains_peering_bit/top_side = 0
1:3/0/terrains_peering_bit/top_right_corner = 0
1:3/1 = 1
1:3/1/flip_v = true
1:3/1/terrain_set = 0
1:3/1/terrain = 0
1:3/1/terrains_peering_bit/right_side = 0
1:3/1/terrains_peering_bit/bottom_right_corner = 0
1:3/1/terrains_peering_bit/bottom_side = 0
1:3/1/terrains_peering_bit/top_side = 0
1:3/1/terrains_peering_bit/top_right_corner = 0
2:3/next_alternative_id = 6
2:3/0 = 0 2:3/0 = 0
2:3/0/terrain_set = 0
2:3/0/terrain = 0
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:3/0/terrains_peering_bit/right_side = 0
2:3/0/terrains_peering_bit/bottom_right_corner = 0
2:3/0/terrains_peering_bit/bottom_side = 0
2:3/0/terrains_peering_bit/bottom_left_corner = 0
2:3/0/terrains_peering_bit/left_side = 0
2:3/0/terrains_peering_bit/top_left_corner = 0
2:3/0/terrains_peering_bit/top_side = 0
2:3/0/terrains_peering_bit/top_right_corner = 0
2:3/1 = 1
2:3/1/flip_h = true
2:3/1/terrain_set = 0
2:3/1/terrain = 0
2:3/1/terrains_peering_bit/right_side = 0
2:3/1/terrains_peering_bit/bottom_right_corner = 0
2:3/1/terrains_peering_bit/bottom_side = 0
2:3/1/terrains_peering_bit/bottom_left_corner = 0
2:3/1/terrains_peering_bit/left_side = 0
2:3/1/terrains_peering_bit/top_left_corner = 0
2:3/1/terrains_peering_bit/top_side = 0
2:3/1/terrains_peering_bit/top_right_corner = 0
2:3/2 = 2
2:3/2/flip_v = true
2:3/2/terrain_set = 0
2:3/2/terrain = 0
2:3/2/terrains_peering_bit/right_side = 0
2:3/2/terrains_peering_bit/bottom_right_corner = 0
2:3/2/terrains_peering_bit/bottom_side = 0
2:3/2/terrains_peering_bit/bottom_left_corner = 0
2:3/2/terrains_peering_bit/left_side = 0
2:3/2/terrains_peering_bit/top_left_corner = 0
2:3/2/terrains_peering_bit/top_side = 0
2:3/2/terrains_peering_bit/top_right_corner = 0
2:3/4 = 4
2:3/4/transpose = true
2:3/4/terrain_set = 0
2:3/4/terrain = 0
2:3/4/terrains_peering_bit/right_side = 0
2:3/4/terrains_peering_bit/bottom_right_corner = 0
2:3/4/terrains_peering_bit/bottom_side = 0
2:3/4/terrains_peering_bit/bottom_left_corner = 0
2:3/4/terrains_peering_bit/left_side = 0
2:3/4/terrains_peering_bit/top_left_corner = 0
2:3/4/terrains_peering_bit/top_side = 0
2:3/4/terrains_peering_bit/top_right_corner = 0
2:3/5 = 5
2:3/5/flip_h = true
2:3/5/transpose = true
2:3/5/terrain_set = 0
2:3/5/terrain = 0
2:3/5/terrains_peering_bit/right_side = 0
2:3/5/terrains_peering_bit/bottom_right_corner = 0
2:3/5/terrains_peering_bit/bottom_side = 0
2:3/5/terrains_peering_bit/bottom_left_corner = 0
2:3/5/terrains_peering_bit/left_side = 0
2:3/5/terrains_peering_bit/top_left_corner = 0
2:3/5/terrains_peering_bit/top_side = 0
2:3/5/terrains_peering_bit/top_right_corner = 0
3:3/next_alternative_id = 2
3:3/0 = 0 3:3/0 = 0
3:3/0/terrain_set = 0
3:3/0/terrain = 0
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:3/0/terrains_peering_bit/bottom_side = 0
3:3/0/terrains_peering_bit/bottom_left_corner = 0
3:3/0/terrains_peering_bit/left_side = 0
3:3/0/terrains_peering_bit/top_left_corner = 0
3:3/0/terrains_peering_bit/top_side = 0
3:3/1 = 1
3:3/1/flip_v = true
3:3/1/terrain_set = 0
3:3/1/terrain = 0
3:3/1/terrains_peering_bit/bottom_side = 0
3:3/1/terrains_peering_bit/bottom_left_corner = 0
3:3/1/terrains_peering_bit/left_side = 0
3:3/1/terrains_peering_bit/top_left_corner = 0
3:3/1/terrains_peering_bit/top_side = 0
4:3/0 = 0 4:3/0 = 0
4:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:3/0 = 0 5:3/0 = 0
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:3/0 = 0 6:3/0 = 0
6:3/0/terrain_set = 0
6:3/0/terrain = 0
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:3/0/terrains_peering_bit/right_side = 0
6:3/0/terrains_peering_bit/bottom_side = 0
6:3/0/terrains_peering_bit/bottom_left_corner = 0
6:3/0/terrains_peering_bit/left_side = 0
6:3/0/terrains_peering_bit/top_left_corner = 0
6:3/0/terrains_peering_bit/top_side = 0
6:3/0/terrains_peering_bit/top_right_corner = 0
7:3/0 = 0 7:3/0 = 0
7:3/0/terrain_set = 0
7:3/0/terrain = 0
7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
7:3/0/terrains_peering_bit/right_side = 0
7:3/0/terrains_peering_bit/bottom_right_corner = 0
7:3/0/terrains_peering_bit/bottom_side = 0
7:3/0/terrains_peering_bit/left_side = 0
7:3/0/terrains_peering_bit/top_left_corner = 0
7:3/0/terrains_peering_bit/top_side = 0
7:3/0/terrains_peering_bit/top_right_corner = 0
8:3/0 = 0 8:3/0 = 0
9:3/0 = 0 9:3/0 = 0
10:3/0 = 0 10:3/0 = 0
11:3/0 = 0 11:3/0 = 0
0:4/0 = 0 0:4/0 = 0
1:4/0 = 0 1:4/0 = 0
1:4/0/terrain_set = 0
1:4/0/terrain = 0
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
1:4/0/terrains_peering_bit/right_side = 0
1:4/0/terrains_peering_bit/top_side = 0
1:4/0/terrains_peering_bit/top_right_corner = 0
0:5/0 = 0 0:5/0 = 0
1:5/0 = 0 1:5/0 = 0
2:4/next_alternative_id = 2
2:4/0 = 0
2:4/0/terrain_set = 0
2:4/0/terrain = 0
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
2:4/0/terrains_peering_bit/right_side = 0
2:4/0/terrains_peering_bit/left_side = 0
2:4/0/terrains_peering_bit/top_left_corner = 0
2:4/0/terrains_peering_bit/top_side = 0
2:4/0/terrains_peering_bit/top_right_corner = 0
2:4/1 = 1
2:4/1/flip_h = true
2:4/1/terrain_set = 0
2:4/1/terrain = 0
2:4/1/terrains_peering_bit/right_side = 0
2:4/1/terrains_peering_bit/left_side = 0
2:4/1/terrains_peering_bit/top_left_corner = 0
2:4/1/terrains_peering_bit/top_side = 0
2:4/1/terrains_peering_bit/top_right_corner = 0
3:4/0 = 0
3:4/0/terrain_set = 0
3:4/0/terrain = 0
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
3:4/0/terrains_peering_bit/left_side = 0
3:4/0/terrains_peering_bit/top_left_corner = 0
3:4/0/terrains_peering_bit/top_side = 0
6:4/0 = 0
6:4/0/terrain_set = 0
6:4/0/terrain = 0
6:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
6:4/0/terrains_peering_bit/right_side = 0
6:4/0/terrains_peering_bit/bottom_right_corner = 0
6:4/0/terrains_peering_bit/bottom_side = 0
6:4/0/terrains_peering_bit/bottom_left_corner = 0
6:4/0/terrains_peering_bit/left_side = 0
6:4/0/terrains_peering_bit/top_left_corner = 0
6:4/0/terrains_peering_bit/top_side = 0
7:4/0 = 0
7:4/0/terrain_set = 0
7:4/0/terrain = 0
7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
7:4/0/terrains_peering_bit/right_side = 0
7:4/0/terrains_peering_bit/bottom_right_corner = 0
7:4/0/terrains_peering_bit/bottom_side = 0
7:4/0/terrains_peering_bit/bottom_left_corner = 0
7:4/0/terrains_peering_bit/left_side = 0
7:4/0/terrains_peering_bit/top_side = 0
7:4/0/terrains_peering_bit/top_right_corner = 0
4:4/0 = 0
4:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
5:4/0 = 0
5:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, -16, 16, 16, 16, 16, -16)
[resource] [resource]
tile_size = Vector2i(32, 32) tile_size = Vector2i(32, 32)
physics_layer_0/collision_layer = 1 physics_layer_0/collision_layer = 1
terrain_set_0/mode = 0
terrain_set_0/terrain_0/name = "Brick"
terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1)
sources/0 = SubResource("TileSetAtlasSource_blkrv") sources/0 = SubResource("TileSetAtlasSource_blkrv")
+34 -5
View File
@@ -16,14 +16,39 @@ public partial class PlayerPhysicsController : CharacterBody2D {
[Export] [Export]
public float JumpScale { get; set; } = 12; public float JumpScale { get; set; } = 12;
[Export]
public float FrictionCoefficent { get; set; } = 0.1f;
[Export] [Export]
public Label DebugTextLabel { get; set; } public Label DebugTextLabel { get; set; }
[Export] [Export]
public float Gravity { get; set; } = 9.8f; public AnimatedSprite2D Sprite { get; set; }
[Export]
public float Gravity { get; set; } = 980f;
private float _timeInFlight = 0; private float _timeInFlight = 0;
private float epsilon = 10e-5f;
public override void _Process(double delta) {
var grounded = this.IsOnFloor();
var absvel = new Vector2(Mathf.Abs(Velocity.X), Mathf.Abs(Velocity.Y));
Sprite.FlipH = Velocity.X < 0;
if (grounded && absvel.X > 0) {
Sprite.Play("walk", absvel.X switch {
< 10 => 1,
< 150 => 2,
< 300 => 4,
_ => 1
});
} else if (grounded && absvel.X < epsilon && absvel.Y < epsilon) {
Sprite.Play("idle");
}
}
public override void _PhysicsProcess(double delta) { public override void _PhysicsProcess(double delta) {
var xAxis = Input.GetAxis("move_left", "move_right") * MovementScale; var xAxis = Input.GetAxis("move_left", "move_right") * MovementScale;
var yAxis = Input.GetAxis("look_up", "look_down"); var yAxis = Input.GetAxis("look_up", "look_down");
@@ -39,17 +64,21 @@ public partial class PlayerPhysicsController : CharacterBody2D {
_timeInFlight = 0; _timeInFlight = 0;
jumpStrength *= Mathf.Exp(-JumpStrengthDecay * _timeInFlight); jumpStrength *= Mathf.Exp(-JumpStrengthDecay * _timeInFlight);
// autorun
var friction = Mathf.Abs(Velocity.X) > 125 ? FrictionCoefficent * 1/8f : FrictionCoefficent;
// var decay = Mathf.Abs(Velocity.X) > 125 ? MovementDecay * 1/4f : MovementDecay;
xAxis *= Mathf.Exp(-MovementDecay * Mathf.Abs(Velocity.X)); xAxis *= Mathf.Exp(-MovementDecay * Mathf.Abs(Velocity.X));
xAxis -= Velocity.X * friction;
var moveVector = new Vector2((float)(delta * xAxis), (float)( delta * (Gravity + jumpStrength)));
var moveVector = new Vector2(xAxis, Gravity + jumpStrength); DebugTextLabel.Text = $"grounded: {grounded}\nmv: {moveVector}\n vel: {Velocity}\n jumpStrength: {jumpStrength}\ntimeInFlight: {_timeInFlight}";
DebugTextLabel.Text = $"grounded: {grounded}\nmv: {moveVector}\njumpStrength: {jumpStrength}\ntimeInFlight: {_timeInFlight}";
Velocity += moveVector; Velocity += moveVector;
MoveAndSlide(); MoveAndSlide();
if (!grounded) if (!grounded)
_timeInFlight += (float)delta; _timeInFlight += (float)delta;
base._Process(delta); base._PhysicsProcess(delta);
} }