generated from krampus/template-godot4
Compare commits
No commits in common. "main" and "v0.0.1" have entirely different histories.
@ -36,7 +36,7 @@ loop-variable-name: _?[a-z][a-z0-9]*(_[a-z0-9]+)*
|
|||||||
max-file-lines: 1000
|
max-file-lines: 1000
|
||||||
max-line-length: 100
|
max-line-length: 100
|
||||||
max-public-methods: 40
|
max-public-methods: 40
|
||||||
max-returns: 99
|
max-returns: 6
|
||||||
mixed-tabs-and-spaces: null
|
mixed-tabs-and-spaces: null
|
||||||
no-elif-return: null
|
no-elif-return: null
|
||||||
no-else-return: null
|
no-else-return: null
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
name: linting & formatting
|
|
||||||
run-name: ${{ gitea.actor }} is checking linting & formatting.
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
- ci-test
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
run: |
|
|
||||||
git init
|
|
||||||
git remote add origin ${{ gitea.event.repository.clone_url }}
|
|
||||||
git fetch --depth 1 origin ${{ gitea.ref }}
|
|
||||||
git checkout FETCH_HEAD
|
|
||||||
git lfs pull
|
|
||||||
- name: Setup Python
|
|
||||||
uses: actions/setup-python@v5.3.0
|
|
||||||
with:
|
|
||||||
python-version: '3.11'
|
|
||||||
- name: Install gdscript-toolkit
|
|
||||||
run: pip install -r requirements.txt
|
|
||||||
- name: Run gdLint
|
|
||||||
run: gdlint src/
|
|
||||||
- name: Check formatting
|
|
||||||
run: gdformat -c src
|
|
@ -1,54 +0,0 @@
|
|||||||
# Based on https://github.com/aBARICHELLO/godot-ci/blob/master/.github/workflows/godot-ci.yml
|
|
||||||
name: GFOLF - itch.io publish action
|
|
||||||
run-name: ${{ gitea.actor }} is publishing GFOLF ${{ gitea.ref_name }} to itch.io.
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- v*
|
|
||||||
|
|
||||||
env:
|
|
||||||
GODOT_VERSION: 4.3
|
|
||||||
EXPORT_NAME: gfolf
|
|
||||||
PROJECT_PATH: .
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-20.04
|
|
||||||
container:
|
|
||||||
image: barichello/godot-ci:4.3
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
- target: linux64
|
|
||||||
type: x86_64
|
|
||||||
- target: osx
|
|
||||||
type: app
|
|
||||||
- target: win64
|
|
||||||
type: exe
|
|
||||||
env:
|
|
||||||
BUILD_DIR: build/gfolf_${{ gitea.ref_name }}_${{ matrix.target }}
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
run: |
|
|
||||||
git init
|
|
||||||
git remote add origin ${{ gitea.event.repository.clone_url }}
|
|
||||||
git fetch --depth 1 origin ${{ gitea.ref }}
|
|
||||||
git checkout FETCH_HEAD
|
|
||||||
git lfs pull
|
|
||||||
- name: Reimport assets
|
|
||||||
# bruh are you fucking kidding me. bruhh
|
|
||||||
run: |
|
|
||||||
timeout 10 godot --headless --import || true
|
|
||||||
godot --headless --import
|
|
||||||
- name: Build project
|
|
||||||
run: |
|
|
||||||
echo "building to $BUILD_DIR"
|
|
||||||
mkdir -p $BUILD_DIR
|
|
||||||
godot --headless --export-debug ${{ matrix.target }} $BUILD_DIR/gfolf.${{ matrix.type }}
|
|
||||||
- name: Publish
|
|
||||||
run: |
|
|
||||||
echo "pushing $BUILD_DIR"
|
|
||||||
butler push $BUILD_DIR tetramorph/gfolf:${{ matrix.target }} --userversion ${{ gitea.ref_name }}
|
|
||||||
env:
|
|
||||||
BUTLER_API_KEY: ${{ secrets.BUTLER_API_KEY }}
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -4,7 +4,7 @@
|
|||||||
# Godot-specific ignores
|
# Godot-specific ignores
|
||||||
.import/
|
.import/
|
||||||
export.cfg
|
export.cfg
|
||||||
#export_presets.cfg
|
export_presets.cfg
|
||||||
|
|
||||||
# Imported translations (automatically generated from CSV files)
|
# Imported translations (automatically generated from CSV files)
|
||||||
*.translation
|
*.translation
|
||||||
|
@ -1,16 +1,7 @@
|
|||||||
# Gfolf2
|
# Gfolf2
|
||||||
|
|
||||||

|
|
||||||

|
|
||||||
|
|
||||||
GFOLF: Combat Golf Action
|
GFOLF: Combat Golf Action
|
||||||
|
|
||||||
## About
|
|
||||||
|
|
||||||
Go hit your friends with golf balls!
|
|
||||||
|
|
||||||
A prototype under active development.
|
|
||||||
|
|
||||||
## Development
|
## Development
|
||||||
|
|
||||||
see [[DEVELOPMENT.md]]
|
see [[DEVELOPMENT.md]]
|
||||||
|
@ -1,21 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2016-2023 The Godot Engine community
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
File diff suppressed because it is too large
Load Diff
@ -1,12 +0,0 @@
|
|||||||
[configuration]
|
|
||||||
|
|
||||||
entry_symbol = "git_plugin_init"
|
|
||||||
compatibility_minimum = "4.1.0"
|
|
||||||
|
|
||||||
[libraries]
|
|
||||||
|
|
||||||
macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
|
|
||||||
windows.editor.x86_64 = "win64/libgit_plugin.windows.editor.x86_64.dll"
|
|
||||||
linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
|
|
||||||
linux.editor.arm64 = "linux/libgit_plugin.linux.editor.arm64.so"
|
|
||||||
linux.editor.rv64 = ""
|
|
Binary file not shown.
Binary file not shown.
@ -1,7 +0,0 @@
|
|||||||
[plugin]
|
|
||||||
|
|
||||||
name="Godot Git Plugin"
|
|
||||||
description="This plugin lets you interact with Git without leaving the Godot editor. More information can be found at https://github.com/godotengine/godot-git-plugin/wiki"
|
|
||||||
author="twaritwaikar"
|
|
||||||
version="v3.1.1"
|
|
||||||
script="godot-git-plugin.gd"
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -11,14 +11,6 @@ Asset credits
|
|||||||
|
|
||||||
*** License: CC BY 4.0
|
*** License: CC BY 4.0
|
||||||
|
|
||||||
** Kenney.nl particle pack
|
|
||||||
|
|
||||||
*** Retrieved from https://www.kenney.nl/assets/particle-pack
|
|
||||||
|
|
||||||
*** Author: kenney.nl
|
|
||||||
|
|
||||||
*** License: CC0
|
|
||||||
|
|
||||||
* Fonts
|
* Fonts
|
||||||
|
|
||||||
** PromptFont
|
** PromptFont
|
||||||
@ -65,16 +57,6 @@ Asset credits
|
|||||||
|
|
||||||
*** Retrieved from https://github.com/AlphaZTX/Two-Weekends-Sans
|
*** Retrieved from https://github.com/AlphaZTX/Two-Weekends-Sans
|
||||||
|
|
||||||
*** Author: AlphaZTX
|
|
||||||
|
|
||||||
*** License: OFL 1.1
|
|
||||||
|
|
||||||
** CLASSIC Better VCR
|
|
||||||
|
|
||||||
*** Retrieved from https://fontstruct.com/fontstructions/show/2505236/classic-better-vcr
|
|
||||||
|
|
||||||
*** Author: Artdzyk
|
|
||||||
|
|
||||||
*** License: OFL 1.1
|
*** License: OFL 1.1
|
||||||
|
|
||||||
* Sound
|
* Sound
|
||||||
@ -174,11 +156,3 @@ Asset credits
|
|||||||
*** Author: LiamG_SFX
|
*** Author: LiamG_SFX
|
||||||
|
|
||||||
*** License: CC BY 4.0
|
*** License: CC BY 4.0
|
||||||
|
|
||||||
** objectDunk1.MP3
|
|
||||||
|
|
||||||
*** Retrieved from https://freesound.org/people/rabban625/sounds/436473/
|
|
||||||
|
|
||||||
*** Author: rabban625
|
|
||||||
|
|
||||||
*** License: CC0
|
|
||||||
|
BIN
asset_dev/audio/436473__rabban625__objectdunk1.mp3
(Stored with Git LFS)
BIN
asset_dev/audio/436473__rabban625__objectdunk1.mp3
(Stored with Git LFS)
Binary file not shown.
BIN
asset_dev/levels/mall.blend
(Stored with Git LFS)
BIN
asset_dev/levels/mall.blend
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
BIN
asset_dev/particles/bubble.png
(Stored with Git LFS)
BIN
asset_dev/particles/bubble.png
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,34 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="font_data_dynamic"
|
|
||||||
type="FontFile"
|
|
||||||
uid="uid://dwy8k2w7vt64x"
|
|
||||||
path="res://.godot/imported/classic-better-vcr.otf-78a95e88b4c7ad31748ba0a4ef1b3b0b.fontdata"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/fonts/classic-better-vcr/classic-better-vcr.otf"
|
|
||||||
dest_files=["res://.godot/imported/classic-better-vcr.otf-78a95e88b4c7ad31748ba0a4ef1b3b0b.fontdata"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
Rendering=null
|
|
||||||
antialiasing=1
|
|
||||||
generate_mipmaps=false
|
|
||||||
disable_embedded_bitmaps=true
|
|
||||||
multichannel_signed_distance_field=false
|
|
||||||
msdf_pixel_range=8
|
|
||||||
msdf_size=48
|
|
||||||
allow_system_fallback=true
|
|
||||||
force_autohinter=false
|
|
||||||
hinting=1
|
|
||||||
subpixel_positioning=1
|
|
||||||
oversampling=0.0
|
|
||||||
Fallbacks=null
|
|
||||||
fallbacks=[]
|
|
||||||
Compress=null
|
|
||||||
compress=true
|
|
||||||
preload=[]
|
|
||||||
language_support={}
|
|
||||||
script_support={}
|
|
||||||
opentype_features={}
|
|
@ -1,93 +0,0 @@
|
|||||||
Copyright (c) 2024, Artdzyk
|
|
||||||
(https://fontstruct.com/fontstructors/2103201/siroutyugist)
|
|
||||||
|
|
||||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
||||||
This license is copied below, and is also available with a FAQ at:
|
|
||||||
http://scripts.sil.org/OFL
|
|
||||||
|
|
||||||
-----------------------------------------------------------
|
|
||||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
||||||
-----------------------------------------------------------
|
|
||||||
|
|
||||||
PREAMBLE
|
|
||||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
||||||
development of collaborative font projects, to support the font creation
|
|
||||||
efforts of academic and linguistic communities, and to provide a free and
|
|
||||||
open framework in which fonts may be shared and improved in partnership
|
|
||||||
with others.
|
|
||||||
|
|
||||||
The OFL allows the licensed fonts to be used, studied, modified and
|
|
||||||
redistributed freely as long as they are not sold by themselves. The
|
|
||||||
fonts, including any derivative works, can be bundled, embedded,
|
|
||||||
redistributed and/or sold with any software provided that any reserved
|
|
||||||
names are not used by derivative works. The fonts and derivatives,
|
|
||||||
however, cannot be released under any other type of license. The
|
|
||||||
requirement for fonts to remain under this license does not apply
|
|
||||||
to any document created using the fonts or their derivatives.
|
|
||||||
|
|
||||||
DEFINITIONS
|
|
||||||
"Font Software" refers to the set of files released by the Copyright
|
|
||||||
Holder(s) under this license and clearly marked as such. This may
|
|
||||||
include source files, build scripts and documentation.
|
|
||||||
|
|
||||||
"Reserved Font Name" refers to any names specified as such after the
|
|
||||||
copyright statement(s).
|
|
||||||
|
|
||||||
"Original Version" refers to the collection of Font Software components as
|
|
||||||
distributed by the Copyright Holder(s).
|
|
||||||
|
|
||||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
||||||
or substituting -- in part or in whole -- any of the components of the
|
|
||||||
Original Version, by changing formats or by porting the Font Software to a
|
|
||||||
new environment.
|
|
||||||
|
|
||||||
"Author" refers to any designer, engineer, programmer, technical
|
|
||||||
writer or other person who contributed to the Font Software.
|
|
||||||
|
|
||||||
PERMISSION & CONDITIONS
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
|
||||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
||||||
redistribute, and sell modified and unmodified copies of the Font
|
|
||||||
Software, subject to the following conditions:
|
|
||||||
|
|
||||||
1) Neither the Font Software nor any of its individual components,
|
|
||||||
in Original or Modified Versions, may be sold by itself.
|
|
||||||
|
|
||||||
2) Original or Modified Versions of the Font Software may be bundled,
|
|
||||||
redistributed and/or sold with any software, provided that each copy
|
|
||||||
contains the above copyright notice and this license. These can be
|
|
||||||
included either as stand-alone text files, human-readable headers or
|
|
||||||
in the appropriate machine-readable metadata fields within text or
|
|
||||||
binary files as long as those fields can be easily viewed by the user.
|
|
||||||
|
|
||||||
3) No Modified Version of the Font Software may use the Reserved Font
|
|
||||||
Name(s) unless explicit written permission is granted by the corresponding
|
|
||||||
Copyright Holder. This restriction only applies to the primary font name as
|
|
||||||
presented to the users.
|
|
||||||
|
|
||||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
||||||
Software shall not be used to promote, endorse or advertise any
|
|
||||||
Modified Version, except to acknowledge the contribution(s) of the
|
|
||||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
||||||
permission.
|
|
||||||
|
|
||||||
5) The Font Software, modified or unmodified, in part or in whole,
|
|
||||||
must be distributed entirely under this license, and must not be
|
|
||||||
distributed under any other license. The requirement for fonts to
|
|
||||||
remain under this license does not apply to any document created
|
|
||||||
using the Font Software.
|
|
||||||
|
|
||||||
TERMINATION
|
|
||||||
This license becomes null and void if any of the above conditions are
|
|
||||||
not met.
|
|
||||||
|
|
||||||
DISCLAIMER
|
|
||||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
||||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
||||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
||||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
||||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
||||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
@ -1,22 +0,0 @@
|
|||||||
The font file in this archive was created using Fontstruct the free, online
|
|
||||||
font-building tool.
|
|
||||||
This font was created by Artdzyk *.
|
|
||||||
This font has a homepage where this archive and other versions may be found:
|
|
||||||
https://fontstruct.com/fontstructions/show/2505236
|
|
||||||
|
|
||||||
*NOTE: “CLASSIC Better VCR” was originally cloned (copied) from the
|
|
||||||
FontStruction “12x16 iskra”
|
|
||||||
(https://fontstruct.com/fontstructions/show/2274822) by Artdzyk , which is
|
|
||||||
licensed under a Open Font License license
|
|
||||||
(https://fontstruct.com/fontstructions/license/2274822).
|
|
||||||
|
|
||||||
Try Fontstruct at https://fontstruct.com
|
|
||||||
It’s easy and it’s fun.
|
|
||||||
|
|
||||||
Fontstruct is copyright ©2024 Rob Meek
|
|
||||||
|
|
||||||
LEGAL NOTICE:
|
|
||||||
In using this font you must comply with the licensing terms described in the
|
|
||||||
file “license.txt” included with this archive.
|
|
||||||
If you redistribute the font file in this archive, it must be accompanied by all
|
|
||||||
the other files from this archive, including this one.
|
|
BIN
assets/sound/sfx/ball/splash1.wav
(Stored with Git LFS)
BIN
assets/sound/sfx/ball/splash1.wav
(Stored with Git LFS)
Binary file not shown.
@ -1,24 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="wav"
|
|
||||||
type="AudioStreamWAV"
|
|
||||||
uid="uid://dutumw1vj854w"
|
|
||||||
path="res://.godot/imported/splash1.wav-c515553fa6b3d442d978831ce07dccfa.sample"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sound/sfx/ball/splash1.wav"
|
|
||||||
dest_files=["res://.godot/imported/splash1.wav-c515553fa6b3d442d978831ce07dccfa.sample"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
force/8_bit=false
|
|
||||||
force/mono=false
|
|
||||||
force/max_rate=false
|
|
||||||
force/max_rate_hz=44100
|
|
||||||
edit/trim=false
|
|
||||||
edit/normalize=false
|
|
||||||
edit/loop_mode=0
|
|
||||||
edit/loop_begin=0
|
|
||||||
edit/loop_end=-1
|
|
||||||
compress/mode=0
|
|
BIN
assets/sprites/particles/bubble.png
(Stored with Git LFS)
BIN
assets/sprites/particles/bubble.png
(Stored with Git LFS)
Binary file not shown.
@ -1,36 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bjnil2wvvf35q"
|
|
||||||
path.s3tc="res://.godot/imported/bubble.png-c5759ab17447a1372d60f0e86df9d865.s3tc.ctex"
|
|
||||||
path.etc2="res://.godot/imported/bubble.png-c5759ab17447a1372d60f0e86df9d865.etc2.ctex"
|
|
||||||
metadata={
|
|
||||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
|
||||||
"vram_texture": true
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sprites/particles/bubble.png"
|
|
||||||
dest_files=["res://.godot/imported/bubble.png-c5759ab17447a1372d60f0e86df9d865.s3tc.ctex", "res://.godot/imported/bubble.png-c5759ab17447a1372d60f0e86df9d865.etc2.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=2
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=true
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
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=0
|
|
BIN
assets/sprites/particles/light_03.png
(Stored with Git LFS)
BIN
assets/sprites/particles/light_03.png
(Stored with Git LFS)
Binary file not shown.
@ -1,34 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://bogj6pvl2a7d"
|
|
||||||
path="res://.godot/imported/light_03.png-cbfa7c9430e204e671021262b00ddb04.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sprites/particles/light_03.png"
|
|
||||||
dest_files=["res://.godot/imported/light_03.png-cbfa7c9430e204e671021262b00ddb04.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=true
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
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=0
|
|
BIN
assets/sprites/particles/smudge.png
(Stored with Git LFS)
BIN
assets/sprites/particles/smudge.png
(Stored with Git LFS)
Binary file not shown.
@ -1,34 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dy310v1j5vexd"
|
|
||||||
path="res://.godot/imported/smudge.png-6be29afb408991155df57310104cb1f8.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://assets/sprites/particles/smudge.png"
|
|
||||||
dest_files=["res://.godot/imported/smudge.png-6be29afb408991155df57310104cb1f8.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=true
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
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=0
|
|
@ -124,7 +124,6 @@ ACTION_club_previous,"Select previous club"
|
|||||||
ACTION_pause,Pause
|
ACTION_pause,Pause
|
||||||
ACTION_ball_next,"Select next ball"
|
ACTION_ball_next,"Select next ball"
|
||||||
ACTION_ball_previous,"Select previous ball"
|
ACTION_ball_previous,"Select previous ball"
|
||||||
ACTION_fast_forward,Fast-forward
|
|
||||||
,
|
,
|
||||||
ACTION_FREE_CAMERA,"Free Camera"
|
ACTION_FREE_CAMERA,"Free Camera"
|
||||||
ACTION_AIM,Aim
|
ACTION_AIM,Aim
|
||||||
|
|
@ -3,27 +3,25 @@
|
|||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://tancoet1lih5"
|
uid="uid://tancoet1lih5"
|
||||||
path.s3tc="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.s3tc.ctex"
|
path="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.ctex"
|
||||||
path.etc2="res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.etc2.ctex"
|
|
||||||
metadata={
|
metadata={
|
||||||
"imported_formats": ["s3tc_bptc", "etc2_astc"],
|
"vram_texture": false
|
||||||
"vram_texture": true
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://assets/ui/ball_icons/basic_icon.png"
|
source_file="res://assets/ui/ball_icons/basic_icon.png"
|
||||||
dest_files=["res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.s3tc.ctex", "res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.etc2.ctex"]
|
dest_files=["res://.godot/imported/basic_icon.png-bc904292cc126e1d3e1fd0eb1ba5acc2.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
compress/mode=2
|
compress/mode=0
|
||||||
compress/high_quality=false
|
compress/high_quality=false
|
||||||
compress/lossy_quality=0.7
|
compress/lossy_quality=0.7
|
||||||
compress/hdr_compression=1
|
compress/hdr_compression=1
|
||||||
compress/normal_map=0
|
compress/normal_map=0
|
||||||
compress/channel_pack=0
|
compress/channel_pack=0
|
||||||
mipmaps/generate=true
|
mipmaps/generate=false
|
||||||
mipmaps/limit=-1
|
mipmaps/limit=-1
|
||||||
roughness/mode=0
|
roughness/mode=0
|
||||||
roughness/src_normal=""
|
roughness/src_normal=""
|
||||||
@ -33,4 +31,4 @@ process/normal_map_invert_y=false
|
|||||||
process/hdr_as_srgb=false
|
process/hdr_as_srgb=false
|
||||||
process/hdr_clamp_exposure=false
|
process/hdr_clamp_exposure=false
|
||||||
process/size_limit=0
|
process/size_limit=0
|
||||||
detect_3d/compress_to=0
|
detect_3d/compress_to=1
|
||||||
|
@ -1,80 +0,0 @@
|
|||||||
#! /usr/bin/env bash
|
|
||||||
## Build & package all project targets for a debug release
|
|
||||||
|
|
||||||
PROJECT_NAME="gfolf"
|
|
||||||
|
|
||||||
HELPMSG=$(cat <<EOF
|
|
||||||
debug_build.sh - helper script for automatically packaging project debug builds.
|
|
||||||
|
|
||||||
Usage:
|
|
||||||
./debug_build.sh [options]
|
|
||||||
|
|
||||||
Options:
|
|
||||||
-f, --force Overwrite an existing build for this tag, if there is one.
|
|
||||||
|
|
||||||
-h, --help Display this help.
|
|
||||||
|
|
||||||
EOF
|
|
||||||
)
|
|
||||||
|
|
||||||
## Parse options
|
|
||||||
OPTS=`getopt -o hf -- "$@"`
|
|
||||||
if [ $? -ne 0 ]; then echo "(error) Failed parsing options." >&2; exit 1; fi
|
|
||||||
eval set -- "$OPTS"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
case "$1" in
|
|
||||||
-h | --help ) echo "$HELPMSG"; exit 0;;
|
|
||||||
-f | --force ) FORCE=1; shift;;
|
|
||||||
-- ) shift; break;;
|
|
||||||
* ) break;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
VERSION_TAG=`git describe`
|
|
||||||
BUILD_DIR="data_package/$VERSION_TAG"
|
|
||||||
if [ -d $BUILD_DIR ] && [ ! $FORCE ]; then
|
|
||||||
echo "(error) Build directory `$BUILD_DIR` exists! Aborting..."
|
|
||||||
echo "(HINT: use -f to force overwrite!)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Packaging to: $BUILD_DIR"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Shared build logic
|
|
||||||
function build_project {
|
|
||||||
TARGET="$1"
|
|
||||||
TARGET_EXT="$3"
|
|
||||||
TARGET_SUBDIR="$PROJECT_NAME""_$TARGET"
|
|
||||||
TARGET_DIR="$BUILD_DIR/$TARGET_SUBDIR"
|
|
||||||
TARGET_OUT="$TARGET_DIR/$PROJECT_NAME.$TARGET_EXT"
|
|
||||||
|
|
||||||
echo "Building target '$TARGET' to: $TARGET_OUT"
|
|
||||||
|
|
||||||
set -x
|
|
||||||
rm -rf "$TARGET_DIR"
|
|
||||||
mkdir -p $TARGET_DIR
|
|
||||||
godot --headless --export-debug "$TARGET" $TARGET_OUT
|
|
||||||
set +x
|
|
||||||
|
|
||||||
ZIP_OUT="$PROJECT_NAME""_$VERSION_TAG""_$TARGET.7z"
|
|
||||||
echo "Packaging to: $ZIP_OUT"
|
|
||||||
# TODO
|
|
||||||
|
|
||||||
set -x
|
|
||||||
(cd $BUILD_DIR && 7z a $ZIP_OUT $TARGET_SUBDIR)
|
|
||||||
set +x
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
# Build linux
|
|
||||||
build_project "linux64" "x86_64"
|
|
||||||
|
|
||||||
# Build OSX
|
|
||||||
build_project "osx" "app"
|
|
||||||
|
|
||||||
# Build Michaelsoft Binbows
|
|
||||||
build_project "win64" "exe"
|
|
@ -1,354 +0,0 @@
|
|||||||
[preset.0]
|
|
||||||
|
|
||||||
name="linux64"
|
|
||||||
platform="Linux"
|
|
||||||
runnable=true
|
|
||||||
advanced_options=true
|
|
||||||
dedicated_server=false
|
|
||||||
custom_features=""
|
|
||||||
export_filter="all_resources"
|
|
||||||
include_filter=""
|
|
||||||
exclude_filter="data_backup/*"
|
|
||||||
export_path="data_build/linux64/gfolf.x86_64"
|
|
||||||
encryption_include_filters=""
|
|
||||||
encryption_exclude_filters=""
|
|
||||||
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=true
|
|
||||||
texture_format/s3tc_bptc=true
|
|
||||||
texture_format/etc2_astc=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
|
|
||||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\")
|
|
||||||
rm -rf \"{temp_dir}\""
|
|
||||||
|
|
||||||
[preset.1]
|
|
||||||
|
|
||||||
name="win64"
|
|
||||||
platform="Windows Desktop"
|
|
||||||
runnable=true
|
|
||||||
advanced_options=true
|
|
||||||
dedicated_server=false
|
|
||||||
custom_features=""
|
|
||||||
export_filter="all_resources"
|
|
||||||
include_filter=""
|
|
||||||
exclude_filter="data_backup/*"
|
|
||||||
export_path="data_build/win64/gfolf.exe"
|
|
||||||
encryption_include_filters=""
|
|
||||||
encryption_exclude_filters=""
|
|
||||||
encrypt_pck=false
|
|
||||||
encrypt_directory=false
|
|
||||||
script_export_mode=2
|
|
||||||
|
|
||||||
[preset.1.options]
|
|
||||||
|
|
||||||
custom_template/debug=""
|
|
||||||
custom_template/release=""
|
|
||||||
debug/export_console_wrapper=1
|
|
||||||
binary_format/embed_pck=true
|
|
||||||
texture_format/s3tc_bptc=true
|
|
||||||
texture_format/etc2_astc=false
|
|
||||||
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="Rob Kelly"
|
|
||||||
application/product_name="GFOLF"
|
|
||||||
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
|
|
||||||
$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}'"
|
|
||||||
|
|
||||||
[preset.2]
|
|
||||||
|
|
||||||
name="osx"
|
|
||||||
platform="macOS"
|
|
||||||
runnable=true
|
|
||||||
advanced_options=true
|
|
||||||
dedicated_server=false
|
|
||||||
custom_features=""
|
|
||||||
export_filter="all_resources"
|
|
||||||
include_filter=""
|
|
||||||
exclude_filter="data_backup/*"
|
|
||||||
export_path="data_build/osx/gfolf.app"
|
|
||||||
encryption_include_filters=""
|
|
||||||
encryption_exclude_filters=""
|
|
||||||
encrypt_pck=false
|
|
||||||
encrypt_directory=false
|
|
||||||
script_export_mode=2
|
|
||||||
|
|
||||||
[preset.2.options]
|
|
||||||
|
|
||||||
export/distribution_type=1
|
|
||||||
binary_format/architecture="universal"
|
|
||||||
custom_template/debug=""
|
|
||||||
custom_template/release=""
|
|
||||||
debug/export_console_wrapper=1
|
|
||||||
application/icon=""
|
|
||||||
application/icon_interpolation=4
|
|
||||||
application/bundle_identifier="com.gfolf"
|
|
||||||
application/signature=""
|
|
||||||
application/app_category="Games"
|
|
||||||
application/short_version=""
|
|
||||||
application/version=""
|
|
||||||
application/copyright=""
|
|
||||||
application/copyright_localized={}
|
|
||||||
application/min_macos_version="10.12"
|
|
||||||
application/export_angle=0
|
|
||||||
display/high_res=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=true
|
|
||||||
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/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_hhistory/collected=false
|
|
||||||
privacy/collected_data/search_hhistory/linked_to_user=false
|
|
||||||
privacy/collected_data/search_hhistory/used_for_tracking=false
|
|
||||||
privacy/collected_data/search_hhistory/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
|
|
||||||
kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\")
|
|
||||||
rm -rf \"{temp_dir}\""
|
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=66 format=3 uid="uid://bm2o3mex10v11"]
|
[gd_scene load_steps=64 format=3 uid="uid://bm2o3mex10v11"]
|
||||||
|
|
||||||
[ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="1_5smdk"]
|
[ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="1_5smdk"]
|
||||||
[ext_resource type="Material" uid="uid://drxnue0xsen13" path="res://assets/materials/tropical_water.tres" id="4_bwkbv"]
|
[ext_resource type="Material" uid="uid://drxnue0xsen13" path="res://assets/materials/tropical_water.tres" id="4_bwkbv"]
|
||||||
@ -20,12 +20,10 @@
|
|||||||
[ext_resource type="Texture2D" uid="uid://du3vk5nnksohs" path="res://assets/sprites/particles/sparkle.png" id="16_2m5yu"]
|
[ext_resource type="Texture2D" uid="uid://du3vk5nnksohs" path="res://assets/sprites/particles/sparkle.png" id="16_2m5yu"]
|
||||||
[ext_resource type="Shader" path="res://src/shaders/frosted_glass.gdshader" id="16_rat2n"]
|
[ext_resource type="Shader" path="res://src/shaders/frosted_glass.gdshader" id="16_rat2n"]
|
||||||
[ext_resource type="PackedScene" uid="uid://nqar1qcun8ax" path="res://src/props/scenery/highway/guard_rail/guard_rail.tscn" id="16_xtxyj"]
|
[ext_resource type="PackedScene" uid="uid://nqar1qcun8ax" path="res://src/props/scenery/highway/guard_rail/guard_rail.tscn" id="16_xtxyj"]
|
||||||
[ext_resource type="PackedScene" uid="uid://c6k44l0mnq3o1" path="res://src/world/effects/explosion/explosion_effect.tscn" id="16_xufks"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://d0tcr6uijpym5" path="res://src/props/scenery/highway/highway_road.tscn" id="17_amems"]
|
[ext_resource type="PackedScene" uid="uid://d0tcr6uijpym5" path="res://src/props/scenery/highway/highway_road.tscn" id="17_amems"]
|
||||||
[ext_resource type="Texture2D" uid="uid://bq8dxuxfw1rwu" path="res://assets/textures/wood/lacquered_planks.png" id="17_xciuf"]
|
[ext_resource type="Texture2D" uid="uid://bq8dxuxfw1rwu" path="res://assets/textures/wood/lacquered_planks.png" id="17_xciuf"]
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/grass_green/grass_green_albedo.dds" id="18_scall"]
|
[ext_resource type="Texture2D" path="res://assets/textures/grass_green/grass_green_albedo.dds" id="18_scall"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cblsayfgirexr" path="res://src/characters/umineko/umineko.tscn" id="21_ch6qk"]
|
[ext_resource type="PackedScene" uid="uid://cblsayfgirexr" path="res://src/characters/umineko/umineko.tscn" id="21_ch6qk"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="23_7p8cl"]
|
|
||||||
|
|
||||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"]
|
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"]
|
||||||
noise_type = 0
|
noise_type = 0
|
||||||
@ -69,12 +67,12 @@ auto_shader = true
|
|||||||
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_h8tes"]
|
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_h8tes"]
|
||||||
panorama = ExtResource("6_ectru")
|
panorama = ExtResource("6_ectru")
|
||||||
|
|
||||||
[sub_resource type="Sky" id="Sky_x5sbg"]
|
[sub_resource type="Sky" id="Sky_3yoab"]
|
||||||
sky_material = SubResource("PanoramaSkyMaterial_h8tes")
|
sky_material = SubResource("PanoramaSkyMaterial_h8tes")
|
||||||
|
|
||||||
[sub_resource type="Environment" id="Environment_k6wwx"]
|
[sub_resource type="Environment" id="Environment_k6wwx"]
|
||||||
background_mode = 2
|
background_mode = 2
|
||||||
sky = SubResource("Sky_x5sbg")
|
sky = SubResource("Sky_3yoab")
|
||||||
ambient_light_source = 2
|
ambient_light_source = 2
|
||||||
ambient_light_color = Color(0.78, 0.78, 0.78, 1)
|
ambient_light_color = Color(0.78, 0.78, 0.78, 1)
|
||||||
ssao_enabled = true
|
ssao_enabled = true
|
||||||
@ -307,6 +305,7 @@ directional_shadow_pancake_size = 5.0
|
|||||||
gravity_point_center = Vector3(0, 1, 0)
|
gravity_point_center = Vector3(0, 1, 0)
|
||||||
gravity_direction = Vector3(0, 1, 0)
|
gravity_direction = Vector3(0, 1, 0)
|
||||||
script = ExtResource("9_jwlau")
|
script = ExtResource("9_jwlau")
|
||||||
|
terrain_angular_damping = 2.0
|
||||||
|
|
||||||
[node name="CollisionPolygon3D" type="CollisionPolygon3D" parent="Course/Fairway"]
|
[node name="CollisionPolygon3D" type="CollisionPolygon3D" parent="Course/Fairway"]
|
||||||
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 209.788, 6.20358, 256.527)
|
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 209.788, 6.20358, 256.527)
|
||||||
@ -440,9 +439,6 @@ amount = -1
|
|||||||
spawn_on_ready = true
|
spawn_on_ready = true
|
||||||
spawn_turns = 1
|
spawn_turns = 1
|
||||||
|
|
||||||
[node name="ExplosionEffect" parent="Course" instance=ExtResource("16_xufks")]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 274.103, 5.01502, 286.299)
|
|
||||||
|
|
||||||
[node name="CityBuildings" type="Node3D" parent="."]
|
[node name="CityBuildings" type="Node3D" parent="."]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129.404, -9.53674e-07, 309.4)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 129.404, -9.53674e-07, 309.4)
|
||||||
|
|
||||||
@ -577,10 +573,6 @@ mesh = SubResource("BoxMesh_jpetf")
|
|||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="GravityCube/MeshInstance3D"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="GravityCube/MeshInstance3D"]
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="GravityCube/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("23_7p8cl")
|
|
||||||
type = 9
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityCube/MeshInstance3D/StaticBody3D"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityCube/MeshInstance3D/StaticBody3D"]
|
||||||
shape = SubResource("BoxShape3D_74f5g")
|
shape = SubResource("BoxShape3D_74f5g")
|
||||||
|
|
||||||
@ -647,10 +639,6 @@ mesh = SubResource("SphereMesh_ooxtq")
|
|||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="GravityOrb/MeshInstance3D"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="GravityOrb/MeshInstance3D"]
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="GravityOrb/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("23_7p8cl")
|
|
||||||
type = 5
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityOrb/MeshInstance3D/StaticBody3D"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="GravityOrb/MeshInstance3D/StaticBody3D"]
|
||||||
shape = SubResource("SphereShape3D_ne5nm")
|
shape = SubResource("SphereShape3D_ne5nm")
|
||||||
|
|
||||||
@ -670,10 +658,6 @@ transform = Transform3D(2.33934e-08, 0.535178, -0.844739, 1, -4.37114e-08, 0, -3
|
|||||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityBowl"]
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityBowl"]
|
||||||
use_collision = true
|
use_collision = true
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="GravityBowl/CSGCombiner3D"]
|
|
||||||
script = ExtResource("23_7p8cl")
|
|
||||||
type = 7
|
|
||||||
|
|
||||||
[node name="OuterCylinder" type="CSGCylinder3D" parent="GravityBowl/CSGCombiner3D"]
|
[node name="OuterCylinder" type="CSGCylinder3D" parent="GravityBowl/CSGCombiner3D"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 16, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 16, 0)
|
||||||
radius = 32.0
|
radius = 32.0
|
||||||
@ -705,10 +689,6 @@ transform = Transform3D(0.688355, -0.285755, 0.666717, 0, 0.919135, 0.393942, -0
|
|||||||
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityHalo"]
|
[node name="CSGCombiner3D" type="CSGCombiner3D" parent="GravityHalo"]
|
||||||
use_collision = true
|
use_collision = true
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="GravityHalo/CSGCombiner3D"]
|
|
||||||
script = ExtResource("23_7p8cl")
|
|
||||||
type = 7
|
|
||||||
|
|
||||||
[node name="OuterShell" type="CSGTorus3D" parent="GravityHalo/CSGCombiner3D"]
|
[node name="OuterShell" type="CSGTorus3D" parent="GravityHalo/CSGCombiner3D"]
|
||||||
inner_radius = 32.0
|
inner_radius = 32.0
|
||||||
outer_radius = 108.0
|
outer_radius = 108.0
|
||||||
|
BIN
levels/debug_level/terrain_assets.res
(Stored with Git LFS)
BIN
levels/debug_level/terrain_assets.res
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
@ -1,728 +0,0 @@
|
|||||||
{
|
|
||||||
"asset":{
|
|
||||||
"generator":"Khronos glTF Blender I/O v4.2.60",
|
|
||||||
"version":"2.0"
|
|
||||||
},
|
|
||||||
"scene":0,
|
|
||||||
"scenes":[
|
|
||||||
{
|
|
||||||
"name":"Scene",
|
|
||||||
"nodes":[
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
3
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"nodes":[
|
|
||||||
{
|
|
||||||
"mesh":0,
|
|
||||||
"name":"Geometry"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"Origin",
|
|
||||||
"rotation":[
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mesh":1,
|
|
||||||
"name":"Fountain",
|
|
||||||
"translation":[
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"mesh":2,
|
|
||||||
"name":"FountainWater",
|
|
||||||
"translation":[
|
|
||||||
0,
|
|
||||||
0.5,
|
|
||||||
0
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"materials":[
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallFloor",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.37290316820144653,
|
|
||||||
0.8002911806106567,
|
|
||||||
0.1968839168548584,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallStorefrontWall",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.7833530902862549,
|
|
||||||
0.743090033531189,
|
|
||||||
0.3785495460033417,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallOtherWall",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.5049755573272705,
|
|
||||||
0.4796982407569885,
|
|
||||||
0.4796982407569885,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallCeiling",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
1,
|
|
||||||
0.2704524099826813,
|
|
||||||
0.2704524099826813,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallDome",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.015895012766122818,
|
|
||||||
0.800614058971405,
|
|
||||||
0.7241971492767334,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"MallCatwalk",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.7324724793434143,
|
|
||||||
0.17093542218208313,
|
|
||||||
0.8004578351974487,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"Fountain",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0.800000011920929,
|
|
||||||
0.800000011920929,
|
|
||||||
0.800000011920929,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"doubleSided":true,
|
|
||||||
"name":"Water",
|
|
||||||
"pbrMetallicRoughness":{
|
|
||||||
"baseColorFactor":[
|
|
||||||
0,
|
|
||||||
0.00015084154438227415,
|
|
||||||
0.8002434968948364,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"metallicFactor":0,
|
|
||||||
"roughnessFactor":0.5
|
|
||||||
}
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"meshes":[
|
|
||||||
{
|
|
||||||
"name":"Geometry.Mesh",
|
|
||||||
"primitives":[
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":0,
|
|
||||||
"NORMAL":1,
|
|
||||||
"TEXCOORD_0":2
|
|
||||||
},
|
|
||||||
"indices":3,
|
|
||||||
"material":0
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":4,
|
|
||||||
"NORMAL":5,
|
|
||||||
"TEXCOORD_0":6
|
|
||||||
},
|
|
||||||
"indices":7,
|
|
||||||
"material":1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":8,
|
|
||||||
"NORMAL":9,
|
|
||||||
"TEXCOORD_0":10
|
|
||||||
},
|
|
||||||
"indices":11,
|
|
||||||
"material":2
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":12,
|
|
||||||
"NORMAL":13,
|
|
||||||
"TEXCOORD_0":14
|
|
||||||
},
|
|
||||||
"indices":15,
|
|
||||||
"material":3
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":16,
|
|
||||||
"NORMAL":17,
|
|
||||||
"TEXCOORD_0":18
|
|
||||||
},
|
|
||||||
"indices":19,
|
|
||||||
"material":4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":20,
|
|
||||||
"NORMAL":21,
|
|
||||||
"TEXCOORD_0":22
|
|
||||||
},
|
|
||||||
"indices":23,
|
|
||||||
"material":5
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"Fountain.Mesh",
|
|
||||||
"primitives":[
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":24,
|
|
||||||
"NORMAL":25,
|
|
||||||
"TEXCOORD_0":26
|
|
||||||
},
|
|
||||||
"indices":27,
|
|
||||||
"material":6
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name":"FountainWater.Mesh",
|
|
||||||
"primitives":[
|
|
||||||
{
|
|
||||||
"attributes":{
|
|
||||||
"POSITION":28,
|
|
||||||
"NORMAL":29,
|
|
||||||
"TEXCOORD_0":30
|
|
||||||
},
|
|
||||||
"indices":31,
|
|
||||||
"material":7
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"accessors":[
|
|
||||||
{
|
|
||||||
"bufferView":0,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":92,
|
|
||||||
"max":[
|
|
||||||
65,
|
|
||||||
22,
|
|
||||||
130
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-65,
|
|
||||||
0,
|
|
||||||
-130
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":1,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":92,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":2,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":92,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":3,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":204,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":4,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":238,
|
|
||||||
"max":[
|
|
||||||
65,
|
|
||||||
32.025001525878906,
|
|
||||||
123.66582489013672
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-65,
|
|
||||||
0,
|
|
||||||
-123.66582489013672
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":5,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":238,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":6,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":238,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":7,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":396,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":8,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":126,
|
|
||||||
"max":[
|
|
||||||
65,
|
|
||||||
42,
|
|
||||||
130
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-65,
|
|
||||||
0,
|
|
||||||
-130
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":9,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":126,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":10,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":126,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":11,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":234,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":12,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":108,
|
|
||||||
"max":[
|
|
||||||
65,
|
|
||||||
42,
|
|
||||||
130
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-65,
|
|
||||||
9.75,
|
|
||||||
-130
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":13,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":108,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":14,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":108,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":15,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":228,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":16,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":142,
|
|
||||||
"max":[
|
|
||||||
38,
|
|
||||||
80,
|
|
||||||
37.999996185302734
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-38,
|
|
||||||
42,
|
|
||||||
-37.999996185302734
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":17,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":142,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":18,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":142,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":19,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":144,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":20,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":120,
|
|
||||||
"max":[
|
|
||||||
40,
|
|
||||||
22,
|
|
||||||
40.5
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-40,
|
|
||||||
21,
|
|
||||||
-40.5
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":21,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":120,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":22,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":120,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":23,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":270,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":24,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":1344,
|
|
||||||
"max":[
|
|
||||||
20.556293487548828,
|
|
||||||
2.5298473834991455,
|
|
||||||
20.556293487548828
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-20.556293487548828,
|
|
||||||
-1,
|
|
||||||
-20.556293487548828
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":25,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":1344,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":26,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":1344,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":27,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":2100,
|
|
||||||
"type":"SCALAR"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":28,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":192,
|
|
||||||
"max":[
|
|
||||||
19.063644409179688,
|
|
||||||
1.5,
|
|
||||||
19.22129249572754
|
|
||||||
],
|
|
||||||
"min":[
|
|
||||||
-19,
|
|
||||||
-5.5,
|
|
||||||
-19
|
|
||||||
],
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":29,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":192,
|
|
||||||
"type":"VEC3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":30,
|
|
||||||
"componentType":5126,
|
|
||||||
"count":192,
|
|
||||||
"type":"VEC2"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"bufferView":31,
|
|
||||||
"componentType":5123,
|
|
||||||
"count":360,
|
|
||||||
"type":"SCALAR"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"bufferViews":[
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1104,
|
|
||||||
"byteOffset":0,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1104,
|
|
||||||
"byteOffset":1104,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":736,
|
|
||||||
"byteOffset":2208,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":408,
|
|
||||||
"byteOffset":2944,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":2856,
|
|
||||||
"byteOffset":3352,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":2856,
|
|
||||||
"byteOffset":6208,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1904,
|
|
||||||
"byteOffset":9064,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":792,
|
|
||||||
"byteOffset":10968,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1512,
|
|
||||||
"byteOffset":11760,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1512,
|
|
||||||
"byteOffset":13272,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1008,
|
|
||||||
"byteOffset":14784,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":468,
|
|
||||||
"byteOffset":15792,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1296,
|
|
||||||
"byteOffset":16260,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1296,
|
|
||||||
"byteOffset":17556,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":864,
|
|
||||||
"byteOffset":18852,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":456,
|
|
||||||
"byteOffset":19716,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1704,
|
|
||||||
"byteOffset":20172,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1704,
|
|
||||||
"byteOffset":21876,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1136,
|
|
||||||
"byteOffset":23580,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":288,
|
|
||||||
"byteOffset":24716,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1440,
|
|
||||||
"byteOffset":25004,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1440,
|
|
||||||
"byteOffset":26444,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":960,
|
|
||||||
"byteOffset":27884,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":540,
|
|
||||||
"byteOffset":28844,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":16128,
|
|
||||||
"byteOffset":29384,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":16128,
|
|
||||||
"byteOffset":45512,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":10752,
|
|
||||||
"byteOffset":61640,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":4200,
|
|
||||||
"byteOffset":72392,
|
|
||||||
"target":34963
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":2304,
|
|
||||||
"byteOffset":76592,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":2304,
|
|
||||||
"byteOffset":78896,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":1536,
|
|
||||||
"byteOffset":81200,
|
|
||||||
"target":34962
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"buffer":0,
|
|
||||||
"byteLength":720,
|
|
||||||
"byteOffset":82736,
|
|
||||||
"target":34963
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"buffers":[
|
|
||||||
{
|
|
||||||
"byteLength":83456,
|
|
||||||
"uri":"mall.bin"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,36 +0,0 @@
|
|||||||
[remap]
|
|
||||||
|
|
||||||
importer="scene"
|
|
||||||
importer_version=1
|
|
||||||
type="PackedScene"
|
|
||||||
uid="uid://1x7alivn27ef"
|
|
||||||
path="res://.godot/imported/mall.gltf-de9e241c02ee8b7f4ac1317b5b5fa9bb.scn"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://levels/mall/geometry/mall.gltf"
|
|
||||||
dest_files=["res://.godot/imported/mall.gltf-de9e241c02ee8b7f4ac1317b5b5fa9bb.scn"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
nodes/root_type=""
|
|
||||||
nodes/root_name=""
|
|
||||||
nodes/apply_root_scale=true
|
|
||||||
nodes/root_scale=1.0
|
|
||||||
nodes/import_as_skeleton_bones=false
|
|
||||||
meshes/ensure_tangents=true
|
|
||||||
meshes/generate_lods=true
|
|
||||||
meshes/create_shadow_meshes=true
|
|
||||||
meshes/light_baking=1
|
|
||||||
meshes/lightmap_texel_size=0.2
|
|
||||||
meshes/force_disable_compression=false
|
|
||||||
skins/use_named_skins=true
|
|
||||||
animation/import=true
|
|
||||||
animation/fps=30
|
|
||||||
animation/trimming=false
|
|
||||||
animation/remove_immutable_tracks=true
|
|
||||||
animation/import_rest_as_RESET=false
|
|
||||||
import_script/path=""
|
|
||||||
_subresources={}
|
|
||||||
gltf/naming_version=1
|
|
||||||
gltf/embedded_image_handling=1
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="Level" load_steps=3 format=3 uid="uid://3odongr8qm8e"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://ciqd8r8yt00y0" path="res://levels/mall/mall.tscn" id="1_2cp8o"]
|
|
||||||
[ext_resource type="Script" path="res://src/world/level/level.gd" id="2_wmp72"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("2_wmp72")
|
|
||||||
scene = ExtResource("1_2cp8o")
|
|
||||||
level_name = "Mall"
|
|
File diff suppressed because one or more lines are too long
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cwxh04w02o83o"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://cqlp0tjmadi75" path="res://assets/textures/highway/highway_road.png" id="1_5ncmm"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_5ncmm")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://ccmj2vt17lvs2"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/grass_fairway/grass_fairway_albedo.dds" id="1_isnyn"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_isnyn")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cjvumpmthiac4"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/grass_green/grass_green_albedo.dds" id="1_ad8tx"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_ad8tx")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://buagg4yv8c7lj"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://b8vgf8wy7h4nx" path="res://assets/textures/guard_rail/guard_rail.png" id="1_arb6a"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_arb6a")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dei1jkva281ei"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/mountain_rock/mountain_rock_albedo.dds" id="1_x1eim"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_x1eim")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://c8uym7rba01o5"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/grass_rough/grass_rough_albedo.dds" id="1_kiq74"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_kiq74")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://d3doxcg7g0sq"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" path="res://assets/textures/sand_trap/sand_trap_albedo.dds" id="1_bubcj"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_bubcj")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bgnbvc5qdnoxm"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://bq8dxuxfw1rwu" path="res://assets/textures/wood/lacquered_planks.png" id="1_codln"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
albedo_texture = ExtResource("1_codln")
|
|
||||||
uv1_scale = Vector3(0.05, 0.05, 0.05)
|
|
||||||
uv1_triplanar = true
|
|
||||||
texture_filter = 4
|
|
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01-01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01-01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01-02.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01-02.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01_00.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01_00.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01_01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-01_01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d-02-01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-02-01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d-02_00.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d-02_00.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00-01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00-01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00-02.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00-02.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00_00.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00_00.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00_01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_00_01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_01-01.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_01-01.res
(Stored with Git LFS)
Binary file not shown.
BIN
levels/terrain_test/terrain_3d_data/terrain3d_01_00.res
(Stored with Git LFS)
BIN
levels/terrain_test/terrain_3d_data/terrain3d_01_00.res
(Stored with Git LFS)
Binary file not shown.
@ -1,46 +0,0 @@
|
|||||||
extends Node3D
|
|
||||||
|
|
||||||
const RAMP_SPAWN_GROUP := "RampSpawn"
|
|
||||||
const DROP_SPAWN_GROUP := "DropSpawn"
|
|
||||||
const PUTT_SPAWN_GROUP := "PuttSpawn"
|
|
||||||
|
|
||||||
const PUTT_VEC := Vector3(0, 0, 2)
|
|
||||||
|
|
||||||
@export var ball_scene: PackedScene
|
|
||||||
|
|
||||||
|
|
||||||
func spawn_balls(spawn_group: String, initial_impulse: Vector3 = Vector3.ZERO) -> void:
|
|
||||||
for spawn: Node3D in get_tree().get_nodes_in_group(spawn_group):
|
|
||||||
var ball: GameBall = ball_scene.instantiate()
|
|
||||||
var callback := func() -> void:
|
|
||||||
if ball.sleeping:
|
|
||||||
ball.queue_free()
|
|
||||||
ball.sleeping_state_changed.connect(callback)
|
|
||||||
spawn.add_sibling(ball)
|
|
||||||
ball.global_transform = spawn.global_transform
|
|
||||||
ball.freeze = false
|
|
||||||
if initial_impulse:
|
|
||||||
ball.apply_impulse(
|
|
||||||
initial_impulse,
|
|
||||||
(
|
|
||||||
initial_impulse.normalized()
|
|
||||||
* -1
|
|
||||||
* ball.radius
|
|
||||||
* ball.radius
|
|
||||||
* ShotSetup.SHOT_OFFSET_Z_FACTOR
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
|
||||||
if Input.is_action_just_pressed("debug_1"):
|
|
||||||
spawn_balls(RAMP_SPAWN_GROUP)
|
|
||||||
if Input.is_action_just_pressed("debug_2"):
|
|
||||||
spawn_balls(DROP_SPAWN_GROUP)
|
|
||||||
if Input.is_action_just_pressed("debug_3"):
|
|
||||||
spawn_balls(PUTT_SPAWN_GROUP, PUTT_VEC)
|
|
||||||
|
|
||||||
if Input.is_action_just_pressed("ui_page_up"):
|
|
||||||
Engine.time_scale *= 2.0
|
|
||||||
if Input.is_action_just_pressed("ui_page_down"):
|
|
||||||
Engine.time_scale *= 0.5
|
|
@ -1,9 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="Level" load_steps=3 format=3 uid="uid://dexm07r8wvu83"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cvs546kk7t7aw" path="res://levels/terrain_test/terrain_test.tscn" id="1_iggnc"]
|
|
||||||
[ext_resource type="Script" path="res://src/world/level/level.gd" id="2_uc833"]
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("2_uc833")
|
|
||||||
scene = ExtResource("1_iggnc")
|
|
||||||
level_name = "Terrain Debug"
|
|
@ -1,784 +0,0 @@
|
|||||||
[gd_scene load_steps=34 format=3 uid="uid://cvs546kk7t7aw"]
|
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://c47ern0l2d50r" path="res://assets/vista_2.png" id="1_d1wmn"]
|
|
||||||
[ext_resource type="Script" path="res://levels/terrain_test/terrain_test.gd" id="1_drk48"]
|
|
||||||
[ext_resource type="Terrain3DAssets" uid="uid://cwl34gstabgrx" path="res://levels/debug_level/terrain_assets.res" id="2_25igk"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://b7pgvftmj7nbe" path="res://src/equipment/balls/debug_ball/debug_ball.tscn" id="2_77pf6"]
|
|
||||||
[ext_resource type="Material" uid="uid://c8uym7rba01o5" path="res://levels/terrain_test/materials/rough.tres" id="5_5e0na"]
|
|
||||||
[ext_resource type="FontFile" uid="uid://cbaqlaqdobnux" path="res://assets/fonts/Orbitron/Orbitron-VariableFont_wght.ttf" id="5_h18yf"]
|
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="6_4bo0x"]
|
|
||||||
[ext_resource type="Material" uid="uid://ccmj2vt17lvs2" path="res://levels/terrain_test/materials/fairway.tres" id="8_eb66j"]
|
|
||||||
[ext_resource type="Material" uid="uid://cjvumpmthiac4" path="res://levels/terrain_test/materials/green.tres" id="9_b32yd"]
|
|
||||||
[ext_resource type="Material" uid="uid://d3doxcg7g0sq" path="res://levels/terrain_test/materials/sand.tres" id="10_5p842"]
|
|
||||||
[ext_resource type="Material" uid="uid://cwxh04w02o83o" path="res://levels/terrain_test/materials/concrete.tres" id="11_n8v11"]
|
|
||||||
[ext_resource type="Material" uid="uid://dei1jkva281ei" path="res://levels/terrain_test/materials/rock.tres" id="12_521n4"]
|
|
||||||
[ext_resource type="Material" uid="uid://bgnbvc5qdnoxm" path="res://levels/terrain_test/materials/wood.tres" id="13_h001q"]
|
|
||||||
[ext_resource type="Material" uid="uid://buagg4yv8c7lj" path="res://levels/terrain_test/materials/metal.tres" id="14_7mq02"]
|
|
||||||
[ext_resource type="Material" uid="uid://c5hidbq5gbmr" path="res://assets/materials/crystal.tres" id="14_o81al"]
|
|
||||||
[ext_resource type="PackedScene" uid="uid://1s3gywmoi20e" path="res://src/characters/player_characters/gfolf_girl/gfolf_girl.tscn" id="16_r3ld5"]
|
|
||||||
|
|
||||||
[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_kd0nc"]
|
|
||||||
panorama = ExtResource("1_d1wmn")
|
|
||||||
|
|
||||||
[sub_resource type="Sky" id="Sky_3yoab"]
|
|
||||||
sky_material = SubResource("PanoramaSkyMaterial_kd0nc")
|
|
||||||
|
|
||||||
[sub_resource type="Environment" id="Environment_qax3v"]
|
|
||||||
background_mode = 2
|
|
||||||
sky = SubResource("Sky_3yoab")
|
|
||||||
ambient_light_source = 2
|
|
||||||
ambient_light_color = Color(0.78, 0.78, 0.78, 1)
|
|
||||||
ssao_enabled = true
|
|
||||||
ssao_intensity = 1.7
|
|
||||||
glow_enabled = true
|
|
||||||
glow_bloom = 0.05
|
|
||||||
volumetric_fog_enabled = true
|
|
||||||
volumetric_fog_density = 0.001
|
|
||||||
volumetric_fog_emission = Color(0.6, 1, 1, 1)
|
|
||||||
volumetric_fog_length = 1024.0
|
|
||||||
volumetric_fog_sky_affect = 0.0
|
|
||||||
|
|
||||||
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_ph8qj"]
|
|
||||||
dof_blur_far_distance = 200.0
|
|
||||||
dof_blur_far_transition = 800.0
|
|
||||||
dof_blur_near_enabled = true
|
|
||||||
dof_blur_near_distance = 1.0
|
|
||||||
dof_blur_near_transition = 0.5
|
|
||||||
|
|
||||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rpgb7"]
|
|
||||||
noise_type = 0
|
|
||||||
frequency = 1.0
|
|
||||||
|
|
||||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_sb318"]
|
|
||||||
width = 256
|
|
||||||
height = 256
|
|
||||||
seamless = true
|
|
||||||
noise = SubResource("FastNoiseLite_rpgb7")
|
|
||||||
|
|
||||||
[sub_resource type="Terrain3DMaterial" id="Terrain3DMaterial_4xim8"]
|
|
||||||
_shader_parameters = {
|
|
||||||
"auto_base_texture": 4,
|
|
||||||
"auto_height_reduction": 0.1,
|
|
||||||
"auto_overlay_texture": 0,
|
|
||||||
"auto_slope": 0.41,
|
|
||||||
"blend_sharpness": 1.0,
|
|
||||||
"height_blending": true,
|
|
||||||
"macro_variation1": Color(0.964742, 0.964742, 0.964742, 1),
|
|
||||||
"macro_variation2": Color(1, 1, 1, 1),
|
|
||||||
"noise1_angle": 0.0,
|
|
||||||
"noise1_offset": Vector2(0.5, 0.5),
|
|
||||||
"noise1_scale": 0.062,
|
|
||||||
"noise2_scale": 0.076,
|
|
||||||
"noise3_scale": 0.021,
|
|
||||||
"noise_texture": SubResource("NoiseTexture2D_sb318"),
|
|
||||||
"vertex_normals_distance": 128.0,
|
|
||||||
"world_noise_height": 74.0,
|
|
||||||
"world_noise_lod_distance": 7500.0,
|
|
||||||
"world_noise_max_octaves": 8,
|
|
||||||
"world_noise_min_octaves": 2,
|
|
||||||
"world_noise_offset": Vector3(0, -8, 0),
|
|
||||||
"world_noise_region_blend": 0.55,
|
|
||||||
"world_noise_scale": 5.0
|
|
||||||
}
|
|
||||||
world_background = 2
|
|
||||||
texture_filtering = 1
|
|
||||||
auto_shader = true
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_7awoq"]
|
|
||||||
size = Vector3(10, 1, 60)
|
|
||||||
|
|
||||||
[sub_resource type="PrismMesh" id="PrismMesh_kdeya"]
|
|
||||||
left_to_right = 1.0
|
|
||||||
size = Vector3(100, 50, 10)
|
|
||||||
|
|
||||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ufirn"]
|
|
||||||
data = PackedVector3Array(-5, 0.5, 30, 5, 0.5, 30, -5, -0.5, 30, 5, 0.5, 30, 5, -0.5, 30, -5, -0.5, 30, 5, 0.5, -30, -5, 0.5, -30, 5, -0.5, -30, -5, 0.5, -30, -5, -0.5, -30, 5, -0.5, -30, 5, 0.5, 30, 5, 0.5, -30, 5, -0.5, 30, 5, 0.5, -30, 5, -0.5, -30, 5, -0.5, 30, -5, 0.5, -30, -5, 0.5, 30, -5, -0.5, -30, -5, 0.5, 30, -5, -0.5, 30, -5, -0.5, -30, 5, 0.5, 30, -5, 0.5, 30, 5, 0.5, -30, -5, 0.5, 30, -5, 0.5, -30, 5, 0.5, -30, -5, -0.5, 30, 5, -0.5, 30, -5, -0.5, -30, 5, -0.5, 30, 5, -0.5, -30, -5, -0.5, -30)
|
|
||||||
|
|
||||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gq475"]
|
|
||||||
data = PackedVector3Array(50, 25, 5, 50, -25, 5, -50, -25, 5, 50, 25, -5, -50, -25, -5, 50, -25, -5, 50, 25, 5, 50, 25, -5, 50, -25, 5, 50, 25, -5, 50, -25, -5, 50, -25, 5, 50, 25, -5, 50, 25, 5, -50, -25, -5, 50, 25, 5, -50, -25, 5, -50, -25, -5, -50, -25, 5, 50, -25, 5, -50, -25, -5, 50, -25, 5, 50, -25, -5, -50, -25, -5)
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_oukkf"]
|
|
||||||
size = Vector3(10, 1, 60)
|
|
||||||
|
|
||||||
[sub_resource type="PrismMesh" id="PrismMesh_c7rfr"]
|
|
||||||
left_to_right = 1.0
|
|
||||||
size = Vector3(100, 50, 10)
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_3gfbh"]
|
|
||||||
size = Vector3(20, 1, 400)
|
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1sq7i"]
|
|
||||||
size = Vector3(20, 1, 400)
|
|
||||||
|
|
||||||
[sub_resource type="PlaceholderTexture2D" id="PlaceholderTexture2D_ugtgi"]
|
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_u7piw"]
|
|
||||||
size = Vector3(20, 1, 400)
|
|
||||||
|
|
||||||
[node name="TerrainTestMap" type="Node3D"]
|
|
||||||
script = ExtResource("1_drk48")
|
|
||||||
ball_scene = ExtResource("2_77pf6")
|
|
||||||
|
|
||||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
|
||||||
environment = SubResource("Environment_qax3v")
|
|
||||||
camera_attributes = SubResource("CameraAttributesPractical_ph8qj")
|
|
||||||
|
|
||||||
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."]
|
|
||||||
transform = Transform3D(0.782608, -0.611691, 0.11558, 0, 0.185667, 0.982613, -0.622515, -0.769001, 0.145304, 0, 0, 0)
|
|
||||||
shadow_enabled = true
|
|
||||||
shadow_blur = 4.0
|
|
||||||
directional_shadow_split_1 = 0.017
|
|
||||||
directional_shadow_split_2 = 0.042
|
|
||||||
directional_shadow_split_3 = 0.247
|
|
||||||
directional_shadow_fade_start = 0.98
|
|
||||||
directional_shadow_max_distance = 750.0
|
|
||||||
directional_shadow_pancake_size = 5.0
|
|
||||||
|
|
||||||
[node name="Terrain3D" type="Terrain3D" parent="."]
|
|
||||||
data_directory = "res://levels/terrain_test/terrain_3d_data"
|
|
||||||
material = SubResource("Terrain3DMaterial_4xim8")
|
|
||||||
assets = ExtResource("2_25igk")
|
|
||||||
mesh_size = 64
|
|
||||||
top_level = true
|
|
||||||
metadata/_edit_lock_ = true
|
|
||||||
|
|
||||||
[node name="PlayerSpawn" type="Marker3D" parent="." groups=["PlayerSpawn"]]
|
|
||||||
|
|
||||||
[node name="TestRamps" type="Node3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -299.216)
|
|
||||||
|
|
||||||
[node name="Rough" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Rough"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Rough/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_7awoq")
|
|
||||||
surface_material_override/0 = ExtResource("5_5e0na")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Rough/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_kdeya")
|
|
||||||
surface_material_override/0 = ExtResource("5_5e0na")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Rough/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Rough"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestRamps/Rough/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 1
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Rough/RampGeometry/StaticBody3D"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Rough/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Fairway" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.34202, 0, 0.939693, 0, 1, 0, -0.939693, 0, 0.34202, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Fairway"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Fairway/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("8_eb66j")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Fairway/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("8_eb66j")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Fairway/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Fairway"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Fairway/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 2
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Fairway/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Fairway/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Green" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.642788, 0, 0.766044, 0, 1, 0, -0.766044, 0, 0.642788, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Green"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Green/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("9_b32yd")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Green/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("9_b32yd")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Green/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Green"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Green/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 3
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Green/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Green/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Sand" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Sand"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Sand/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("10_5p842")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Sand/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("10_5p842")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Sand/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Sand"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Sand/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 4
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Sand/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Sand/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Concrete" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.984808, 0, 0.173648, 0, 1, 0, -0.173648, 0, 0.984808, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Concrete"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Concrete/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("11_n8v11")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Concrete/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("11_n8v11")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Concrete/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Concrete"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Concrete/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 5
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Concrete/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Concrete/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Rock" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.984808, 0, -0.173648, 0, 1, 0, 0.173648, 0, 0.984808, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Rock"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Rock/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("12_521n4")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Rock/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("12_521n4")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Rock/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Rock"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Rock/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 6
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Rock/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Rock/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Wood" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Wood"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Wood/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("13_h001q")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Wood/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("13_h001q")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Wood/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Wood"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Wood/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 7
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Wood/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Wood/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Metal" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.642788, 0, -0.766044, 0, 1, 0, 0.766044, 0, 0.642788, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Metal"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Metal/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("14_7mq02")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Metal/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("14_7mq02")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Metal/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Metal"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Metal/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 8
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Metal/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Metal/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="Glass" type="Node3D" parent="TestRamps"]
|
|
||||||
transform = Transform3D(0.34202, 0, -0.939692, 0, 1, 0, 0.939692, 0, 0.34202, 0, 0, 0)
|
|
||||||
|
|
||||||
[node name="RampGeometry" type="Node3D" parent="TestRamps/Glass"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestRamps/Glass/RampGeometry"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
mesh = SubResource("BoxMesh_oukkf")
|
|
||||||
surface_material_override/0 = ExtResource("14_o81al")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D2" type="MeshInstance3D" parent="TestRamps/Glass/RampGeometry"]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 25, 109)
|
|
||||||
mesh = SubResource("PrismMesh_c7rfr")
|
|
||||||
surface_material_override/0 = ExtResource("14_o81al")
|
|
||||||
|
|
||||||
[node name="Label3D" type="Label3D" parent="TestRamps/Glass/RampGeometry"]
|
|
||||||
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 8, 0)
|
|
||||||
text = "Glass"
|
|
||||||
font = ExtResource("5_h18yf")
|
|
||||||
font_size = 300
|
|
||||||
outline_size = 48
|
|
||||||
|
|
||||||
[node name="StaticBody3D2" type="StaticBody3D" parent="TestRamps/Glass/RampGeometry"]
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 9
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_ufirn")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="TestRamps/Glass/RampGeometry/StaticBody3D2"]
|
|
||||||
transform = Transform3D(-2.98023e-08, 0, -1, 0, 1, 0, 1, 0, -2.98023e-08, 0, 25, 109)
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_gq475")
|
|
||||||
|
|
||||||
[node name="BallSpawn" type="Marker3D" parent="TestRamps/Glass/RampGeometry" groups=["RampSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 50, 158)
|
|
||||||
|
|
||||||
[node name="TestFields" type="Node3D" parent="."]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -90, 0, 30)
|
|
||||||
|
|
||||||
[node name="Rough" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Rough"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_3gfbh")
|
|
||||||
surface_material_override/0 = ExtResource("5_5e0na")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Rough/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Rough/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Rough/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 1
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Rough" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Rough" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Rough/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="GfolfGirl" parent="TestFields/Rough/PuttSpawn" instance=ExtResource("16_r3ld5")]
|
|
||||||
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0.5, -0.05, 0)
|
|
||||||
|
|
||||||
[node name="Fairway" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Fairway"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("8_eb66j")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Fairway/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Fairway/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Fairway/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 2
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Fairway" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Fairway" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Fairway/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Green" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 50, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Green"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("9_b32yd")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Green/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Green/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Green/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 3
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Green" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Green" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Green/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 13)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Sand" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 70, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Sand"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("10_5p842")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Sand/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Sand/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Sand/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 4
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Sand" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Sand" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Sand/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 3)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Concrete" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 90, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Concrete"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("11_n8v11")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Concrete/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Concrete/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Concrete/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 5
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Concrete" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Concrete" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Concrete/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 21)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Rock" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 110, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Rock"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("12_521n4")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Rock/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Rock/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Rock/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 6
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Rock" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Rock" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Rock/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 8)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Wood" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 130, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Wood"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("13_h001q")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Wood/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Wood/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Wood/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 7
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Wood" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Wood" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Wood/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 21)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Metal" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 150, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Metal"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("14_7mq02")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Metal/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Metal/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Metal/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 8
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Metal" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Metal" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Metal/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 21)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
||||||
|
|
||||||
[node name="Glass" type="Node3D" parent="TestFields"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 170, 0, 0)
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="TestFields/Glass"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
mesh = SubResource("BoxMesh_u7piw")
|
|
||||||
surface_material_override/0 = ExtResource("14_o81al")
|
|
||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="TestFields/Glass/MeshInstance3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -200)
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TestFields/Glass/MeshInstance3D/StaticBody3D"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 200)
|
|
||||||
shape = SubResource("BoxShape3D_1sq7i")
|
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TestFields/Glass/MeshInstance3D/StaticBody3D"]
|
|
||||||
script = ExtResource("6_4bo0x")
|
|
||||||
type = 9
|
|
||||||
|
|
||||||
[node name="BallDropSpawn" type="Marker3D" parent="TestFields/Glass" groups=["DropSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 40, 10)
|
|
||||||
|
|
||||||
[node name="PuttSpawn" type="Marker3D" parent="TestFields/Glass" groups=["PuttSpawn"]]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.55, 1)
|
|
||||||
|
|
||||||
[node name="GoalLine" type="Decal" parent="TestFields/Glass/PuttSpawn"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 34)
|
|
||||||
size = Vector3(20, 2, 0.5)
|
|
||||||
texture_albedo = SubResource("PlaceholderTexture2D_ugtgi")
|
|
@ -12,13 +12,12 @@ config_version=5
|
|||||||
|
|
||||||
config/name="GFOLF"
|
config/name="GFOLF"
|
||||||
config/description="GFOLF: Combat Golf Action"
|
config/description="GFOLF: Combat Golf Action"
|
||||||
config/version="0.0.2"
|
config/version="0.0.1"
|
||||||
run/main_scene="res://src/game/game.tscn"
|
run/main_scene="res://src/game/game.tscn"
|
||||||
config/use_custom_user_dir=true
|
config/use_custom_user_dir=true
|
||||||
config/project_settings_override="user://settings.godot"
|
config/project_settings_override="user://settings.godot"
|
||||||
config/features=PackedStringArray("4.3", "Forward Plus")
|
config/features=PackedStringArray("4.3", "Forward Plus")
|
||||||
run/max_fps=60
|
run/max_fps=60
|
||||||
run/main_scene.editor="res://src/game/debug_game.tscn"
|
|
||||||
|
|
||||||
[autoload]
|
[autoload]
|
||||||
|
|
||||||
@ -51,8 +50,6 @@ project/assembly_name="Gfolf2"
|
|||||||
|
|
||||||
movie_writer/movie_file="demos/demo.avi"
|
movie_writer/movie_file="demos/demo.avi"
|
||||||
movie_writer/fps=40
|
movie_writer/fps=40
|
||||||
version_control/plugin_name="GitPlugin"
|
|
||||||
version_control/autoload_on_startup=true
|
|
||||||
|
|
||||||
[editor_plugins]
|
[editor_plugins]
|
||||||
|
|
||||||
@ -190,27 +187,22 @@ select_putter={
|
|||||||
}
|
}
|
||||||
club_next={
|
club_next={
|
||||||
"deadzone": 0.5,
|
"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":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(105, 13),"global_position":Vector2(114, 59),"factor":1.0,"button_index":8,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
club_previous={
|
club_previous={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(277, 2),"global_position":Vector2(286, 48),"factor":1.0,"button_index":9,"canceled":false,"pressed":true,"double_click":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
ball_next={
|
ball_next={
|
||||||
"deadzone": 0.5,
|
"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":0,"physical_keycode":71,"key_label":0,"unicode":103,"location":0,"echo":false,"script":null)
|
"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":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
ball_previous={
|
ball_previous={
|
||||||
"deadzone": 0.5,
|
"deadzone": 0.5,
|
||||||
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":71,"key_label":0,"unicode":71,"location":0,"echo":false,"script":null)
|
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":4194306,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null)
|
||||||
]
|
|
||||||
}
|
|
||||||
fast_forward={
|
|
||||||
"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":0,"physical_keycode":70,"key_label":0,"unicode":102,"location":0,"echo":false,"script":null)
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
pause={
|
pause={
|
||||||
@ -251,6 +243,12 @@ locale/translations=PackedStringArray("res://assets/text/text.en.translation")
|
|||||||
|
|
||||||
3d_physics/layer_1="Collision Geometry"
|
3d_physics/layer_1="Collision Geometry"
|
||||||
3d_physics/layer_2="Water"
|
3d_physics/layer_2="Water"
|
||||||
|
3d_physics/layer_27="Glass Material"
|
||||||
|
3d_physics/layer_28="Metal Material"
|
||||||
|
3d_physics/layer_29="Rock Material"
|
||||||
|
3d_physics/layer_30="Wood Material"
|
||||||
|
3d_physics/layer_31="Sand Material"
|
||||||
|
3d_physics/layer_32="Grass Material"
|
||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
@ -258,7 +256,6 @@ locale/translations=PackedStringArray("res://assets/text/text.en.translation")
|
|||||||
3d/sleep_threshold_angular=2.0
|
3d/sleep_threshold_angular=2.0
|
||||||
jolt_3d/sleep/velocity_threshold=0.1
|
jolt_3d/sleep/velocity_threshold=0.1
|
||||||
jolt_3d/sleep/time_threshold=1.0
|
jolt_3d/sleep/time_threshold=1.0
|
||||||
jolt_3d/limits/max_angular_velocity=5700.0
|
|
||||||
jolt_3d/limits/max_temporary_memory=64
|
jolt_3d/limits/max_temporary_memory=64
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
@ -267,8 +264,6 @@ textures/canvas_textures/default_texture_filter=0
|
|||||||
textures/vram_compression/import_etc2_astc=true
|
textures/vram_compression/import_etc2_astc=true
|
||||||
lights_and_shadows/directional_shadow/size=16384
|
lights_and_shadows/directional_shadow/size=16384
|
||||||
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=0
|
lights_and_shadows/directional_shadow/soft_shadow_filter_quality=0
|
||||||
textures/decals/filter=2
|
|
||||||
anti_aliasing/quality/msaa_3d=3
|
anti_aliasing/quality/msaa_3d=3
|
||||||
viewport/hdr_2d=true
|
|
||||||
anti_aliasing/quality/screen_space_aa=1
|
anti_aliasing/quality/screen_space_aa=1
|
||||||
anti_aliasing/quality/use_debanding=true
|
anti_aliasing/quality/use_debanding=true
|
||||||
|
@ -3,8 +3,3 @@ extends GameBall
|
|||||||
|
|
||||||
func enter_zone(zone: BallZone) -> void:
|
func enter_zone(zone: BallZone) -> void:
|
||||||
_zones.push_back(zone)
|
_zones.push_back(zone)
|
||||||
|
|
||||||
if zone.water_hazard:
|
|
||||||
effects.play_splash()
|
|
||||||
# Play effect but don't emit signal
|
|
||||||
# Also don't play SFX -- kind of annoying tbh
|
|
||||||
|
@ -1,27 +1,23 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://bptiryfbnautm"]
|
[gd_scene load_steps=9 format=3 uid="uid://bptiryfbnautm"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_pl6e6"]
|
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_pl6e6"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://daipuukf6e6bc" path="res://assets/textures/beach_ball/beach_ball.png" id="2_6dwmi"]
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/beach_ball/beach_ball.gd" id="2_ay78j"]
|
[ext_resource type="Script" path="res://src/equipment/balls/beach_ball/beach_ball.gd" id="2_ay78j"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://3oatrxh60ed7" path="res://assets/textures/beach_ball/beach_ball_normal_map.png" id="3_rdlj8"]
|
||||||
|
|
||||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_867vn"]
|
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_867vn"]
|
||||||
friction = 0.7
|
friction = 0.7
|
||||||
bounce = 0.67
|
bounce = 0.67
|
||||||
|
|
||||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_e5701"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_x6y4w"]
|
||||||
load_path = "res://.godot/imported/beach_ball.png-103709b22c99e920077c858fb92c2e27.ctex"
|
albedo_texture = ExtResource("2_6dwmi")
|
||||||
|
|
||||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_oyl4c"]
|
|
||||||
load_path = "res://.godot/imported/beach_ball_normal_map.png-06c8d20483d619e155834bb8abd74c2f.s3tc.ctex"
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_cybhj"]
|
|
||||||
albedo_texture = SubResource("CompressedTexture2D_e5701")
|
|
||||||
normal_enabled = true
|
normal_enabled = true
|
||||||
normal_scale = 0.5
|
normal_scale = 0.5
|
||||||
normal_texture = SubResource("CompressedTexture2D_oyl4c")
|
normal_texture = ExtResource("3_rdlj8")
|
||||||
texture_filter = 4
|
texture_filter = 4
|
||||||
|
|
||||||
[sub_resource type="SphereMesh" id="SphereMesh_kstjc"]
|
[sub_resource type="SphereMesh" id="SphereMesh_iqcc5"]
|
||||||
material = SubResource("StandardMaterial3D_cybhj")
|
material = SubResource("StandardMaterial3D_x6y4w")
|
||||||
radial_segments = 6
|
radial_segments = 6
|
||||||
rings = 6
|
rings = 6
|
||||||
|
|
||||||
@ -36,11 +32,8 @@ script = ExtResource("2_ay78j")
|
|||||||
base_damage = 5.0
|
base_damage = 5.0
|
||||||
radius = 0.5
|
radius = 0.5
|
||||||
|
|
||||||
[node name="BallMesh" parent="MeshRoot" index="0"]
|
[node name="BallMesh" parent="." index="0"]
|
||||||
visible = false
|
mesh = SubResource("SphereMesh_iqcc5")
|
||||||
|
|
||||||
[node name="BeachBallMesh" type="MeshInstance3D" parent="MeshRoot" index="1"]
|
|
||||||
mesh = SubResource("SphereMesh_kstjc")
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="." index="1"]
|
[node name="CollisionShape3D" parent="." index="1"]
|
||||||
shape = SubResource("SphereShape3D_cvsx2")
|
shape = SubResource("SphereShape3D_cvsx2")
|
||||||
|
@ -16,11 +16,11 @@ mass = 0.08
|
|||||||
physics_material_override = SubResource("PhysicsMaterial_f03f4")
|
physics_material_override = SubResource("PhysicsMaterial_f03f4")
|
||||||
radius = 0.15
|
radius = 0.15
|
||||||
|
|
||||||
[node name="BallMesh" parent="MeshRoot" index="0"]
|
[node name="BrickMesh" parent="." index="0" instance=ExtResource("2_ubuxr")]
|
||||||
visible = false
|
|
||||||
|
|
||||||
[node name="BrickMesh" parent="MeshRoot" index="1" instance=ExtResource("2_ubuxr")]
|
|
||||||
transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0, 0)
|
transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0, 0)
|
||||||
|
|
||||||
[node name="CollisionShape3D" parent="." index="1"]
|
[node name="BallMesh" parent="." index="1"]
|
||||||
|
visible = false
|
||||||
|
|
||||||
|
[node name="CollisionShape3D" parent="." index="2"]
|
||||||
shape = SubResource("BoxShape3D_7v3re")
|
shape = SubResource("BoxShape3D_7v3re")
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
extends GameBall
|
|
||||||
|
|
||||||
const INFO_FMT := "speed: {0} m/s\nang.spd: {1}\nsurface: {2}\ntime: {3} s"
|
|
||||||
|
|
||||||
@onready var debug_info: Label3D = %DebugInfo
|
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
|
||||||
super._physics_process(delta)
|
|
||||||
|
|
||||||
debug_info.text = INFO_FMT.format(
|
|
||||||
[
|
|
||||||
linear_velocity.length(),
|
|
||||||
angular_velocity.length(),
|
|
||||||
Terrain.Type.keys()[_surface_terrain],
|
|
||||||
_shot_time_s
|
|
||||||
]
|
|
||||||
)
|
|
@ -1,44 +0,0 @@
|
|||||||
[gd_scene load_steps=7 format=3 uid="uid://b7pgvftmj7nbe"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_gcsxs"]
|
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/debug_ball/debug_ball.gd" id="2_edye5"]
|
|
||||||
[ext_resource type="Texture2D" uid="uid://tancoet1lih5" path="res://assets/ui/ball_icons/basic_icon.png" id="2_h3ccx"]
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8pnwh"]
|
|
||||||
transparency = 1
|
|
||||||
no_depth_test = true
|
|
||||||
shading_mode = 0
|
|
||||||
albedo_texture = ExtResource("2_h3ccx")
|
|
||||||
texture_filter = 2
|
|
||||||
billboard_mode = 1
|
|
||||||
fixed_size = true
|
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id="QuadMesh_lf5f4"]
|
|
||||||
material = SubResource("StandardMaterial3D_8pnwh")
|
|
||||||
size = Vector2(0.05, 0.05)
|
|
||||||
|
|
||||||
[sub_resource type="SystemFont" id="SystemFont_td87w"]
|
|
||||||
font_names = PackedStringArray("Monospace")
|
|
||||||
subpixel_positioning = 0
|
|
||||||
|
|
||||||
[node name="DebugBall" instance=ExtResource("1_gcsxs")]
|
|
||||||
script = ExtResource("2_edye5")
|
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="MeshRoot/BallMesh" index="0"]
|
|
||||||
mesh = SubResource("QuadMesh_lf5f4")
|
|
||||||
|
|
||||||
[node name="DebugInfo" type="Label3D" parent="MeshRoot/BallMesh" index="1"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
pixel_size = 0.0005
|
|
||||||
offset = Vector2(0, -64)
|
|
||||||
billboard = 1
|
|
||||||
no_depth_test = true
|
|
||||||
fixed_size = true
|
|
||||||
texture_filter = 2
|
|
||||||
text = "DEBUG INFO
|
|
||||||
DEBUG INFO
|
|
||||||
DEBUG INFO"
|
|
||||||
font = SubResource("SystemFont_td87w")
|
|
||||||
outline_size = 10
|
|
||||||
horizontal_alignment = 0
|
|
||||||
vertical_alignment = 0
|
|
@ -1,37 +1,16 @@
|
|||||||
class_name BallParticleEffects extends Node3D
|
class_name BallParticleEffects extends Node3D
|
||||||
## Controller for ball particle effects.
|
## Controller for ball particle effects.
|
||||||
|
|
||||||
@export var splash_effect_scene: PackedScene
|
|
||||||
|
|
||||||
@onready var chunk_particles: GPUParticles3D = %ChunkParticles
|
|
||||||
@onready var sand_particles: GPUParticles3D = %SandParticles
|
@onready var sand_particles: GPUParticles3D = %SandParticles
|
||||||
|
|
||||||
@onready var ball: GameBall = $".."
|
@onready var ball: GameBall = $".."
|
||||||
|
|
||||||
|
|
||||||
func play_splash() -> void:
|
|
||||||
var effect: Node3D = splash_effect_scene.instantiate()
|
|
||||||
ball.add_sibling(effect)
|
|
||||||
effect.global_position = ball.global_position
|
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(_delta: float) -> void:
|
|
||||||
global_rotation = Vector3.ZERO
|
|
||||||
|
|
||||||
|
|
||||||
func play_effect(terrain: Terrain.Type) -> void:
|
func play_effect(terrain: Terrain.Type) -> void:
|
||||||
global_rotation = Vector3.ZERO
|
global_rotation = Vector3.ZERO
|
||||||
match terrain:
|
match terrain:
|
||||||
Terrain.Type.SAND:
|
Terrain.Type.SAND:
|
||||||
# Adjust sand particle direction
|
# Adjust sand particle direction
|
||||||
var material: ParticleProcessMaterial = sand_particles.process_material
|
var material: ParticleProcessMaterial = sand_particles.process_material
|
||||||
material.direction = -ball.current_gravity.normalized()
|
material.direction = -ball.linear_velocity.normalized()
|
||||||
sand_particles.emitting = true
|
sand_particles.emitting = true
|
||||||
|
|
||||||
|
|
||||||
func play_chunk(chunk_scale: float) -> void:
|
|
||||||
print_debug("Playing chunk effect, scale: ", chunk_scale)
|
|
||||||
chunk_particles.amount_ratio = chunk_scale
|
|
||||||
var material: ParticleProcessMaterial = chunk_particles.process_material
|
|
||||||
material.direction = -ball.current_gravity.normalized()
|
|
||||||
chunk_particles.emitting = true
|
|
||||||
|
@ -10,7 +10,6 @@ const VELOCITY_ATTENUATION_SCALE := 400.0
|
|||||||
@onready var grass_sfx_player: AudioStreamPlayer3D = %GrassSFXPlayer
|
@onready var grass_sfx_player: AudioStreamPlayer3D = %GrassSFXPlayer
|
||||||
@onready var concrete_sfx_player: AudioStreamPlayer3D = %ConcreteSFXPlayer
|
@onready var concrete_sfx_player: AudioStreamPlayer3D = %ConcreteSFXPlayer
|
||||||
@onready var sand_sfx_player: AudioStreamPlayer3D = %SandSFXPlayer
|
@onready var sand_sfx_player: AudioStreamPlayer3D = %SandSFXPlayer
|
||||||
@onready var splash_sfx_player: AudioStreamPlayer3D = %SplashSFXPlayer
|
|
||||||
|
|
||||||
|
|
||||||
func _force_attenuated_volume() -> float:
|
func _force_attenuated_volume() -> float:
|
||||||
@ -36,7 +35,3 @@ func play_sfx(terrain: Terrain.Type) -> void:
|
|||||||
_play(concrete_sfx_player)
|
_play(concrete_sfx_player)
|
||||||
Terrain.Type.SAND:
|
Terrain.Type.SAND:
|
||||||
_play(sand_sfx_player)
|
_play(sand_sfx_player)
|
||||||
|
|
||||||
|
|
||||||
func play_splash() -> void:
|
|
||||||
_play(splash_sfx_player)
|
|
||||||
|
@ -6,7 +6,6 @@ signal entered_water
|
|||||||
|
|
||||||
## Types of game balls
|
## Types of game balls
|
||||||
enum Type {
|
enum Type {
|
||||||
DEBUG = -1,
|
|
||||||
NONE,
|
NONE,
|
||||||
BASIC,
|
BASIC,
|
||||||
PLASMA,
|
PLASMA,
|
||||||
@ -15,29 +14,16 @@ enum Type {
|
|||||||
POWER,
|
POWER,
|
||||||
}
|
}
|
||||||
|
|
||||||
const MAGNUS_SQ_EPSILON := 1e-3
|
const TERRAIN_DAMPING_EPSILON := 1e-6
|
||||||
const SURFACE_SNAP_DISTANCE := 2.0
|
const MAGNUS_EPSILON := 1e-3
|
||||||
|
|
||||||
## If enabled, ball ability cooldown is only reset at end of shot.
|
## If enabled, ball ability cooldown is only reset at end of shot.
|
||||||
@export var once_per_shot_ability := false
|
@export var once_per_shot_ability := false
|
||||||
|
|
||||||
## Material physics configuration for this ball.
|
## Angular damping while in air
|
||||||
@export var terrain_physics: TerrainPhysics
|
@export var air_damping := 0.0
|
||||||
|
## Angular damping while in collision with rough terrain
|
||||||
## Coefficient of the roll damping quadratic curve.
|
@export var rough_damping := 8.0
|
||||||
## This applies progressively greater damping after the ball rolls for a period of time.
|
|
||||||
@export var roll_damping_coefficient := 0.4
|
|
||||||
|
|
||||||
## Time in seconds after the ball begins rolling after which roll damping will start to apply.
|
|
||||||
## This applies progressively greater damping after the ball rolls for a period of time.
|
|
||||||
@export var roll_damping_delay := 12.0
|
|
||||||
|
|
||||||
## Coefficient of the roll cull linear curve.
|
|
||||||
## The ball be frozen if it rolls with speed under this curve.
|
|
||||||
@export var roll_cull_coefficient := 0.2
|
|
||||||
|
|
||||||
## Time in seconds after the ball begins rolling after which roll culling will start to apply.
|
|
||||||
@export var roll_cull_delay := 16.0
|
|
||||||
|
|
||||||
#@export var fluid_density := 1.225
|
#@export var fluid_density := 1.225
|
||||||
#@export var lift_coefficient := 0.05
|
#@export var lift_coefficient := 0.05
|
||||||
@ -72,9 +58,6 @@ var _position_on_last_wake: Vector3
|
|||||||
var _awake := false
|
var _awake := false
|
||||||
var _ability_triggered := false
|
var _ability_triggered := false
|
||||||
var _zones: Array[BallZone] = []
|
var _zones: Array[BallZone] = []
|
||||||
var _shot_time_s := 0.0
|
|
||||||
var _surface_time_s := 0.0
|
|
||||||
var _surface_terrain: Terrain.Type
|
|
||||||
|
|
||||||
@onready var ability_cooldown: Timer = %AbilityCooldown
|
@onready var ability_cooldown: Timer = %AbilityCooldown
|
||||||
@onready var manual_sleep_timer: Timer = %ManualSleepTimer
|
@onready var manual_sleep_timer: Timer = %ManualSleepTimer
|
||||||
@ -119,21 +102,10 @@ func get_damage() -> float:
|
|||||||
return base_damage + linear_velocity.length_squared() * damage_force_scale
|
return base_damage + linear_velocity.length_squared() * damage_force_scale
|
||||||
|
|
||||||
|
|
||||||
## Get the surface position immediately under the ball.
|
func _total_terrain_angular_damping() -> float:
|
||||||
## This will typically be the surface the ball is laying on.
|
return _zones.reduce(
|
||||||
## If the ball is not on a surface, this will be the position of the ball itself.
|
func(a: float, b: BallZone) -> float: return a + b.terrain_angular_damping, 0.0
|
||||||
func get_surface_snap_point() -> Vector3:
|
|
||||||
var params := PhysicsRayQueryParameters3D.create(
|
|
||||||
global_position,
|
|
||||||
global_position - get_reoriented_basis().y * SURFACE_SNAP_DISTANCE,
|
|
||||||
collision_mask,
|
|
||||||
[get_rid()]
|
|
||||||
)
|
)
|
||||||
var collisions := get_world_3d().direct_space_state.intersect_ray(params)
|
|
||||||
if collisions:
|
|
||||||
@warning_ignore("unsafe_cast")
|
|
||||||
return collisions["position"] as Vector3
|
|
||||||
return global_position
|
|
||||||
|
|
||||||
|
|
||||||
func _magnus_force() -> Vector3:
|
func _magnus_force() -> Vector3:
|
||||||
@ -148,60 +120,38 @@ func _integrate_forces(state: PhysicsDirectBodyState3D) -> void:
|
|||||||
_ability_triggered = false
|
_ability_triggered = false
|
||||||
_position_on_last_wake = global_position
|
_position_on_last_wake = global_position
|
||||||
_last_contact_normal = Vector3.UP
|
_last_contact_normal = Vector3.UP
|
||||||
_shot_time_s = 0.0
|
|
||||||
_surface_time_s = 0.0
|
|
||||||
# TODO something's fucky here... I think this gets called once after the ball sleeps
|
# TODO something's fucky here... I think this gets called once after the ball sleeps
|
||||||
|
|
||||||
var contacts := state.get_contact_count()
|
var damping := air_damping
|
||||||
if contacts:
|
if state.get_contact_count():
|
||||||
# Ball is in contact with a surface
|
constant_force = Vector3.ZERO
|
||||||
|
|
||||||
# We want the contact normal which minimizes the angle to the up vector
|
# We want the contact normal which minimizes the angle to the up vector
|
||||||
var min_dot := -2.0
|
var min_dot := -1.0
|
||||||
var primary_body: Node
|
for i: int in range(state.get_contact_count()):
|
||||||
for i: int in range(contacts):
|
|
||||||
var norm := state.get_contact_local_normal(i)
|
var norm := state.get_contact_local_normal(i)
|
||||||
var dot := norm.dot(Vector3.UP)
|
var dot := norm.dot(Vector3.UP)
|
||||||
if dot > min_dot:
|
if dot > min_dot:
|
||||||
min_dot = dot
|
min_dot = dot
|
||||||
_last_contact_normal = norm
|
_last_contact_normal = norm
|
||||||
primary_body = state.get_contact_collider_object(i)
|
|
||||||
_surface_terrain = Terrain.from_collision(global_position, primary_body)
|
|
||||||
else:
|
|
||||||
# Ball is in the air
|
|
||||||
_surface_terrain = Terrain.Type.NONE
|
|
||||||
_surface_time_s = 0.0
|
|
||||||
|
|
||||||
var params := terrain_physics.get_params(_surface_terrain)
|
damping = _total_terrain_angular_damping()
|
||||||
#physics_material_override.bounce = params.bounce
|
if damping <= TERRAIN_DAMPING_EPSILON:
|
||||||
angular_damp = params.angular_damp
|
damping = rough_damping
|
||||||
linear_damp = params.linear_damp
|
angular_damp = damping
|
||||||
|
|
||||||
# Progressively increase linear damping after a delay.
|
|
||||||
linear_damp += roll_damping_coefficient * pow(maxf(_surface_time_s - roll_damping_delay, 0), 2)
|
|
||||||
|
|
||||||
var cull_speed := roll_cull_coefficient * maxf(_surface_time_s - roll_cull_delay, 0)
|
|
||||||
if linear_velocity.length_squared() < pow(cull_speed, 2):
|
|
||||||
_manual_sleep()
|
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(delta: float) -> void:
|
func _physics_process(_delta: float) -> void:
|
||||||
# Simulate magnus effect
|
# Simulate magnus effect
|
||||||
var magnus := _magnus_force()
|
var magnus := _magnus_force()
|
||||||
if magnus.length_squared() > MAGNUS_SQ_EPSILON:
|
if magnus.length_squared() > MAGNUS_EPSILON:
|
||||||
apply_central_force(magnus)
|
apply_central_force(magnus)
|
||||||
|
|
||||||
# Keep shot time
|
|
||||||
_shot_time_s += delta
|
|
||||||
_surface_time_s += delta
|
|
||||||
|
|
||||||
|
|
||||||
func enter_zone(zone: BallZone) -> void:
|
func enter_zone(zone: BallZone) -> void:
|
||||||
_zones.push_back(zone)
|
_zones.push_back(zone)
|
||||||
|
|
||||||
if zone.water_hazard:
|
if zone.water_hazard:
|
||||||
effects.play_splash()
|
|
||||||
sfx.play_splash()
|
|
||||||
entered_water.emit()
|
entered_water.emit()
|
||||||
|
|
||||||
|
|
||||||
@ -222,31 +172,28 @@ func _on_sleeping_state_changed() -> void:
|
|||||||
if sleeping:
|
if sleeping:
|
||||||
# Trigger to reassign on wake
|
# Trigger to reassign on wake
|
||||||
_awake = false
|
_awake = false
|
||||||
linear_velocity = Vector3.ZERO
|
|
||||||
angular_velocity = Vector3.ZERO
|
|
||||||
linear_damp = 0.0
|
|
||||||
angular_damp = 0.0
|
|
||||||
|
|
||||||
|
|
||||||
func _manual_sleep() -> void:
|
|
||||||
freeze = true
|
|
||||||
manual_sleep_timer.start()
|
|
||||||
|
|
||||||
|
|
||||||
func _on_collision(body: Node) -> void:
|
func _on_collision(body: Node) -> void:
|
||||||
if is_sticky():
|
if is_sticky():
|
||||||
# Freeze physics as soon as we hit something
|
# Freeze physics as soon as we hit something
|
||||||
_manual_sleep()
|
freeze = true
|
||||||
|
manual_sleep_timer.start()
|
||||||
|
|
||||||
var terrain := Terrain.from_collision(global_position, body)
|
var terrain: Terrain.Type
|
||||||
print_debug("Collision terrain: ", Terrain.Type.keys()[terrain])
|
if body is Terrain3D:
|
||||||
|
terrain = Terrain.at_position(global_position, body as Terrain3D)
|
||||||
|
elif body is CSGShape3D:
|
||||||
|
terrain = Terrain.from_physical_layer((body as CSGShape3D).collision_layer)
|
||||||
|
elif body is CollisionObject3D:
|
||||||
|
terrain = Terrain.from_physical_layer((body as CollisionObject3D).collision_layer)
|
||||||
|
else:
|
||||||
|
print_debug("COLLIDER: ", body)
|
||||||
|
|
||||||
if terrain:
|
if terrain:
|
||||||
sfx.play_sfx(terrain)
|
sfx.play_sfx(terrain)
|
||||||
effects.play_effect(terrain)
|
effects.play_effect(terrain)
|
||||||
|
|
||||||
linear_velocity *= clampf(1 - terrain_physics.get_params(terrain).impact_damp, 0, 1)
|
|
||||||
|
|
||||||
|
|
||||||
func _fire_sleep_signal() -> void:
|
func _fire_sleep_signal() -> void:
|
||||||
sleeping = true
|
sleeping = true
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_resource type="PhysicsMaterial" format=3 uid="uid://3bih72l068ic"]
|
[gd_resource type="PhysicsMaterial" format=3 uid="uid://3bih72l068ic"]
|
||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
bounce = 0.4
|
bounce = 0.5
|
||||||
|
@ -1,77 +0,0 @@
|
|||||||
[gd_resource type="Resource" script_class="TerrainPhysics" load_steps=13 format=3 uid="uid://c6tt1hto75ex4"]
|
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/terrain_physics/terrain_parameters.gd" id="1_45pis"]
|
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/terrain_physics/terrain_physics.gd" id="2_yuehx"]
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_casfi"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 1.05
|
|
||||||
angular_damp = 3.0
|
|
||||||
impact_damp = 0.05
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_3k63c"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 0.0
|
|
||||||
angular_damp = 0.01
|
|
||||||
impact_damp = 0.0
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_xf73q"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 2.8
|
|
||||||
angular_damp = 4.0
|
|
||||||
impact_damp = 0.3
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_nhn3l"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 0.86
|
|
||||||
angular_damp = 1.0
|
|
||||||
impact_damp = 0.0
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_m3wjo"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 1.25
|
|
||||||
angular_damp = 4.0
|
|
||||||
impact_damp = 0.3
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_h4rld"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 1.62
|
|
||||||
angular_damp = 1.0
|
|
||||||
impact_damp = 0.0
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_j6lib"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 4.0
|
|
||||||
angular_damp = 2.0
|
|
||||||
impact_damp = 0.15
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_7f7ql"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 3.0
|
|
||||||
angular_damp = 8.0
|
|
||||||
impact_damp = 0.5
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_pusmf"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 4.0
|
|
||||||
angular_damp = 4.0
|
|
||||||
impact_damp = 0.7
|
|
||||||
|
|
||||||
[sub_resource type="Resource" id="Resource_edkxb"]
|
|
||||||
script = ExtResource("1_45pis")
|
|
||||||
linear_damp = 1.25
|
|
||||||
angular_damp = 1.3
|
|
||||||
impact_damp = 0.15
|
|
||||||
|
|
||||||
[resource]
|
|
||||||
script = ExtResource("2_yuehx")
|
|
||||||
default = SubResource("Resource_3k63c")
|
|
||||||
rough = SubResource("Resource_7f7ql")
|
|
||||||
fairway = SubResource("Resource_xf73q")
|
|
||||||
green = SubResource("Resource_m3wjo")
|
|
||||||
sand = SubResource("Resource_pusmf")
|
|
||||||
concrete = SubResource("Resource_casfi")
|
|
||||||
rock = SubResource("Resource_j6lib")
|
|
||||||
wood = SubResource("Resource_edkxb")
|
|
||||||
metal = SubResource("Resource_h4rld")
|
|
||||||
glass = SubResource("Resource_nhn3l")
|
|
@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=30 format=3 uid="uid://dfttci386ohip"]
|
[gd_scene load_steps=22 format=3 uid="uid://dfttci386ohip"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/game_ball.gd" id="1_iwh2u"]
|
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/game_ball.gd" id="1_iwh2u"]
|
||||||
[ext_resource type="Resource" uid="uid://c6tt1hto75ex4" path="res://src/equipment/balls/physics_ball/normal_terrain_physics.tres" id="3_3gnie"]
|
[ext_resource type="PhysicsMaterial" uid="uid://3bih72l068ic" path="res://src/equipment/balls/physics_ball/normal_physics.tres" id="1_l23pw"]
|
||||||
[ext_resource type="Material" uid="uid://dpsmjlhjpc7vs" path="res://assets/materials/basic_ball_material.tres" id="3_rc7m1"]
|
[ext_resource type="Material" uid="uid://dpsmjlhjpc7vs" path="res://assets/materials/basic_ball_material.tres" id="3_rc7m1"]
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/ball_sfx.gd" id="5_bhshl"]
|
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/ball_sfx.gd" id="5_bhshl"]
|
||||||
[ext_resource type="AudioStream" uid="uid://cayyndwmxua5x" path="res://assets/sound/sfx/ball/grass2.wav" id="7_l22cv"]
|
[ext_resource type="AudioStream" uid="uid://cayyndwmxua5x" path="res://assets/sound/sfx/ball/grass2.wav" id="7_l22cv"]
|
||||||
@ -10,13 +10,8 @@
|
|||||||
[ext_resource type="AudioStream" uid="uid://3csnnhxndt67" path="res://assets/sound/sfx/ball/concrete5.wav" id="9_p0lmw"]
|
[ext_resource type="AudioStream" uid="uid://3csnnhxndt67" path="res://assets/sound/sfx/ball/concrete5.wav" id="9_p0lmw"]
|
||||||
[ext_resource type="AudioStream" uid="uid://bbbp6wrkuhkek" path="res://assets/sound/sfx/ball/sand1.wav" id="10_b64mx"]
|
[ext_resource type="AudioStream" uid="uid://bbbp6wrkuhkek" path="res://assets/sound/sfx/ball/sand1.wav" id="10_b64mx"]
|
||||||
[ext_resource type="AudioStream" uid="uid://b5xx5t050i4p" path="res://assets/sound/sfx/ball/sand2.wav" id="11_ed8je"]
|
[ext_resource type="AudioStream" uid="uid://b5xx5t050i4p" path="res://assets/sound/sfx/ball/sand2.wav" id="11_ed8je"]
|
||||||
[ext_resource type="AudioStream" uid="uid://dutumw1vj854w" path="res://assets/sound/sfx/ball/splash1.wav" id="11_xmj6n"]
|
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/ball_particle_effects.gd" id="12_7krl6"]
|
[ext_resource type="Script" path="res://src/equipment/balls/physics_ball/ball_particle_effects.gd" id="12_7krl6"]
|
||||||
[ext_resource type="PackedScene" uid="uid://cm4bb3lg4mfd2" path="res://src/world/effects/splash/splash_effect.tscn" id="12_qlrvx"]
|
[ext_resource type="Texture2D" uid="uid://c47bkx508biqr" path="res://assets/sprites/particles/plasma.png" id="12_guipt"]
|
||||||
[ext_resource type="Texture2D" uid="uid://dy310v1j5vexd" path="res://assets/sprites/particles/smudge.png" id="14_el0o3"]
|
|
||||||
|
|
||||||
[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_u134x"]
|
|
||||||
bounce = 0.8
|
|
||||||
|
|
||||||
[sub_resource type="SphereMesh" id="SphereMesh_y0d13"]
|
[sub_resource type="SphereMesh" id="SphereMesh_y0d13"]
|
||||||
material = ExtResource("3_rc7m1")
|
material = ExtResource("3_rc7m1")
|
||||||
@ -35,13 +30,10 @@ script/source = "extends Control
|
|||||||
const COLOR_X := Color(1, 0, 0)
|
const COLOR_X := Color(1, 0, 0)
|
||||||
const COLOR_Y := Color(0, 1, 0)
|
const COLOR_Y := Color(0, 1, 0)
|
||||||
const COLOR_Z := Color(0, 0, 1)
|
const COLOR_Z := Color(0, 0, 1)
|
||||||
const COLOR_VELOCITY := Color.ORANGE
|
|
||||||
const COLOR_MAGNUS := Color.CYAN
|
const COLOR_MAGNUS := Color.CYAN
|
||||||
const VELOCITY_SCALE := 0.5
|
|
||||||
const MAGNUS_SCALE := 3
|
const MAGNUS_SCALE := 3
|
||||||
const WIDTH := 4
|
const WIDTH := 4
|
||||||
|
|
||||||
@export var draw_velocity := true
|
|
||||||
@export var draw_reoriented_basis := true
|
@export var draw_reoriented_basis := true
|
||||||
@export var draw_magnus_effect := true
|
@export var draw_magnus_effect := true
|
||||||
@export var draw_gravity_basis := true
|
@export var draw_gravity_basis := true
|
||||||
@ -57,11 +49,6 @@ func _process(_delta: float) -> void:
|
|||||||
func _draw() -> void:
|
func _draw() -> void:
|
||||||
var camera := get_viewport().get_camera_3d()
|
var camera := get_viewport().get_camera_3d()
|
||||||
var start := camera.unproject_position(physics_ball.global_position)
|
var start := camera.unproject_position(physics_ball.global_position)
|
||||||
|
|
||||||
if draw_velocity:
|
|
||||||
var end := camera.unproject_position(physics_ball.global_position + physics_ball.linear_velocity * VELOCITY_SCALE)
|
|
||||||
draw_line(start, end, COLOR_VELOCITY, WIDTH)
|
|
||||||
|
|
||||||
if draw_reoriented_basis and physics_ball._last_contact_normal != null:
|
if draw_reoriented_basis and physics_ball._last_contact_normal != null:
|
||||||
var basis := physics_ball.get_reoriented_basis()
|
var basis := physics_ball.get_reoriented_basis()
|
||||||
var end_x := camera.unproject_position(physics_ball.global_position + basis.x)
|
var end_x := camera.unproject_position(physics_ball.global_position + basis.x)
|
||||||
@ -108,40 +95,6 @@ streams_count = 2
|
|||||||
stream_0/stream = ExtResource("10_b64mx")
|
stream_0/stream = ExtResource("10_b64mx")
|
||||||
stream_1/stream = ExtResource("11_ed8je")
|
stream_1/stream = ExtResource("11_ed8je")
|
||||||
|
|
||||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_nlbkf"]
|
|
||||||
playback_mode = 1
|
|
||||||
streams_count = 1
|
|
||||||
stream_0/stream = ExtResource("11_xmj6n")
|
|
||||||
|
|
||||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_706cj"]
|
|
||||||
angle_min = -720.0
|
|
||||||
angle_max = 720.0
|
|
||||||
spread = 20.0
|
|
||||||
initial_velocity_min = 1.0
|
|
||||||
initial_velocity_max = 5.0
|
|
||||||
scale_min = 0.0
|
|
||||||
hue_variation_min = -0.02
|
|
||||||
hue_variation_max = -2.23517e-08
|
|
||||||
|
|
||||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_5u1jh"]
|
|
||||||
load_path = "res://.godot/imported/smudge.png-6be29afb408991155df57310104cb1f8.ctex"
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fbolh"]
|
|
||||||
transparency = 1
|
|
||||||
vertex_color_use_as_albedo = true
|
|
||||||
albedo_color = Color(0.17, 0.12954, 0.0272, 1)
|
|
||||||
albedo_texture = SubResource("CompressedTexture2D_5u1jh")
|
|
||||||
texture_filter = 2
|
|
||||||
billboard_mode = 3
|
|
||||||
billboard_keep_scale = true
|
|
||||||
particles_anim_h_frames = 1
|
|
||||||
particles_anim_v_frames = 1
|
|
||||||
particles_anim_loop = false
|
|
||||||
|
|
||||||
[sub_resource type="QuadMesh" id="QuadMesh_npp3t"]
|
|
||||||
material = SubResource("StandardMaterial3D_fbolh")
|
|
||||||
size = Vector2(0.15, 0.15)
|
|
||||||
|
|
||||||
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_mwiw1"]
|
[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_mwiw1"]
|
||||||
angle_min = -720.0
|
angle_min = -720.0
|
||||||
angle_max = 720.0
|
angle_max = 720.0
|
||||||
@ -156,9 +109,9 @@ hue_variation_max = -2.23517e-08
|
|||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v1i8b"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v1i8b"]
|
||||||
transparency = 1
|
transparency = 1
|
||||||
vertex_color_use_as_albedo = true
|
vertex_color_use_as_albedo = true
|
||||||
albedo_color = Color(0.45, 0.4092, 0.306, 1)
|
albedo_color = Color(0.78, 0.70928, 0.5304, 1)
|
||||||
albedo_texture = ExtResource("14_el0o3")
|
albedo_texture = ExtResource("12_guipt")
|
||||||
texture_filter = 2
|
texture_filter = 4
|
||||||
billboard_mode = 3
|
billboard_mode = 3
|
||||||
billboard_keep_scale = true
|
billboard_keep_scale = true
|
||||||
particles_anim_h_frames = 1
|
particles_anim_h_frames = 1
|
||||||
@ -171,20 +124,17 @@ size = Vector2(0.2, 0.2)
|
|||||||
|
|
||||||
[node name="PhysicsBall" type="RigidBody3D"]
|
[node name="PhysicsBall" type="RigidBody3D"]
|
||||||
mass = 0.05
|
mass = 0.05
|
||||||
physics_material_override = SubResource("PhysicsMaterial_u134x")
|
physics_material_override = ExtResource("1_l23pw")
|
||||||
sleeping = true
|
|
||||||
freeze = true
|
freeze = true
|
||||||
continuous_cd = true
|
continuous_cd = true
|
||||||
contact_monitor = true
|
contact_monitor = true
|
||||||
max_contacts_reported = 3
|
max_contacts_reported = 3
|
||||||
linear_damp_mode = 1
|
linear_damp_mode = 1
|
||||||
angular_damp_mode = 1
|
angular_damp_mode = 1
|
||||||
|
angular_damp = 8.0
|
||||||
script = ExtResource("1_iwh2u")
|
script = ExtResource("1_iwh2u")
|
||||||
terrain_physics = ExtResource("3_3gnie")
|
|
||||||
|
|
||||||
[node name="MeshRoot" type="Node3D" parent="."]
|
[node name="BallMesh" type="MeshInstance3D" parent="."]
|
||||||
|
|
||||||
[node name="BallMesh" type="MeshInstance3D" parent="MeshRoot"]
|
|
||||||
mesh = SubResource("SphereMesh_y0d13")
|
mesh = SubResource("SphereMesh_y0d13")
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||||
@ -200,8 +150,8 @@ anchor_bottom = 1.0
|
|||||||
grow_horizontal = 2
|
grow_horizontal = 2
|
||||||
grow_vertical = 2
|
grow_vertical = 2
|
||||||
script = SubResource("GDScript_p4v7o")
|
script = SubResource("GDScript_p4v7o")
|
||||||
|
draw_reoriented_basis = false
|
||||||
draw_magnus_effect = false
|
draw_magnus_effect = false
|
||||||
draw_gravity_basis = false
|
|
||||||
|
|
||||||
[node name="SFX" type="Node3D" parent="."]
|
[node name="SFX" type="Node3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
@ -226,12 +176,6 @@ unit_size = 40.0
|
|||||||
max_db = 0.0
|
max_db = 0.0
|
||||||
bus = &"SFX"
|
bus = &"SFX"
|
||||||
|
|
||||||
[node name="SplashSFXPlayer" type="AudioStreamPlayer3D" parent="SFX"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
stream = SubResource("AudioStreamRandomizer_nlbkf")
|
|
||||||
unit_size = 40.0
|
|
||||||
bus = &"SFX"
|
|
||||||
|
|
||||||
[node name="ManualSleepTimer" type="Timer" parent="."]
|
[node name="ManualSleepTimer" type="Timer" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
one_shot = true
|
one_shot = true
|
||||||
@ -243,16 +187,6 @@ one_shot = true
|
|||||||
[node name="ParticleEffects" type="Node3D" parent="."]
|
[node name="ParticleEffects" type="Node3D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
script = ExtResource("12_7krl6")
|
script = ExtResource("12_7krl6")
|
||||||
splash_effect_scene = ExtResource("12_qlrvx")
|
|
||||||
|
|
||||||
[node name="ChunkParticles" type="GPUParticles3D" parent="ParticleEffects"]
|
|
||||||
unique_name_in_owner = true
|
|
||||||
emitting = false
|
|
||||||
amount = 12
|
|
||||||
one_shot = true
|
|
||||||
explosiveness = 1.0
|
|
||||||
process_material = SubResource("ParticleProcessMaterial_706cj")
|
|
||||||
draw_pass_1 = SubResource("QuadMesh_npp3t")
|
|
||||||
|
|
||||||
[node name="SandParticles" type="GPUParticles3D" parent="ParticleEffects"]
|
[node name="SandParticles" type="GPUParticles3D" parent="ParticleEffects"]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
@ -1,10 +0,0 @@
|
|||||||
class_name TerrainParameters extends Resource
|
|
||||||
## Physical parameters for an individual terrain type.
|
|
||||||
|
|
||||||
## Linear damping applied while in contact with the terrain surface.
|
|
||||||
@export var linear_damp := 0.0
|
|
||||||
## Angular damping applied while in contact with the terrain surface.
|
|
||||||
@export var angular_damp := 0.0
|
|
||||||
## Linear damping applied the frame the ball makes contact with the surface.
|
|
||||||
## This is applied in addition `linear_damp`.
|
|
||||||
@export var impact_damp := 0.0
|
|
@ -1,40 +0,0 @@
|
|||||||
class_name TerrainPhysics extends Resource
|
|
||||||
## Container for ball behavior parameters when in contact with different terrain types
|
|
||||||
|
|
||||||
@export var default: TerrainParameters
|
|
||||||
|
|
||||||
@export var rough: TerrainParameters
|
|
||||||
@export var fairway: TerrainParameters
|
|
||||||
@export var green: TerrainParameters
|
|
||||||
@export var sand: TerrainParameters
|
|
||||||
@export var concrete: TerrainParameters
|
|
||||||
@export var rock: TerrainParameters
|
|
||||||
@export var wood: TerrainParameters
|
|
||||||
@export var metal: TerrainParameters
|
|
||||||
@export var glass: TerrainParameters
|
|
||||||
|
|
||||||
|
|
||||||
func get_params(type: Terrain.Type) -> TerrainParameters:
|
|
||||||
# NOTE: sure would be nice to just store this in a dict,
|
|
||||||
# but that makes editing physics through the editor unweildy.
|
|
||||||
match type:
|
|
||||||
Terrain.Type.ROUGH:
|
|
||||||
return rough
|
|
||||||
Terrain.Type.FAIRWAY:
|
|
||||||
return fairway
|
|
||||||
Terrain.Type.GREEN:
|
|
||||||
return green
|
|
||||||
Terrain.Type.SAND:
|
|
||||||
return sand
|
|
||||||
Terrain.Type.CONCRETE:
|
|
||||||
return concrete
|
|
||||||
Terrain.Type.ROCK:
|
|
||||||
return rock
|
|
||||||
Terrain.Type.WOOD:
|
|
||||||
return wood
|
|
||||||
Terrain.Type.METAL:
|
|
||||||
return metal
|
|
||||||
Terrain.Type.GLASS:
|
|
||||||
return glass
|
|
||||||
_:
|
|
||||||
return default
|
|
@ -1,17 +1,10 @@
|
|||||||
[gd_scene load_steps=14 format=3 uid="uid://dcqxlbsrubapk"]
|
[gd_scene load_steps=13 format=3 uid="uid://dcqxlbsrubapk"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_yh4fp"]
|
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_yh4fp"]
|
||||||
[ext_resource type="Texture2D" uid="uid://c47bkx508biqr" path="res://assets/sprites/particles/plasma.png" id="2_8fdyx"]
|
[ext_resource type="Texture2D" uid="uid://c47bkx508biqr" path="res://assets/sprites/particles/plasma.png" id="2_8fdyx"]
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/plasma_ball/plasma_ball.gd" id="2_16fhh"]
|
[ext_resource type="Script" path="res://src/equipment/balls/plasma_ball/plasma_ball.gd" id="2_16fhh"]
|
||||||
[ext_resource type="Material" uid="uid://f3qufrkoiv66" path="res://assets/materials/plasma_ball.tres" id="3_6gyuc"]
|
[ext_resource type="Material" uid="uid://f3qufrkoiv66" path="res://assets/materials/plasma_ball.tres" id="3_6gyuc"]
|
||||||
|
|
||||||
[sub_resource type="SphereMesh" id="SphereMesh_n65ut"]
|
|
||||||
material = ExtResource("3_6gyuc")
|
|
||||||
radius = 0.1
|
|
||||||
height = 0.2
|
|
||||||
radial_segments = 6
|
|
||||||
rings = 6
|
|
||||||
|
|
||||||
[sub_resource type="Curve" id="Curve_kabhn"]
|
[sub_resource type="Curve" id="Curve_kabhn"]
|
||||||
max_value = 2.0
|
max_value = 2.0
|
||||||
_data = [Vector2(0, 2), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
_data = [Vector2(0, 2), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
|
||||||
@ -62,13 +55,11 @@ radius = 0.1
|
|||||||
script = ExtResource("2_16fhh")
|
script = ExtResource("2_16fhh")
|
||||||
magnetic = true
|
magnetic = true
|
||||||
|
|
||||||
[node name="BallMesh" parent="MeshRoot" index="0"]
|
[node name="BallMesh" parent="." index="0"]
|
||||||
visible = false
|
transform = Transform3D(2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0)
|
||||||
|
surface_material_override/0 = ExtResource("3_6gyuc")
|
||||||
|
|
||||||
[node name="PlasmaBallMesh" type="MeshInstance3D" parent="MeshRoot" index="1"]
|
[node name="PlasmaFireEffect" type="GPUParticles3D" parent="BallMesh" index="0"]
|
||||||
mesh = SubResource("SphereMesh_n65ut")
|
|
||||||
|
|
||||||
[node name="PlasmaFireEffect" type="GPUParticles3D" parent="MeshRoot/PlasmaBallMesh" index="0"]
|
|
||||||
sorting_offset = -1.0
|
sorting_offset = -1.0
|
||||||
amount = 20
|
amount = 20
|
||||||
lifetime = 0.6
|
lifetime = 0.6
|
||||||
|
@ -1,31 +1,27 @@
|
|||||||
[gd_scene load_steps=37 format=4 uid="uid://deuytmxw2lc62"]
|
[gd_scene load_steps=37 format=4 uid="uid://deuytmxw2lc62"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_14gld"]
|
[ext_resource type="PackedScene" uid="uid://dfttci386ohip" path="res://src/equipment/balls/physics_ball/physics_ball.tscn" id="1_14gld"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://ckhiq6rfjv63u" path="res://assets/textures/gfolfball/gfolfball.png" id="2_a2gtg"]
|
||||||
[ext_resource type="Script" path="res://src/equipment/balls/power_ball/power_ball.gd" id="2_hy51e"]
|
[ext_resource type="Script" path="res://src/equipment/balls/power_ball/power_ball.gd" id="2_hy51e"]
|
||||||
|
[ext_resource type="Texture2D" uid="uid://btntjs7mbdigu" path="res://assets/textures/gfolfball/gfolfball_normal.png" id="3_60i75"]
|
||||||
[ext_resource type="PackedScene" uid="uid://dd2nxbfssd4hh" path="res://assets/models/balls/powerball/fireball.gltf" id="5_i8vmm"]
|
[ext_resource type="PackedScene" uid="uid://dd2nxbfssd4hh" path="res://assets/models/balls/powerball/fireball.gltf" id="5_i8vmm"]
|
||||||
[ext_resource type="AudioStream" uid="uid://tqr7u7vb2r0f" path="res://assets/sound/sfx/ball/effects/fireball.wav" id="6_uwolu"]
|
[ext_resource type="AudioStream" uid="uid://tqr7u7vb2r0f" path="res://assets/sound/sfx/ball/effects/fireball.wav" id="6_uwolu"]
|
||||||
|
|
||||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_bmjge"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_fcniu"]
|
||||||
load_path = "res://.godot/imported/gfolfball.png-4fde775993c78b86828199273dc9e4be.s3tc.ctex"
|
|
||||||
|
|
||||||
[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_314t2"]
|
|
||||||
load_path = "res://.godot/imported/gfolfball_normal.png-d9cc0e700a9a63c2e2cea72beebc6133.s3tc.ctex"
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ya45b"]
|
|
||||||
albedo_color = Color(2, 0.266, 0.266, 1)
|
albedo_color = Color(2, 0.266, 0.266, 1)
|
||||||
albedo_texture = SubResource("CompressedTexture2D_bmjge")
|
albedo_texture = ExtResource("2_a2gtg")
|
||||||
albedo_texture_force_srgb = true
|
albedo_texture_force_srgb = true
|
||||||
metallic = 1.0
|
metallic = 1.0
|
||||||
roughness = 0.67
|
roughness = 0.67
|
||||||
normal_enabled = true
|
normal_enabled = true
|
||||||
normal_scale = 0.2
|
normal_scale = 0.2
|
||||||
normal_texture = SubResource("CompressedTexture2D_314t2")
|
normal_texture = ExtResource("3_60i75")
|
||||||
clearcoat_roughness = 0.0
|
clearcoat_roughness = 0.0
|
||||||
uv1_scale = Vector3(3, 1.5, 3)
|
uv1_scale = Vector3(3, 1.5, 3)
|
||||||
texture_filter = 4
|
texture_filter = 4
|
||||||
|
|
||||||
[sub_resource type="SphereMesh" id="SphereMesh_v4hrl"]
|
[sub_resource type="SphereMesh" id="SphereMesh_0b0i7"]
|
||||||
material = SubResource("StandardMaterial3D_ya45b")
|
material = SubResource("StandardMaterial3D_fcniu")
|
||||||
radius = 0.05
|
radius = 0.05
|
||||||
height = 0.1
|
height = 0.1
|
||||||
radial_segments = 6
|
radial_segments = 6
|
||||||
@ -49,33 +45,6 @@ vertex_color_use_as_albedo = true
|
|||||||
albedo_color = Color(2, 1.98431, 1.6, 0.156863)
|
albedo_color = Color(2, 1.98431, 1.6, 0.156863)
|
||||||
albedo_texture = SubResource("GradientTexture2D_ny4ye")
|
albedo_texture = SubResource("GradientTexture2D_ny4ye")
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_2co83"]
|
|
||||||
length = 0.001
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath("FireballScaleRoot:scale")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 0,
|
|
||||||
"values": [Vector3(1, 1, 1)]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("FireballScaleRoot:rotation")
|
|
||||||
tracks/1/interp = 1
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 0,
|
|
||||||
"values": [Vector3(0, 0, 0)]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_5t74j"]
|
[sub_resource type="Animation" id="Animation_5t74j"]
|
||||||
resource_name = "flicker"
|
resource_name = "flicker"
|
||||||
length = 2.0
|
length = 2.0
|
||||||
@ -105,6 +74,33 @@ tracks/1/keys = {
|
|||||||
"values": [Vector3(0, 0, 0), Vector3(0, 2.0944, 0)]
|
"values": [Vector3(0, 0, 0), Vector3(0, 2.0944, 0)]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_2co83"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("FireballScaleRoot:scale")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(1, 1, 1)]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("FireballScaleRoot:rotation")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Vector3(0, 0, 0)]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_hmunj"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_hmunj"]
|
||||||
_data = {
|
_data = {
|
||||||
"RESET": SubResource("Animation_2co83"),
|
"RESET": SubResource("Animation_2co83"),
|
||||||
@ -238,45 +234,6 @@ _surfaces = [{
|
|||||||
blend_shape_mode = 0
|
blend_shape_mode = 0
|
||||||
shadow_mesh = SubResource("ArrayMesh_r0r4b")
|
shadow_mesh = SubResource("ArrayMesh_r0r4b")
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_6c6mi"]
|
|
||||||
length = 0.001
|
|
||||||
tracks/0/type = "value"
|
|
||||||
tracks/0/imported = false
|
|
||||||
tracks/0/enabled = true
|
|
||||||
tracks/0/path = NodePath("ParticleEffects/PowerParticles:emitting")
|
|
||||||
tracks/0/interp = 1
|
|
||||||
tracks/0/loop_wrap = true
|
|
||||||
tracks/0/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [false]
|
|
||||||
}
|
|
||||||
tracks/1/type = "value"
|
|
||||||
tracks/1/imported = false
|
|
||||||
tracks/1/enabled = true
|
|
||||||
tracks/1/path = NodePath("ParticleEffects/SmokeParticles:emitting")
|
|
||||||
tracks/1/interp = 1
|
|
||||||
tracks/1/loop_wrap = true
|
|
||||||
tracks/1/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [false]
|
|
||||||
}
|
|
||||||
tracks/2/type = "value"
|
|
||||||
tracks/2/imported = false
|
|
||||||
tracks/2/enabled = true
|
|
||||||
tracks/2/path = NodePath("SFX/PowerballSFX:playing")
|
|
||||||
tracks/2/interp = 1
|
|
||||||
tracks/2/loop_wrap = true
|
|
||||||
tracks/2/keys = {
|
|
||||||
"times": PackedFloat32Array(0),
|
|
||||||
"transitions": PackedFloat32Array(1),
|
|
||||||
"update": 1,
|
|
||||||
"values": [false]
|
|
||||||
}
|
|
||||||
|
|
||||||
[sub_resource type="Animation" id="Animation_7yrvu"]
|
[sub_resource type="Animation" id="Animation_7yrvu"]
|
||||||
resource_name = "activate"
|
resource_name = "activate"
|
||||||
length = 4.8
|
length = 4.8
|
||||||
@ -309,11 +266,11 @@ tracks/1/keys = {
|
|||||||
tracks/2/type = "value"
|
tracks/2/type = "value"
|
||||||
tracks/2/imported = false
|
tracks/2/imported = false
|
||||||
tracks/2/enabled = true
|
tracks/2/enabled = true
|
||||||
tracks/2/path = NodePath("ParticleEffects/SmokeParticles:emitting")
|
tracks/2/path = NodePath("BallMesh/FireballPivot:visible")
|
||||||
tracks/2/interp = 1
|
tracks/2/interp = 1
|
||||||
tracks/2/loop_wrap = true
|
tracks/2/loop_wrap = true
|
||||||
tracks/2/keys = {
|
tracks/2/keys = {
|
||||||
"times": PackedFloat32Array(0.9, 4.5),
|
"times": PackedFloat32Array(0.8, 4.8),
|
||||||
"transitions": PackedFloat32Array(1, 1),
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true, false]
|
"values": [true, false]
|
||||||
@ -321,16 +278,103 @@ tracks/2/keys = {
|
|||||||
tracks/3/type = "value"
|
tracks/3/type = "value"
|
||||||
tracks/3/imported = false
|
tracks/3/imported = false
|
||||||
tracks/3/enabled = true
|
tracks/3/enabled = true
|
||||||
tracks/3/path = NodePath("SFX/PowerballSFX:playing")
|
tracks/3/path = NodePath("BallMesh/FireballPivot/FireballScaleRoot/fireball/Fireball:surface_material_override/0:albedo_color")
|
||||||
tracks/3/interp = 1
|
tracks/3/interp = 1
|
||||||
tracks/3/loop_wrap = true
|
tracks/3/loop_wrap = true
|
||||||
tracks/3/keys = {
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0.8, 0.9, 4, 4.8),
|
||||||
|
"transitions": PackedFloat32Array(1, 1, 1.618, 1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(1, 0.993333, 0.8, 0), Color(2, 1.98431, 1.6, 0.156863), Color(2, 1.98431, 1.6, 0.156863), Color(1, 0.993333, 0.8, 0)]
|
||||||
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("ParticleEffects/SmokeParticles:emitting")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0.9, 4.5),
|
||||||
|
"transitions": PackedFloat32Array(1, 1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [true, false]
|
||||||
|
}
|
||||||
|
tracks/5/type = "value"
|
||||||
|
tracks/5/imported = false
|
||||||
|
tracks/5/enabled = true
|
||||||
|
tracks/5/path = NodePath("SFX/PowerballSFX:playing")
|
||||||
|
tracks/5/interp = 1
|
||||||
|
tracks/5/loop_wrap = true
|
||||||
|
tracks/5/keys = {
|
||||||
"times": PackedFloat32Array(0.333333),
|
"times": PackedFloat32Array(0.333333),
|
||||||
"transitions": PackedFloat32Array(1),
|
"transitions": PackedFloat32Array(1),
|
||||||
"update": 1,
|
"update": 1,
|
||||||
"values": [true]
|
"values": [true]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_6c6mi"]
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath("ParticleEffects/PowerParticles:emitting")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/1/type = "value"
|
||||||
|
tracks/1/imported = false
|
||||||
|
tracks/1/enabled = true
|
||||||
|
tracks/1/path = NodePath("BallMesh/FireballPivot:visible")
|
||||||
|
tracks/1/interp = 1
|
||||||
|
tracks/1/loop_wrap = true
|
||||||
|
tracks/1/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/2/type = "value"
|
||||||
|
tracks/2/imported = false
|
||||||
|
tracks/2/enabled = true
|
||||||
|
tracks/2/path = NodePath("BallMesh/FireballPivot/FireballScaleRoot/fireball/Fireball:surface_material_override/0:albedo_color")
|
||||||
|
tracks/2/interp = 1
|
||||||
|
tracks/2/loop_wrap = true
|
||||||
|
tracks/2/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 0,
|
||||||
|
"values": [Color(2, 1.98431, 1.6, 0.156863)]
|
||||||
|
}
|
||||||
|
tracks/3/type = "value"
|
||||||
|
tracks/3/imported = false
|
||||||
|
tracks/3/enabled = true
|
||||||
|
tracks/3/path = NodePath("ParticleEffects/SmokeParticles:emitting")
|
||||||
|
tracks/3/interp = 1
|
||||||
|
tracks/3/loop_wrap = true
|
||||||
|
tracks/3/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
tracks/4/type = "value"
|
||||||
|
tracks/4/imported = false
|
||||||
|
tracks/4/enabled = true
|
||||||
|
tracks/4/path = NodePath("SFX/PowerballSFX:playing")
|
||||||
|
tracks/4/interp = 1
|
||||||
|
tracks/4/loop_wrap = true
|
||||||
|
tracks/4/keys = {
|
||||||
|
"times": PackedFloat32Array(0),
|
||||||
|
"transitions": PackedFloat32Array(1),
|
||||||
|
"update": 1,
|
||||||
|
"values": [false]
|
||||||
|
}
|
||||||
|
|
||||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ospg0"]
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_ospg0"]
|
||||||
_data = {
|
_data = {
|
||||||
"RESET": SubResource("Animation_6c6mi"),
|
"RESET": SubResource("Animation_6c6mi"),
|
||||||
@ -342,26 +386,23 @@ freeze_mode = 1
|
|||||||
script = ExtResource("2_hy51e")
|
script = ExtResource("2_hy51e")
|
||||||
once_per_shot_ability = true
|
once_per_shot_ability = true
|
||||||
|
|
||||||
[node name="BallMesh" parent="MeshRoot" index="0"]
|
[node name="BallMesh" parent="." index="0"]
|
||||||
visible = false
|
mesh = SubResource("SphereMesh_0b0i7")
|
||||||
|
|
||||||
[node name="PowerballMesh" type="MeshInstance3D" parent="MeshRoot" index="1"]
|
[node name="FireballPivot" type="Node3D" parent="BallMesh" index="0"]
|
||||||
mesh = SubResource("SphereMesh_v4hrl")
|
|
||||||
|
|
||||||
[node name="FireballPivot" type="Node3D" parent="MeshRoot/PowerballMesh" index="0"]
|
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
visible = false
|
visible = false
|
||||||
|
|
||||||
[node name="FireballScaleRoot" type="Node3D" parent="MeshRoot/PowerballMesh/FireballPivot" index="0"]
|
[node name="FireballScaleRoot" type="Node3D" parent="BallMesh/FireballPivot" index="0"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0)
|
||||||
|
|
||||||
[node name="fireball" parent="MeshRoot/PowerballMesh/FireballPivot/FireballScaleRoot" index="0" instance=ExtResource("5_i8vmm")]
|
[node name="fireball" parent="BallMesh/FireballPivot/FireballScaleRoot" index="0" instance=ExtResource("5_i8vmm")]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.17, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.17, 0)
|
||||||
|
|
||||||
[node name="Fireball" parent="MeshRoot/PowerballMesh/FireballPivot/FireballScaleRoot/fireball" index="0"]
|
[node name="Fireball" parent="BallMesh/FireballPivot/FireballScaleRoot/fireball" index="0"]
|
||||||
surface_material_override/0 = SubResource("StandardMaterial3D_aqmuo")
|
surface_material_override/0 = SubResource("StandardMaterial3D_aqmuo")
|
||||||
|
|
||||||
[node name="FireballAnimation" type="AnimationPlayer" parent="MeshRoot/PowerballMesh/FireballPivot" index="1"]
|
[node name="FireballAnimation" type="AnimationPlayer" parent="BallMesh/FireballPivot" index="1"]
|
||||||
libraries = {
|
libraries = {
|
||||||
"": SubResource("AnimationLibrary_hmunj")
|
"": SubResource("AnimationLibrary_hmunj")
|
||||||
}
|
}
|
||||||
@ -397,4 +438,4 @@ libraries = {
|
|||||||
"": SubResource("AnimationLibrary_ospg0")
|
"": SubResource("AnimationLibrary_ospg0")
|
||||||
}
|
}
|
||||||
|
|
||||||
[editable path="MeshRoot/PowerballMesh/FireballPivot/FireballScaleRoot/fireball"]
|
[editable path="BallMesh/FireballPivot/FireballScaleRoot/fireball"]
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://ces65grpayngu"]
|
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://cefit4bc8akbb" path="res://src/game/game.tscn" id="1_qa7ks"]
|
|
||||||
|
|
||||||
[node name="Game" instance=ExtResource("1_qa7ks")]
|
|
||||||
start_scene = "res://src/world/world.tscn"
|
|
@ -1,7 +1,7 @@
|
|||||||
class_name Game extends Node
|
class_name Game extends Node
|
||||||
## Wrapper for the game application
|
## Wrapper for the game application
|
||||||
|
|
||||||
@export_file("*.tscn") var start_scene: String = "res://src/ui/menus/title_screen/title_screen.tscn"
|
@export var start_scene: String = "res://src/ui/menus/title_screen/title_screen.tscn"
|
||||||
|
|
||||||
var _loading_resources := {}
|
var _loading_resources := {}
|
||||||
|
|
||||||
@ -81,20 +81,12 @@ func _unload_content() -> void:
|
|||||||
func _finish_scene_load(instance: Node) -> void:
|
func _finish_scene_load(instance: Node) -> void:
|
||||||
# Unpause in case the previous scene was paused.
|
# Unpause in case the previous scene was paused.
|
||||||
get_tree().paused = false
|
get_tree().paused = false
|
||||||
# Reset time scale in case it's been changed.
|
|
||||||
Engine.time_scale = 1.0
|
|
||||||
|
|
||||||
content.add_child(instance)
|
content.add_child(instance)
|
||||||
instance.reparent(content)
|
instance.reparent(content)
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
# REMOVEME
|
|
||||||
if Input.is_action_just_pressed("ui_page_up"):
|
|
||||||
Engine.time_scale *= 2.0
|
|
||||||
if Input.is_action_just_pressed("ui_page_down"):
|
|
||||||
Engine.time_scale *= 0.5
|
|
||||||
|
|
||||||
if _loading_resources and not loading_screen.visible:
|
if _loading_resources and not loading_screen.visible:
|
||||||
loader_transition.play("fade_in")
|
loader_transition.play("fade_in")
|
||||||
|
|
||||||
|
@ -21,8 +21,6 @@ var projection_gravity: bool
|
|||||||
|
|
||||||
var default_text_speed: float
|
var default_text_speed: float
|
||||||
|
|
||||||
var default_physics_ticks_per_second: int
|
|
||||||
|
|
||||||
|
|
||||||
func _init() -> void:
|
func _init() -> void:
|
||||||
ProjectSettings.settings_changed.connect(_read_settings)
|
ProjectSettings.settings_changed.connect(_read_settings)
|
||||||
@ -56,9 +54,6 @@ func _read_settings() -> void:
|
|||||||
)
|
)
|
||||||
|
|
||||||
default_text_speed = ProjectSettings.get_setting("game/config/text/default_text_speed")
|
default_text_speed = ProjectSettings.get_setting("game/config/text/default_text_speed")
|
||||||
default_physics_ticks_per_second = ProjectSettings.get_setting(
|
|
||||||
"physics/common/physics_ticks_per_second"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
func _load_audio_bus_override() -> void:
|
func _load_audio_bus_override() -> void:
|
||||||
|
@ -16,7 +16,6 @@ iron = ExtResource("2_piku2")
|
|||||||
wedge = ExtResource("5_wm4ae")
|
wedge = ExtResource("5_wm4ae")
|
||||||
putter = ExtResource("3_tytwr")
|
putter = ExtResource("3_tytwr")
|
||||||
_balls = {
|
_balls = {
|
||||||
-1: -1,
|
|
||||||
1: -1,
|
1: -1,
|
||||||
2: 5,
|
2: 5,
|
||||||
3: -1,
|
3: -1,
|
||||||
|
@ -6,7 +6,6 @@ signal ball_changed(ball: GameBall)
|
|||||||
|
|
||||||
## Scenes for each type of ball.
|
## Scenes for each type of ball.
|
||||||
const SCENE_MAP: Dictionary = {
|
const SCENE_MAP: Dictionary = {
|
||||||
GameBall.Type.DEBUG: preload("res://src/equipment/balls/debug_ball/debug_ball.tscn"),
|
|
||||||
GameBall.Type.BASIC: preload("res://src/equipment/balls/physics_ball/physics_ball.tscn"),
|
GameBall.Type.BASIC: preload("res://src/equipment/balls/physics_ball/physics_ball.tscn"),
|
||||||
GameBall.Type.PLASMA: preload("res://src/equipment/balls/plasma_ball/plasma_ball.tscn"),
|
GameBall.Type.PLASMA: preload("res://src/equipment/balls/plasma_ball/plasma_ball.tscn"),
|
||||||
GameBall.Type.BRICK: preload("res://src/equipment/balls/brick/brick.tscn"),
|
GameBall.Type.BRICK: preload("res://src/equipment/balls/brick/brick.tscn"),
|
||||||
|
@ -38,7 +38,7 @@ const BIG_POWER_THRESHOLD := 0.7
|
|||||||
const WATER_DAMAGE := 10.0
|
const WATER_DAMAGE := 10.0
|
||||||
|
|
||||||
## Angle of influence that shot curve has, in radians
|
## Angle of influence that shot curve has, in radians
|
||||||
const CURVE_INFLUENCE := PI / 4
|
const CURVE_INFLUENCE := PI / 16
|
||||||
|
|
||||||
## Just enough to make things interesting!
|
## Just enough to make things interesting!
|
||||||
const SHOT_OFFSET_X_FACTOR := 20.0
|
const SHOT_OFFSET_X_FACTOR := 20.0
|
||||||
@ -48,15 +48,11 @@ const SHOT_OFFSET_Z_FACTOR := 2.0 / 45.0
|
|||||||
const CURVE_FACTOR := 0.002
|
const CURVE_FACTOR := 0.002
|
||||||
|
|
||||||
## Maximum absolute curve for the "nice shot" animation to play
|
## Maximum absolute curve for the "nice shot" animation to play
|
||||||
const NICE_THRESHOLD := 0.05
|
const NICE_THRESHOLD := 0.2
|
||||||
|
|
||||||
## Force by which explosions knock the ball away
|
## Force by which explosions knock the ball away
|
||||||
const EXPLOSIVE_FORCE_FACTOR := 0.12
|
const EXPLOSIVE_FORCE_FACTOR := 0.12
|
||||||
|
|
||||||
const CLUB_SELECT_ORDER: Array[Club.Type] = [
|
|
||||||
Club.Type.DRIVER, Club.Type.IRON, Club.Type.WEDGE, Club.Type.SPECIAL, Club.Type.PUTTER
|
|
||||||
]
|
|
||||||
|
|
||||||
## In Driving Range mode, the ball can be retrieved in the shot phase.
|
## In Driving Range mode, the ball can be retrieved in the shot phase.
|
||||||
@export var driving_range := false
|
@export var driving_range := false
|
||||||
|
|
||||||
@ -292,7 +288,7 @@ func take_shot() -> void:
|
|||||||
print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s")
|
print_debug("Shot impulse: ", impulse, "; ", impulse.length(), " N*s")
|
||||||
|
|
||||||
# Curve the curve
|
# Curve the curve
|
||||||
var curve := shot_curve * CURVE_FACTOR
|
var curve := shot_curve * absf(shot_curve) * CURVE_FACTOR
|
||||||
|
|
||||||
# Position where the ball is hit (imparts spin)
|
# Position where the ball is hit (imparts spin)
|
||||||
var offset := (
|
var offset := (
|
||||||
@ -311,9 +307,6 @@ func take_shot() -> void:
|
|||||||
game_ball.magnetic = club_type == Club.Type.IRON
|
game_ball.magnetic = club_type == Club.Type.IRON
|
||||||
game_ball.freeze = false
|
game_ball.freeze = false
|
||||||
game_ball.apply_impulse(impulse, offset)
|
game_ball.apply_impulse(impulse, offset)
|
||||||
if not is_shot_good():
|
|
||||||
# Play chunk particle effect
|
|
||||||
game_ball.effects.play_chunk(absf(shot_curve) / (1.0 - NICE_THRESHOLD))
|
|
||||||
|
|
||||||
reset_prompt_timer.start()
|
reset_prompt_timer.start()
|
||||||
|
|
||||||
@ -396,7 +389,7 @@ func travel_to_ball() -> void:
|
|||||||
return
|
return
|
||||||
|
|
||||||
game_ball.freeze = true
|
game_ball.freeze = true
|
||||||
global_position = game_ball.get_surface_snap_point()
|
global_position = game_ball.global_position
|
||||||
|
|
||||||
# Re-orient to the ball's last contact normal if there is one.
|
# Re-orient to the ball's last contact normal if there is one.
|
||||||
# Normally this will just be Vector3.UP or something close to it.
|
# Normally this will just be Vector3.UP or something close to it.
|
||||||
@ -404,6 +397,9 @@ func travel_to_ball() -> void:
|
|||||||
_target_rotation.y = 0
|
_target_rotation.y = 0
|
||||||
global_basis = game_ball.get_reoriented_basis()
|
global_basis = game_ball.get_reoriented_basis()
|
||||||
|
|
||||||
|
# Adjust position downward to account for ball radius
|
||||||
|
global_position -= global_basis.y.normalized() * game_ball.radius
|
||||||
|
|
||||||
ball_point.snap()
|
ball_point.snap()
|
||||||
|
|
||||||
|
|
||||||
@ -485,8 +481,6 @@ func _on_phase_change(new_phase: Phase) -> void:
|
|||||||
idle_prompt_timer.start()
|
idle_prompt_timer.start()
|
||||||
hud.hide_idle_prompts()
|
hud.hide_idle_prompts()
|
||||||
|
|
||||||
world.fast_forward = false
|
|
||||||
|
|
||||||
match new_phase:
|
match new_phase:
|
||||||
Phase.AIM:
|
Phase.AIM:
|
||||||
hud.show_hud()
|
hud.show_hud()
|
||||||
@ -540,21 +534,7 @@ func _on_game_ball_changed(ball: GameBall) -> void:
|
|||||||
player_offset.position.z = z_offset
|
player_offset.position.z = z_offset
|
||||||
|
|
||||||
|
|
||||||
func _get_relative_club(delta: int, from: int = -1) -> Club.Type:
|
func _process(delta: float) -> void:
|
||||||
from = from if from != -1 else club_type
|
|
||||||
var old_idx := CLUB_SELECT_ORDER.find(from)
|
|
||||||
var new_idx := wrapi(old_idx + delta, 0, len(CLUB_SELECT_ORDER))
|
|
||||||
var new_club := CLUB_SELECT_ORDER[new_idx]
|
|
||||||
|
|
||||||
# UX behavior: if there is not club in the next slot, get the NEXT next slot, etc etc
|
|
||||||
# NOTE: this will enter a loop if the player has no clubs!
|
|
||||||
if not player.get_club(new_club):
|
|
||||||
return _get_relative_club(delta, new_club)
|
|
||||||
|
|
||||||
return new_club
|
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
|
||||||
# REMOVEME
|
# REMOVEME
|
||||||
if Input.is_action_just_pressed("ui_menu"):
|
if Input.is_action_just_pressed("ui_menu"):
|
||||||
print("Debugging...")
|
print("Debugging...")
|
||||||
@ -564,24 +544,24 @@ func _process(_delta: float) -> void:
|
|||||||
## Visual updates
|
## Visual updates
|
||||||
# Rotation
|
# Rotation
|
||||||
direction.rotation.y = lerp_angle(
|
direction.rotation.y = lerp_angle(
|
||||||
direction.rotation.y, _target_rotation.y, Game.settings.x_acceleration / 60.0
|
direction.rotation.y, _target_rotation.y, delta * Game.settings.x_acceleration
|
||||||
)
|
)
|
||||||
pitch.rotation.x = lerp_angle(
|
pitch.rotation.x = lerp_angle(
|
||||||
pitch.rotation.x, _target_rotation.x, Game.settings.y_acceleration / 60.0
|
pitch.rotation.x, _target_rotation.x, delta * Game.settings.y_acceleration
|
||||||
)
|
)
|
||||||
|
|
||||||
# Arrow lags behind camera control
|
# Arrow lags behind camera control
|
||||||
arrow_pivot.rotation.y = lerp_angle(
|
arrow_pivot.rotation.y = lerp_angle(
|
||||||
arrow_pivot.rotation.y, _target_rotation.y, ARROW_ACCELERATION / 60.0
|
arrow_pivot.rotation.y, _target_rotation.y, delta * ARROW_ACCELERATION
|
||||||
)
|
)
|
||||||
# Player lags further behind
|
# Player lags further behind
|
||||||
player_pivot.rotation.y = lerp_angle(
|
player_pivot.rotation.y = lerp_angle(
|
||||||
player_pivot.rotation.y, _target_rotation.y, PLAYER_ACCELERATION / 60.0
|
player_pivot.rotation.y, _target_rotation.y, delta * PLAYER_ACCELERATION
|
||||||
)
|
)
|
||||||
|
|
||||||
## Input Handling
|
## Input Handling
|
||||||
if control_disabled:
|
if control_disabled:
|
||||||
if Input.is_action_just_pressed("camera_cancel", true):
|
if Input.is_action_just_pressed("camera_cancel"):
|
||||||
if is_instance_valid(_free_camera) and not _returning_free_camera:
|
if is_instance_valid(_free_camera) and not _returning_free_camera:
|
||||||
_returning_free_camera = true
|
_returning_free_camera = true
|
||||||
var tween := get_tree().create_tween()
|
var tween := get_tree().create_tween()
|
||||||
@ -601,79 +581,72 @@ func _process(_delta: float) -> void:
|
|||||||
match phase:
|
match phase:
|
||||||
Phase.AIM:
|
Phase.AIM:
|
||||||
# Camera zoom
|
# Camera zoom
|
||||||
if Input.is_action_just_pressed("shot_zoom_in", true):
|
if Input.is_action_just_pressed("shot_zoom_in"):
|
||||||
camera_distance = max(camera_distance - 1.0, ZOOM_MIN)
|
camera_distance = max(camera_distance - 1.0, ZOOM_MIN)
|
||||||
if Input.is_action_just_pressed("shot_zoom_out", true):
|
if Input.is_action_just_pressed("shot_zoom_out"):
|
||||||
camera_distance = min(camera_distance + 1.0, ZOOM_MAX)
|
camera_distance = min(camera_distance + 1.0, ZOOM_MAX)
|
||||||
|
|
||||||
# Club select
|
# Club select
|
||||||
if Input.is_action_just_pressed("club_next", true):
|
if Input.is_action_just_pressed("select_driver"):
|
||||||
club_type = _get_relative_club(1)
|
|
||||||
if Input.is_action_just_pressed("club_previous", true):
|
|
||||||
club_type = _get_relative_club(-1)
|
|
||||||
if Input.is_action_just_pressed("select_driver", true):
|
|
||||||
club_type = Club.Type.DRIVER
|
club_type = Club.Type.DRIVER
|
||||||
if Input.is_action_just_pressed("select_iron", true):
|
if Input.is_action_just_pressed("select_iron"):
|
||||||
club_type = Club.Type.IRON
|
club_type = Club.Type.IRON
|
||||||
if Input.is_action_just_pressed("select_wedge", true):
|
if Input.is_action_just_pressed("select_wedge"):
|
||||||
club_type = Club.Type.WEDGE
|
club_type = Club.Type.WEDGE
|
||||||
if Input.is_action_just_pressed("select_special", true):
|
if Input.is_action_just_pressed("select_special"):
|
||||||
club_type = Club.Type.SPECIAL
|
club_type = Club.Type.SPECIAL
|
||||||
if Input.is_action_just_pressed("select_putter", true):
|
if Input.is_action_just_pressed("select_putter"):
|
||||||
club_type = Club.Type.PUTTER
|
club_type = Club.Type.PUTTER
|
||||||
|
|
||||||
# Ball select
|
# Ball select
|
||||||
if Input.is_action_just_pressed("ball_next", true):
|
if Input.is_action_just_pressed("ball_next"):
|
||||||
ball_type = player.next_ball(ball_type)
|
ball_type = player.next_ball(ball_type)
|
||||||
if Input.is_action_just_pressed("ball_previous", true):
|
if Input.is_action_just_pressed("ball_previous"):
|
||||||
ball_type = player.prev_ball(ball_type)
|
ball_type = player.prev_ball(ball_type)
|
||||||
|
|
||||||
# Switch to free cam
|
# Switch to free cam
|
||||||
if (
|
if (
|
||||||
Input.is_action_just_pressed("camera_back", true)
|
Input.is_action_just_pressed("camera_back")
|
||||||
or Input.is_action_just_pressed("camera_forward", true)
|
or Input.is_action_just_pressed("camera_forward")
|
||||||
or Input.is_action_just_pressed("camera_left", true)
|
or Input.is_action_just_pressed("camera_left")
|
||||||
or Input.is_action_just_pressed("camera_right", true)
|
or Input.is_action_just_pressed("camera_right")
|
||||||
):
|
):
|
||||||
insert_free_cam()
|
insert_free_cam()
|
||||||
|
|
||||||
# Advance to next phase
|
# Advance to next phase
|
||||||
if Input.is_action_just_pressed("shot_accept", true):
|
if Input.is_action_just_pressed("shot_accept"):
|
||||||
if player.get_balls(ball_type) != 0:
|
if player.get_balls(ball_type) != 0:
|
||||||
# Check that player has enough of the selected ball (<0 means unlimited)
|
# Check that player has enough of the selected ball (<0 means unlimited)
|
||||||
phase = Phase.POWER_ADJUST
|
phase = Phase.POWER_ADJUST
|
||||||
# TODO play UI bonk if player doesn't have balls (lmao)
|
# TODO play UI bonk if player doesn't have balls (lmao)
|
||||||
Phase.POWER_ADJUST:
|
Phase.POWER_ADJUST:
|
||||||
if Input.is_action_just_pressed("shot_accept", true):
|
if Input.is_action_just_pressed("shot_accept"):
|
||||||
# TODO set power gauge parameters if needed
|
# TODO set power gauge parameters if needed
|
||||||
character.start_upswing()
|
character.start_upswing()
|
||||||
hud.start_power_bar()
|
hud.start_power_bar()
|
||||||
if Input.is_action_just_pressed("shot_cancel", true):
|
if Input.is_action_just_pressed("shot_cancel"):
|
||||||
hud.reset_power_bar()
|
hud.reset_power_bar()
|
||||||
phase = Phase.AIM
|
phase = Phase.AIM
|
||||||
if Input.is_action_just_released("shot_accept", true) and shot_power > 0:
|
if Input.is_action_just_released("shot_accept") and shot_power > 0:
|
||||||
hud.stop_power_bar()
|
hud.stop_power_bar()
|
||||||
phase = Phase.CURVE_ADJUST
|
phase = Phase.CURVE_ADJUST
|
||||||
Phase.CURVE_ADJUST:
|
Phase.CURVE_ADJUST:
|
||||||
if Input.is_action_just_pressed("shot_cancel", true):
|
if Input.is_action_just_pressed("shot_cancel"):
|
||||||
hud.reset_curve_bar()
|
hud.reset_curve_bar()
|
||||||
phase = Phase.POWER_ADJUST
|
phase = Phase.POWER_ADJUST
|
||||||
if Input.is_action_just_pressed("shot_accept", true):
|
if Input.is_action_just_pressed("shot_accept"):
|
||||||
hud.stop_curve_bar()
|
hud.stop_curve_bar()
|
||||||
phase = Phase.DOWNSWING
|
phase = Phase.DOWNSWING
|
||||||
Phase.SHOT:
|
Phase.SHOT:
|
||||||
# Fast-forward when input is held:
|
if reset_enabled and Input.is_action_just_pressed("shot_reset"):
|
||||||
world.fast_forward = Input.is_action_pressed("fast_forward", true)
|
|
||||||
|
|
||||||
if reset_enabled and Input.is_action_just_pressed("shot_reset", true):
|
|
||||||
phase = Phase.SHOT_RESET
|
phase = Phase.SHOT_RESET
|
||||||
reset_enabled = false
|
reset_enabled = false
|
||||||
return_ball()
|
return_ball()
|
||||||
|
|
||||||
if Input.is_action_just_pressed("activate_ball", true):
|
if Input.is_action_just_pressed("activate_ball"):
|
||||||
game_ball.activate_ability()
|
game_ball.activate_ability()
|
||||||
|
|
||||||
if driving_range and Input.is_action_just_pressed("shot_accept", true):
|
if driving_range and Input.is_action_just_pressed("shot_accept"):
|
||||||
phase = Phase.AIM
|
phase = Phase.AIM
|
||||||
return_ball()
|
return_ball()
|
||||||
Phase.FINISHED:
|
Phase.FINISHED:
|
||||||
@ -755,5 +728,3 @@ func _on_idle_prompt_timer_timeout() -> void:
|
|||||||
hud.show_power_prompt()
|
hud.show_power_prompt()
|
||||||
Phase.CURVE_ADJUST:
|
Phase.CURVE_ADJUST:
|
||||||
hud.show_curve_prompt()
|
hud.show_curve_prompt()
|
||||||
Phase.SHOT:
|
|
||||||
hud.show_shot_prompt()
|
|
||||||
|
@ -329,7 +329,7 @@ _data = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_xvvdi"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_xvvdi"]
|
||||||
radius = 2.0
|
radius = 1.5
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4n2rd"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_4n2rd"]
|
||||||
transparency = 1
|
transparency = 1
|
||||||
|
File diff suppressed because one or more lines are too long
@ -1,7 +1,6 @@
|
|||||||
[gd_scene load_steps=4 format=3 uid="uid://dagh38vap4t1d"]
|
[gd_scene load_steps=3 format=3 uid="uid://dagh38vap4t1d"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://mhycq1tk1bpm" path="res://assets/models/scenery/city/concrete_building_1/concrete_building_1.gltf" id="1_id6ph"]
|
[ext_resource type="PackedScene" uid="uid://mhycq1tk1bpm" path="res://assets/models/scenery/city/concrete_building_1/concrete_building_1.gltf" id="1_id6ph"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_5x2lp"]
|
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_5g4vq"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_5g4vq"]
|
||||||
size = Vector3(16, 24, 16)
|
size = Vector3(16, 24, 16)
|
||||||
@ -10,10 +9,6 @@ size = Vector3(16, 24, 16)
|
|||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="." index="1"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="." index="1"]
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="StaticBody3D" index="0"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="0"]
|
||||||
script = ExtResource("2_5x2lp")
|
|
||||||
type = 5
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="1"]
|
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12, 0)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12, 0)
|
||||||
shape = SubResource("BoxShape3D_5g4vq")
|
shape = SubResource("BoxShape3D_5g4vq")
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://cjubxs7peir5k"]
|
[gd_scene load_steps=5 format=3 uid="uid://cjubxs7peir5k"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://hwc1px831dgm" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.gltf" id="1_o4tvg"]
|
[ext_resource type="PackedScene" uid="uid://hwc1px831dgm" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.gltf" id="1_o4tvg"]
|
||||||
[ext_resource type="Texture2D" uid="uid://d0lsrrx0r5wnu" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.png" id="2_85s5u"]
|
[ext_resource type="Texture2D" uid="uid://d0lsrrx0r5wnu" path="res://assets/models/scenery/city/kana_signboard/kana_signboard.png" id="2_85s5u"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="3_dllon"]
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dwyvb"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dwyvb"]
|
||||||
albedo_texture = ExtResource("2_85s5u")
|
albedo_texture = ExtResource("2_85s5u")
|
||||||
@ -19,17 +18,13 @@ surface_material_override/0 = SubResource("StandardMaterial3D_dwyvb")
|
|||||||
|
|
||||||
[node name="StaticBody3D" type="StaticBody3D" parent="." index="3"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="." index="3"]
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="StaticBody3D" index="0"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="0"]
|
||||||
script = ExtResource("3_dllon")
|
|
||||||
type = 8
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="1"]
|
|
||||||
shape = SubResource("BoxShape3D_kp4b0")
|
shape = SubResource("BoxShape3D_kp4b0")
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="2"]
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="1"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 1.2)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 1.2)
|
||||||
shape = SubResource("BoxShape3D_kp4b0")
|
shape = SubResource("BoxShape3D_kp4b0")
|
||||||
|
|
||||||
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="3"]
|
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="2"]
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 1.2)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.5, 1.2)
|
||||||
shape = SubResource("BoxShape3D_kp4b0")
|
shape = SubResource("BoxShape3D_kp4b0")
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
[gd_scene load_steps=6 format=3 uid="uid://nqar1qcun8ax"]
|
[gd_scene load_steps=5 format=3 uid="uid://nqar1qcun8ax"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/props/scenery/highway/guard_rail/guard_rail.gd" id="1_imntf"]
|
[ext_resource type="Script" path="res://src/props/scenery/highway/guard_rail/guard_rail.gd" id="1_imntf"]
|
||||||
[ext_resource type="Material" uid="uid://cift6p0wn1oce" path="res://assets/materials/guard_rail.tres" id="2_1s4wy"]
|
[ext_resource type="Material" uid="uid://cift6p0wn1oce" path="res://assets/materials/guard_rail.tres" id="2_1s4wy"]
|
||||||
[ext_resource type="PlaneMesh" uid="uid://bdcmgvgpj1e0w" path="res://src/props/scenery/highway/guard_rail/guard_rail_post_mesh.tres" id="3_hha2c"]
|
[ext_resource type="PlaneMesh" uid="uid://bdcmgvgpj1e0w" path="res://src/props/scenery/highway/guard_rail/guard_rail_post_mesh.tres" id="3_hha2c"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="3_nfjvf"]
|
|
||||||
|
|
||||||
[sub_resource type="MultiMesh" id="MultiMesh_1dcl6"]
|
[sub_resource type="MultiMesh" id="MultiMesh_1o4mq"]
|
||||||
transform_format = 1
|
transform_format = 1
|
||||||
mesh = ExtResource("3_hha2c")
|
mesh = ExtResource("3_hha2c")
|
||||||
|
|
||||||
@ -27,10 +26,6 @@ path_u_distance = 1.0
|
|||||||
path_joined = false
|
path_joined = false
|
||||||
material = ExtResource("2_1s4wy")
|
material = ExtResource("2_1s4wy")
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="UpperRail"]
|
|
||||||
script = ExtResource("3_nfjvf")
|
|
||||||
type = 8
|
|
||||||
|
|
||||||
[node name="LowerRail" type="CSGPolygon3D" parent="."]
|
[node name="LowerRail" type="CSGPolygon3D" parent="."]
|
||||||
use_collision = true
|
use_collision = true
|
||||||
polygon = PackedVector2Array(0, 0.4, -0.01, 0.5, 0, 0.6, 0.01, 0.5)
|
polygon = PackedVector2Array(0, 0.4, -0.01, 0.5, 0, 0.6, 0.01, 0.5)
|
||||||
@ -46,11 +41,7 @@ path_u_distance = 1.0
|
|||||||
path_joined = false
|
path_joined = false
|
||||||
material = ExtResource("2_1s4wy")
|
material = ExtResource("2_1s4wy")
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="LowerRail"]
|
|
||||||
script = ExtResource("3_nfjvf")
|
|
||||||
type = 8
|
|
||||||
|
|
||||||
[node name="PostMultiMesh" type="MultiMeshInstance3D" parent="."]
|
[node name="PostMultiMesh" type="MultiMeshInstance3D" parent="."]
|
||||||
multimesh = SubResource("MultiMesh_1dcl6")
|
multimesh = SubResource("MultiMesh_1o4mq")
|
||||||
|
|
||||||
[connection signal="curve_changed" from="." to="." method="_on_curve_changed"]
|
[connection signal="curve_changed" from="." to="." method="_on_curve_changed"]
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
[gd_scene load_steps=4 format=3 uid="uid://d0tcr6uijpym5"]
|
[gd_scene load_steps=3 format=3 uid="uid://d0tcr6uijpym5"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://dloe67udf7fpd" path="res://assets/textures/highway/highway_road_grass.png" id="1_f3xui"]
|
[ext_resource type="Texture2D" uid="uid://dloe67udf7fpd" path="res://assets/textures/highway/highway_road_grass.png" id="1_f3xui"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_4f0hb"]
|
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nkovu"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nkovu"]
|
||||||
transparency = 1
|
transparency = 1
|
||||||
@ -26,7 +25,3 @@ path_continuous_u = true
|
|||||||
path_u_distance = 1.0
|
path_u_distance = 1.0
|
||||||
path_joined = false
|
path_joined = false
|
||||||
material = SubResource("StandardMaterial3D_nkovu")
|
material = SubResource("StandardMaterial3D_nkovu")
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="CSGPolygon3D"]
|
|
||||||
script = ExtResource("2_4f0hb")
|
|
||||||
type = 5
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
[gd_scene load_steps=9 format=3 uid="uid://di7aql54lksn7"]
|
[gd_scene load_steps=8 format=3 uid="uid://di7aql54lksn7"]
|
||||||
|
|
||||||
[ext_resource type="PackedScene" uid="uid://bgdgd3lky5w60" path="res://assets/models/scenery/trees/palm_tree/palm_tree.gltf" id="1_o3thn"]
|
[ext_resource type="PackedScene" uid="uid://bgdgd3lky5w60" path="res://assets/models/scenery/trees/palm_tree/palm_tree.gltf" id="1_o3thn"]
|
||||||
[ext_resource type="Script" path="res://src/world/terrain_marker.gd" id="2_1lamy"]
|
|
||||||
|
|
||||||
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_bp5t6"]
|
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_bp5t6"]
|
||||||
data = PackedVector3Array(-0.6467, 5.2727, -3.6037, -0.7678, 3.663, -4.1571, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, 1.1035, 5.3325, -3.712, 0.2063, 5.6673, -3.3214, 0.2063, 5.6673, -3.3214, 1.1035, 5.3325, -3.712, 0.2526, 6.0382, -2.2225, -0.102, 1.5632, -4.5545, 0.9292, 3.4191, -4.4363, 0.0705, 4.1529, -5.0529, 0.0705, 4.1529, -5.0529, -0.7379, 3.4651, -4.2526, -0.102, 1.5632, -4.5545, 0.0705, 4.1529, -5.0529, 0.992, 3.6309, -4.3423, 1.1035, 5.3325, -3.712, 0.0705, 4.1529, -5.0529, 1.1035, 5.3325, -3.712, 0.1793, 5.4514, -3.9613, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, -0.6467, 5.2727, -3.6037, 0.2063, 5.6673, -3.3214, 0.2526, 6.0382, -2.2225, -0.4953, 5.4015, -3.3712, 0.2063, 5.6673, -3.3214, -0.6467, 5.2727, -3.6037, 0.1793, 5.4514, -3.9613)
|
data = PackedVector3Array(-0.6467, 5.2727, -3.6037, -0.7678, 3.663, -4.1571, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, 1.1035, 5.3325, -3.712, 0.2063, 5.6673, -3.3214, 0.2063, 5.6673, -3.3214, 1.1035, 5.3325, -3.712, 0.2526, 6.0382, -2.2225, -0.102, 1.5632, -4.5545, 0.9292, 3.4191, -4.4363, 0.0705, 4.1529, -5.0529, 0.0705, 4.1529, -5.0529, -0.7379, 3.4651, -4.2526, -0.102, 1.5632, -4.5545, 0.0705, 4.1529, -5.0529, 0.992, 3.6309, -4.3423, 1.1035, 5.3325, -3.712, 0.0705, 4.1529, -5.0529, 1.1035, 5.3325, -3.712, 0.1793, 5.4514, -3.9613, 0.0705, 4.1529, -5.0529, 0.1793, 5.4514, -3.9613, -0.6467, 5.2727, -3.6037, 0.2063, 5.6673, -3.3214, 0.2526, 6.0382, -2.2225, -0.4953, 5.4015, -3.3712, 0.2063, 5.6673, -3.3214, -0.6467, 5.2727, -3.6037, 0.1793, 5.4514, -3.9613)
|
||||||
@ -45,35 +44,26 @@ bones/10/rotation = Quaternion(0.183326, -0.237737, -0.342496, 0.890264)
|
|||||||
bones/10/scale = Vector3(1, 1, 1)
|
bones/10/scale = Vector3(1, 1, 1)
|
||||||
bones/11/rotation = Quaternion(-0.13894, 0.0183908, 0.000355869, 0.99013)
|
bones/11/rotation = Quaternion(-0.13894, 0.0183908, 0.000355869, 0.99013)
|
||||||
|
|
||||||
[node name="LeafBody" type="StaticBody3D" parent="." index="2"]
|
[node name="StaticBody3D" type="StaticBody3D" parent="." index="2"]
|
||||||
|
collision_layer = 2147483649
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="LeafBody" index="0"]
|
[node name="CollisionShape3D2" type="CollisionShape3D" parent="StaticBody3D" index="0"]
|
||||||
script = ExtResource("2_1lamy")
|
|
||||||
type = 1
|
|
||||||
|
|
||||||
[node name="CollisionShape3D2" type="CollisionShape3D" parent="LeafBody" index="1"]
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_bp5t6")
|
shape = SubResource("ConcavePolygonShape3D_bp5t6")
|
||||||
|
|
||||||
[node name="CollisionShape3D3" type="CollisionShape3D" parent="LeafBody" index="2"]
|
[node name="CollisionShape3D3" type="CollisionShape3D" parent="StaticBody3D" index="1"]
|
||||||
shape = SubResource("ConcavePolygonShape3D_j5qxc")
|
shape = SubResource("ConcavePolygonShape3D_j5qxc")
|
||||||
|
|
||||||
[node name="CollisionShape3D4" type="CollisionShape3D" parent="LeafBody" index="3"]
|
[node name="CollisionShape3D4" type="CollisionShape3D" parent="StaticBody3D" index="2"]
|
||||||
shape = SubResource("ConcavePolygonShape3D_eopyd")
|
shape = SubResource("ConcavePolygonShape3D_eopyd")
|
||||||
|
|
||||||
[node name="CollisionShape3D5" type="CollisionShape3D" parent="LeafBody" index="4"]
|
[node name="CollisionShape3D5" type="CollisionShape3D" parent="StaticBody3D" index="3"]
|
||||||
shape = SubResource("ConcavePolygonShape3D_npgp7")
|
shape = SubResource("ConcavePolygonShape3D_npgp7")
|
||||||
|
|
||||||
[node name="CollisionShape3D6" type="CollisionShape3D" parent="LeafBody" index="5"]
|
[node name="CollisionShape3D6" type="CollisionShape3D" parent="StaticBody3D" index="4"]
|
||||||
shape = SubResource("ConcavePolygonShape3D_xl1fh")
|
shape = SubResource("ConcavePolygonShape3D_xl1fh")
|
||||||
|
|
||||||
[node name="TrunkBody" type="StaticBody3D" parent="." index="3"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" index="5"]
|
||||||
|
|
||||||
[node name="TerrainMarker" type="Node" parent="TrunkBody" index="0"]
|
|
||||||
script = ExtResource("2_1lamy")
|
|
||||||
type = 7
|
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="TrunkBody" index="1"]
|
|
||||||
shape = SubResource("ConcavePolygonShape3D_lol7j")
|
shape = SubResource("ConcavePolygonShape3D_lol7j")
|
||||||
|
|
||||||
[node name="AnimationPlayer" parent="." index="4"]
|
[node name="AnimationPlayer" parent="." index="3"]
|
||||||
autoplay = "sway_circle"
|
autoplay = "sway_circle"
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
// https://www.shadertoy.com/view/MdffD7
|
|
||||||
// Fork of FMS_Cat's VCR distortion shader
|
|
||||||
// Retrieved from https://godotshaders.com/shader/vhs-post-processing/
|
|
||||||
|
|
||||||
shader_type canvas_item;
|
|
||||||
|
|
||||||
// TODO: Add uniforms for tape crease discoloration and image jiggle
|
|
||||||
|
|
||||||
uniform sampler2D screen_texture: hint_screen_texture, filter_linear_mipmap, repeat_disable;
|
|
||||||
|
|
||||||
uniform vec2 vhs_resolution = vec2(320.0, 240.0);
|
|
||||||
|
|
||||||
uniform int samples = 2;
|
|
||||||
uniform float crease_noise: hint_range(0.0, 2.0, 0.1) = 1.0;
|
|
||||||
uniform float crease_opacity: hint_range(0.0, 1.0, 0.1) = 0.5;
|
|
||||||
uniform float filter_intensity: hint_range(0.0, 1.0, 0.1) = 0.1;
|
|
||||||
|
|
||||||
group_uniforms tape_crease;
|
|
||||||
uniform float tape_crease_smear: hint_range(0.0, 2.0, 0.1) = 0.2;
|
|
||||||
uniform float tape_crease_intensity: hint_range(0.0, 1.0, 0.1) = 0.2;
|
|
||||||
uniform float tape_crease_jitter: hint_range(0.0, 1.0, 0.01) = 0.10;
|
|
||||||
uniform float tape_crease_speed: hint_range(-2.0, 2.0, 0.1) = 0.5;
|
|
||||||
uniform float tape_crease_discoloration: hint_range(0.0, 2.0, 0.1) = 1.0;
|
|
||||||
|
|
||||||
group_uniforms bottom_border;
|
|
||||||
uniform float bottom_border_thickness: hint_range(0.0,32.0, 0.1) = 6.0;
|
|
||||||
uniform float bottom_border_jitter: hint_range(0.0, 24.0, 0.5) = 6.0;
|
|
||||||
|
|
||||||
group_uniforms noise;
|
|
||||||
uniform float noise_intensity: hint_range(0.0, 1.0, 0.1) = 0.1;
|
|
||||||
uniform sampler2D noise_texture: filter_linear_mipmap, repeat_enable;
|
|
||||||
|
|
||||||
float v2random(vec2 uv) {
|
|
||||||
return texture(noise_texture, mod(uv, vec2(1.0))).x;
|
|
||||||
}
|
|
||||||
|
|
||||||
mat2 rotate2D(float t) {
|
|
||||||
return mat2(vec2(cos(t), sin(t)), vec2(-sin(t), cos(t)));
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 rgb2yiq(vec3 rgb) {
|
|
||||||
return mat3(vec3(0.299, 0.596, 0.211), vec3(0.587, -0.274, -0.523), vec3(0.114, -0.322, 0.312)) * rgb;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 yiq2rgb(vec3 yiq) {
|
|
||||||
return mat3(vec3(1.0, 1.0, 1.0), vec3(0.956, -0.272, -1.106), vec3(0.621, -0.647, 1.703)) * yiq;
|
|
||||||
}
|
|
||||||
|
|
||||||
vec3 vhx_tex_2D(sampler2D tex, vec2 uv, float rot) {
|
|
||||||
vec3 yiq = vec3(0.0);
|
|
||||||
for (int i = 0; i < samples; i++) {
|
|
||||||
yiq += rgb2yiq(texture(tex, uv - vec2(float(i), 0.0) / vhs_resolution).xyz) *
|
|
||||||
vec2(float(i), float(samples - 1 - i)).yxx / float(samples - 1)
|
|
||||||
/ float(samples) * 2.0;
|
|
||||||
}
|
|
||||||
if (rot != 0.0) {
|
|
||||||
yiq.yz *= rotate2D(rot * tape_crease_discoloration);
|
|
||||||
}
|
|
||||||
return yiq2rgb(yiq);
|
|
||||||
}
|
|
||||||
|
|
||||||
void fragment() {
|
|
||||||
vec2 uvn = UV;
|
|
||||||
vec3 col = vec3(0.0, 0.0, 0.0);
|
|
||||||
|
|
||||||
// Tape wave.
|
|
||||||
uvn.x += (v2random(vec2(uvn.y / 10.0, TIME / 10.0) / 1.0) - 0.5) / vhs_resolution.x * 1.0;
|
|
||||||
uvn.x += (v2random(vec2(uvn.y, TIME * 10.0)) - 0.5) / vhs_resolution.x * 1.0;
|
|
||||||
|
|
||||||
// tape crease
|
|
||||||
float tc_phase = smoothstep(0.9, 0.96, sin(uvn.y * 8.0 - (TIME * tape_crease_speed + tape_crease_jitter * v2random(TIME * vec2(0.67, 0.59))) * PI * 1.2));
|
|
||||||
float tc_noise = smoothstep(0.3, 1.0, v2random(vec2(uvn.y * 4.77, TIME)));
|
|
||||||
float tc = tc_phase * tc_noise;
|
|
||||||
uvn.x = uvn.x - tc / vhs_resolution.x * 8.0 * tape_crease_smear;
|
|
||||||
|
|
||||||
// switching noise
|
|
||||||
float sn_phase = smoothstep(1.0 - bottom_border_thickness / vhs_resolution.y, 1.0, uvn.y);
|
|
||||||
uvn.x += sn_phase * (v2random(vec2(UV.y * 100.0, TIME * 10.0)) - 0.5) / vhs_resolution.x * bottom_border_jitter;
|
|
||||||
|
|
||||||
// fetch
|
|
||||||
col = vhx_tex_2D(screen_texture, uvn, tc_phase * 0.2 + sn_phase * 2.0);
|
|
||||||
|
|
||||||
// crease noise
|
|
||||||
float cn = tc_noise * crease_noise * (0.7 * tc_phase * tape_crease_intensity + 0.3);
|
|
||||||
if (0.29 < cn) {
|
|
||||||
vec2 V = vec2(0.0, crease_opacity);
|
|
||||||
vec2 uvt = (uvn + V.yx * v2random(vec2(uvn.y, TIME))) * vec2(0.1, 1.0);
|
|
||||||
float n0 = v2random(uvt);
|
|
||||||
float n1 = v2random(uvt + V.yx / vhs_resolution.x);
|
|
||||||
if (n1 < n0) {
|
|
||||||
col = mix(col, 2.0 * V.yyy, pow(n0, 10.0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ac beat
|
|
||||||
col *= 1.0 + 0.1 * smoothstep(0.4, 0.6, v2random(vec2(0.0, 0.1 * (UV.y + TIME * 0.2)) / 10.0));
|
|
||||||
|
|
||||||
// color noise
|
|
||||||
col *= 1.0 - noise_intensity * 0.5 + noise_intensity * texture(noise_texture, mod(uvn * vec2(1.0, 1.0) + TIME * vec2(5.97, 4.45), vec2(1.0))).xyz;
|
|
||||||
col = clamp(col, 0.0, 1.0);
|
|
||||||
|
|
||||||
// yiq
|
|
||||||
col = rgb2yiq(col);
|
|
||||||
col = vec3(0.9, 1.1, 1.5) * col + vec3(0.1, -0.1, 0.0) * filter_intensity;
|
|
||||||
col = yiq2rgb(col);
|
|
||||||
|
|
||||||
COLOR = vec4(col, 1.0);
|
|
||||||
}
|
|
@ -63,8 +63,7 @@ var _cached_vel: Vector3
|
|||||||
|
|
||||||
func set_ball(ball: GameBall) -> void:
|
func set_ball(ball: GameBall) -> void:
|
||||||
global_position = ball.global_position
|
global_position = ball.global_position
|
||||||
linear_damp = ball.terrain_physics.default.linear_damp
|
linear_damp = ball.linear_damp
|
||||||
print("using linear damp: ", linear_damp)
|
|
||||||
|
|
||||||
|
|
||||||
func _process(_delta: float) -> void:
|
func _process(_delta: float) -> void:
|
||||||
|
@ -31,10 +31,10 @@ func camera_motion(motion: Vector2) -> void:
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
func _physics_process(_delta: float) -> void:
|
func _physics_process(delta: float) -> void:
|
||||||
# Rotation
|
# Rotation
|
||||||
rotation.y = lerp_angle(rotation.y, _target.y, Game.settings.x_acceleration / 60.0)
|
rotation.y = lerp_angle(rotation.y, _target.y, delta * Game.settings.x_acceleration)
|
||||||
rotation.x = lerp_angle(rotation.x, _target.x, Game.settings.y_acceleration / 60.0)
|
rotation.x = lerp_angle(rotation.x, _target.x, delta * Game.settings.y_acceleration)
|
||||||
|
|
||||||
# Handle spatial movement
|
# Handle spatial movement
|
||||||
var xz_input := Input.get_vector("camera_left", "camera_right", "camera_forward", "camera_back")
|
var xz_input := Input.get_vector("camera_left", "camera_right", "camera_forward", "camera_back")
|
||||||
@ -42,7 +42,7 @@ func _physics_process(_delta: float) -> void:
|
|||||||
var direction := (transform.basis * Vector3(xz_input.x, y_input.y, xz_input.y)).normalized()
|
var direction := (transform.basis * Vector3(xz_input.x, y_input.y, xz_input.y)).normalized()
|
||||||
|
|
||||||
var speed := Game.settings.free_camera_speed
|
var speed := Game.settings.free_camera_speed
|
||||||
if Input.is_action_pressed("camera_sprint", true):
|
if Input.is_action_pressed("camera_sprint"):
|
||||||
speed *= SPRINT_MULT
|
speed *= SPRINT_MULT
|
||||||
|
|
||||||
if direction:
|
if direction:
|
||||||
|
@ -1,9 +1,46 @@
|
|||||||
[gd_scene load_steps=3 format=3 uid="uid://dd17ce110sw6p"]
|
[gd_scene load_steps=7 format=3 uid="uid://dd17ce110sw6p"]
|
||||||
|
|
||||||
[ext_resource type="Script" path="res://src/ui/camera/free_camera/free_camera.gd" id="1_3gm3q"]
|
[ext_resource type="Script" path="res://src/ui/camera/free_camera/free_camera.gd" id="1_3gm3q"]
|
||||||
|
[ext_resource type="PackedScene" uid="uid://b47goj32i6sdh" path="res://src/ui/elements/input_prompt/input_prompt.tscn" id="2_6hucw"]
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_wmusx"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_wmusx"]
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_vc2i5"]
|
||||||
|
resource_name = "RESET"
|
||||||
|
length = 0.001
|
||||||
|
tracks/0/type = "bezier"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath(".:offset_bottom")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"handle_modes": PackedInt32Array(0),
|
||||||
|
"points": PackedFloat32Array(0, -0.2, 0, 0.2, 0),
|
||||||
|
"times": PackedFloat32Array(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id="Animation_8gctc"]
|
||||||
|
resource_name = "show"
|
||||||
|
length = 0.4
|
||||||
|
tracks/0/type = "bezier"
|
||||||
|
tracks/0/imported = false
|
||||||
|
tracks/0/enabled = true
|
||||||
|
tracks/0/path = NodePath(".:offset_bottom")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/loop_wrap = true
|
||||||
|
tracks/0/keys = {
|
||||||
|
"handle_modes": PackedInt32Array(0, 0),
|
||||||
|
"points": PackedFloat32Array(0, -0.2, 0, 0.2, 0, 55, -0.2, 0, 0.2, 0),
|
||||||
|
"times": PackedFloat32Array(0, 0.4)
|
||||||
|
}
|
||||||
|
|
||||||
|
[sub_resource type="AnimationLibrary" id="AnimationLibrary_fk25i"]
|
||||||
|
_data = {
|
||||||
|
"RESET": SubResource("Animation_vc2i5"),
|
||||||
|
"show": SubResource("Animation_8gctc")
|
||||||
|
}
|
||||||
|
|
||||||
[node name="FreeCamera" type="CharacterBody3D"]
|
[node name="FreeCamera" type="CharacterBody3D"]
|
||||||
process_mode = 3
|
process_mode = 3
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
@ -16,3 +53,42 @@ shape = SubResource("SphereShape3D_wmusx")
|
|||||||
[node name="Camera3D" type="Camera3D" parent="."]
|
[node name="Camera3D" type="Camera3D" parent="."]
|
||||||
current = true
|
current = true
|
||||||
far = 8192.0
|
far = 8192.0
|
||||||
|
|
||||||
|
[node name="FreeCamHUD" type="Control" parent="."]
|
||||||
|
layout_mode = 3
|
||||||
|
anchors_preset = 15
|
||||||
|
anchor_right = 1.0
|
||||||
|
anchor_bottom = 1.0
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 2
|
||||||
|
|
||||||
|
[node name="UtilityPrompts" type="MarginContainer" parent="FreeCamHUD"]
|
||||||
|
layout_mode = 1
|
||||||
|
anchors_preset = -1
|
||||||
|
anchor_left = 0.5
|
||||||
|
anchor_right = 0.5
|
||||||
|
grow_horizontal = 2
|
||||||
|
grow_vertical = 0
|
||||||
|
theme_override_constants/margin_top = 16
|
||||||
|
theme_override_constants/margin_right = 16
|
||||||
|
|
||||||
|
[node name="HBoxContainer" type="HBoxContainer" parent="FreeCamHUD/UtilityPrompts"]
|
||||||
|
layout_mode = 2
|
||||||
|
theme_override_constants/separation = 64
|
||||||
|
|
||||||
|
[node name="InputPrompt" parent="FreeCamHUD/UtilityPrompts/HBoxContainer" instance=ExtResource("2_6hucw")]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "❓ - ACTION_camera_sprint"
|
||||||
|
action = &"camera_sprint"
|
||||||
|
|
||||||
|
[node name="InputPrompt2" parent="FreeCamHUD/UtilityPrompts/HBoxContainer" instance=ExtResource("2_6hucw")]
|
||||||
|
layout_mode = 2
|
||||||
|
text = "❓ - ACTION_camera_cancel"
|
||||||
|
action = &"camera_cancel"
|
||||||
|
|
||||||
|
[node name="AimEquipPromptAnimation" type="AnimationPlayer" parent="FreeCamHUD/UtilityPrompts"]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
libraries = {
|
||||||
|
"": SubResource("AnimationLibrary_fk25i")
|
||||||
|
}
|
||||||
|
autoplay = "show"
|
||||||
|
@ -3,22 +3,14 @@ extends Label
|
|||||||
## A prompt with the input symbol bound to the given action.
|
## A prompt with the input symbol bound to the given action.
|
||||||
|
|
||||||
const PROMPT_FORMAT := "{0} - {1}"
|
const PROMPT_FORMAT := "{0} - {1}"
|
||||||
const HOLD_FORMAT := "{0} {1}"
|
|
||||||
|
|
||||||
const UNKNOWN_LABEL_SYM := "[unknown]"
|
const UNKNOWN_LABEL_SYM := "[unknown]"
|
||||||
|
|
||||||
const ACTION_HOLD_KEY := "ACTION_HOLD_MODIFIER"
|
|
||||||
|
|
||||||
@export var action: StringName:
|
@export var action: StringName:
|
||||||
set(value):
|
set(value):
|
||||||
action = value
|
action = value
|
||||||
_update()
|
_update()
|
||||||
|
|
||||||
@export var hold := false:
|
|
||||||
set(value):
|
|
||||||
hold = value
|
|
||||||
_update()
|
|
||||||
|
|
||||||
@export var show_name := true:
|
@export var show_name := true:
|
||||||
set(value):
|
set(value):
|
||||||
show_name = value
|
show_name = value
|
||||||
@ -45,19 +37,12 @@ func _update() -> void:
|
|||||||
|
|
||||||
if not input_symbol:
|
if not input_symbol:
|
||||||
input_symbol = str(PromptMap.UNKNOWN_INPUT_SYMBOL)
|
input_symbol = str(PromptMap.UNKNOWN_INPUT_SYMBOL)
|
||||||
|
|
||||||
if hold:
|
|
||||||
input_symbol = HOLD_FORMAT.format([input_symbol, tr(ACTION_HOLD_KEY)])
|
|
||||||
|
|
||||||
if show_name:
|
if show_name:
|
||||||
text = (
|
text = PROMPT_FORMAT.format(
|
||||||
PROMPT_FORMAT
|
|
||||||
. format(
|
|
||||||
[
|
[
|
||||||
input_symbol,
|
input_symbol if input_symbol else str(PromptMap.UNKNOWN_INPUT_SYMBOL),
|
||||||
loc_action if loc_action else str(action),
|
loc_action if loc_action else str(action)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
)
|
|
||||||
else:
|
else:
|
||||||
text = input_symbol
|
text = input_symbol
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user