Compare commits
7 Commits
release/me
...
v0.2.27
| Author | SHA1 | Date | |
|---|---|---|---|
| 759d972b6d | |||
| 4df4585149 | |||
| 88b0911c6c | |||
| 81ce45a0dc | |||
| 1caf202310 | |||
| 22c4301244 | |||
| 032e059826 |
@@ -91,26 +91,26 @@ jobs:
|
||||
${{ steps.setup-godot.outputs.godot_bin }} --headless --verbose --export-release "Windows Desktop" build/windows/${{ env.GAME_NAME }}.exe
|
||||
zip -r Windows.zip build/windows
|
||||
|
||||
- name: Setup Butler
|
||||
shell: bash
|
||||
env:
|
||||
BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
|
||||
run: |
|
||||
mkdir ./tools 2>/dev/null || true
|
||||
pushd tools
|
||||
curl -sSLfo ./butler.zip "https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default"
|
||||
unzip butler.zip
|
||||
chmod +x ./butler
|
||||
popd
|
||||
./tools/butler -V
|
||||
|
||||
- name: Upload to itch.io
|
||||
shell: bash
|
||||
env:
|
||||
BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
|
||||
run: |
|
||||
versionArgument="--userversion ${{ needs.BumpTag.outputs.tag_name }}"
|
||||
./tools/butler push \
|
||||
"Windows.zip" \
|
||||
${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument}
|
||||
# - name: Setup Butler
|
||||
# shell: bash
|
||||
# env:
|
||||
# BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
|
||||
# run: |
|
||||
# mkdir ./tools 2>/dev/null || true
|
||||
# pushd tools
|
||||
# curl -sSLfo ./butler.zip "https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default"
|
||||
# unzip butler.zip
|
||||
# chmod +x ./butler
|
||||
# popd
|
||||
# ./tools/butler -V
|
||||
#
|
||||
# - name: Upload to itch.io
|
||||
# shell: bash
|
||||
# env:
|
||||
# BUTLER_API_KEY: ${{ secrets.BUTLER_TOKEN }}
|
||||
# run: |
|
||||
# versionArgument="--userversion ${{ needs.BumpTag.outputs.tag_name }}"
|
||||
# ./tools/butler push \
|
||||
# "Windows.zip" \
|
||||
# ${{ env.ITCHIO_USERNAME }}/${{ env.ITCHIO_GAMEID }}:windows ${versionArgument}
|
||||
|
||||
|
||||
@@ -13,22 +13,27 @@ public partial class CueHandlerInspectorPlugin : EditorInspectorPlugin
|
||||
public override bool _CanHandle(GodotObject @object)
|
||||
{
|
||||
// Find out if its an implementation of CueHandler without having to add [Tool] attribute to them.
|
||||
if (@object?.GetScript().As<CSharpScript>() is CSharpScript script)
|
||||
try
|
||||
{
|
||||
StringName className = script.GetGlobalName();
|
||||
|
||||
Type baseType = typeof(ForgeCueHandler);
|
||||
System.Reflection.Assembly assembly = baseType.Assembly;
|
||||
|
||||
Type? implementationType =
|
||||
Array.Find(assembly.GetTypes(), x =>
|
||||
x.Name == className &&
|
||||
baseType.IsAssignableFrom(x));
|
||||
|
||||
return implementationType is not null;
|
||||
if (@object.GetScript().As<CSharpScript>() is not { }) return false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
var script = @object.GetScript().As<CSharpScript>();
|
||||
StringName className = script.GetGlobalName();
|
||||
|
||||
Type baseType = typeof(ForgeCueHandler);
|
||||
System.Reflection.Assembly assembly = baseType.Assembly;
|
||||
|
||||
Type? implementationType =
|
||||
Array.Find(assembly.GetTypes(), x =>
|
||||
x.Name == className &&
|
||||
baseType.IsAssignableFrom(x));
|
||||
|
||||
return implementationType is not null;
|
||||
}
|
||||
|
||||
public override bool _ParseProperty(
|
||||
|
||||
@@ -35,6 +35,7 @@
|
||||
[ext_resource type="Resource" uid="uid://spo3pbqjx0eb" path="res://inputs/base_mode/parry.tres" id="30_rvpjj"]
|
||||
[ext_resource type="Resource" uid="uid://dxy0071ic1wdj" path="res://inputs/base_mode/slam.tres" id="32_s8kjn"]
|
||||
[ext_resource type="Resource" uid="uid://s1l0n1iitc6m" path="res://inputs/base_mode/move_back.tres" id="33_fykw6"]
|
||||
[ext_resource type="Script" uid="uid://c76fmncyucwqc" path="res://addons/guide/triggers/guide_trigger_tap.gd" id="34_2ienm"]
|
||||
[ext_resource type="Resource" uid="uid://brswsknpgwal2" path="res://inputs/base_mode/move_front.tres" id="34_rvpjj"]
|
||||
[ext_resource type="Resource" uid="uid://ca68r7n3bwba3" path="res://inputs/base_mode/toolbox.tres" id="34_s8kjn"]
|
||||
[ext_resource type="Resource" uid="uid://f3vs6l4m623s" path="res://inputs/base_mode/move_left.tres" id="35_s8kjn"]
|
||||
@@ -456,17 +457,17 @@ script = ExtResource("1_qmhk6")
|
||||
action = ExtResource("32_s8kjn")
|
||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_v2ywt"), SubResource("Resource_s6d3g")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_s4bc4"]
|
||||
[sub_resource type="Resource" id="Resource_vp8bw"]
|
||||
script = ExtResource("30_cvxqo")
|
||||
key = 4194305
|
||||
|
||||
[sub_resource type="Resource" id="Resource_3exnu"]
|
||||
script = ExtResource("15_fykw6")
|
||||
[sub_resource type="Resource" id="Resource_78qyx"]
|
||||
script = ExtResource("34_2ienm")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_ai85f"]
|
||||
script = ExtResource("3_yp12v")
|
||||
input = SubResource("Resource_s4bc4")
|
||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_3exnu")])
|
||||
input = SubResource("Resource_vp8bw")
|
||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_78qyx")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_jjamb"]
|
||||
script = ExtResource("19_qkgmj")
|
||||
@@ -498,10 +499,22 @@ script = ExtResource("3_yp12v")
|
||||
input = SubResource("Resource_8e1uk")
|
||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_k8i2y")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_qrtf1"]
|
||||
script = ExtResource("30_cvxqo")
|
||||
key = 84
|
||||
|
||||
[sub_resource type="Resource" id="Resource_2ienm"]
|
||||
script = ExtResource("15_fykw6")
|
||||
|
||||
[sub_resource type="Resource" id="Resource_4uwbh"]
|
||||
script = ExtResource("3_yp12v")
|
||||
input = SubResource("Resource_qrtf1")
|
||||
triggers = Array[ExtResource("8_2tfaw")]([SubResource("Resource_2ienm")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_o5fur"]
|
||||
script = ExtResource("1_qmhk6")
|
||||
action = ExtResource("34_s8kjn")
|
||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf")])
|
||||
input_mappings = Array[ExtResource("3_yp12v")]([SubResource("Resource_ilhhf"), SubResource("Resource_4uwbh")])
|
||||
|
||||
[sub_resource type="Resource" id="Resource_kcylj"]
|
||||
script = ExtResource("30_cvxqo")
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
[ext_resource type="Script" uid="uid://rvttn472ix6v" path="res://addons/guide/inputs/guide_input_joy_button.gd" id="4_q6ncx"]
|
||||
[ext_resource type="Script" uid="uid://bl8rjl4oaldje" path="res://addons/guide/modifiers/guide_modifier.gd" id="5_vnf02"]
|
||||
[ext_resource type="Script" uid="uid://x74mnwgr08a7" path="res://addons/guide/triggers/guide_trigger.gd" id="6_c647i"]
|
||||
[ext_resource type="Script" uid="uid://biiggjw6tv4uq" path="res://addons/guide/triggers/guide_trigger_released.gd" id="7_725x1"]
|
||||
[ext_resource type="Script" uid="uid://c76fmncyucwqc" path="res://addons/guide/triggers/guide_trigger_tap.gd" id="7_725x1"]
|
||||
[ext_resource type="Script" uid="uid://b52rqq28tuqpg" path="res://addons/guide/triggers/guide_trigger_pressed.gd" id="7_m88dc"]
|
||||
[ext_resource type="Script" uid="uid://cw71o87tvdx3q" path="res://addons/guide/inputs/guide_input_key.gd" id="8_yfqfy"]
|
||||
[ext_resource type="Resource" uid="uid://ds8quw8a7uh2u" path="res://inputs/menu_mode/select.tres" id="9_dsdj3"]
|
||||
|
||||
@@ -24,9 +24,6 @@ use_collision = true
|
||||
size = Vector3(1, 17.5, 9.5)
|
||||
material = ExtResource("3_1qo78")
|
||||
|
||||
[node name="Player" parent="." index="7" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)
|
||||
|
||||
[node name="GroundedSpawner" parent="." index="8" unique_id=580981173 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 1, -42.5)
|
||||
EnemyToSpawn = ExtResource("5_iq67o")
|
||||
@@ -35,6 +32,7 @@ HealthInputs = ExtResource("7_ucbss")
|
||||
DamageInputs = ExtResource("8_2brdd")
|
||||
Target = NodePath("../Player")
|
||||
SpawnInterval = 5.0
|
||||
IsActiveOnStart = false
|
||||
|
||||
[node name="GroundedSpawner2" parent="." index="9" unique_id=1026317919 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 46.5, 11.5, -34.5)
|
||||
@@ -44,6 +42,7 @@ HealthInputs = ExtResource("7_ucbss")
|
||||
DamageInputs = ExtResource("8_2brdd")
|
||||
Target = NodePath("../Player")
|
||||
SpawnInterval = 5.0
|
||||
IsActiveOnStart = false
|
||||
|
||||
[node name="GroundedSpawner3" parent="." index="10" unique_id=241829575 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 0, -3)
|
||||
@@ -53,6 +52,7 @@ HealthInputs = ExtResource("7_ucbss")
|
||||
DamageInputs = ExtResource("8_2brdd")
|
||||
Target = NodePath("../Player")
|
||||
SpawnInterval = 5.0
|
||||
IsActiveOnStart = false
|
||||
|
||||
[node name="FlyingSpawner" parent="." index="11" unique_id=962840208 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 19, -19.5)
|
||||
@@ -62,6 +62,7 @@ HealthInputs = ExtResource("11_5jlg7")
|
||||
DamageInputs = ExtResource("12_pjgox")
|
||||
Target = NodePath("../Player")
|
||||
SpawnInterval = 5.0
|
||||
IsActiveOnStart = false
|
||||
|
||||
[node name="FlyingSpawner2" parent="." index="12" unique_id=365997644 node_paths=PackedStringArray("Target") instance=ExtResource("4_jaqjx")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 45.5, 25.5, -42.5)
|
||||
@@ -71,6 +72,7 @@ HealthInputs = ExtResource("11_5jlg7")
|
||||
DamageInputs = ExtResource("12_pjgox")
|
||||
Target = NodePath("../Player")
|
||||
SpawnInterval = 5.0
|
||||
IsActiveOnStart = false
|
||||
|
||||
[node name="Targets" type="Node3D" parent="." index="13" unique_id=1620747784]
|
||||
|
||||
@@ -103,3 +105,6 @@ transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 27, 13.5, -9)
|
||||
|
||||
[node name="FixedDashthroughTarget3" parent="Targets" index="9" unique_id=1106453232 instance=ExtResource("13_iq67o")]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 43, 6, -8.5)
|
||||
|
||||
[node name="Player" parent="." index="14" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, 3, 0, 0)
|
||||
|
||||
@@ -20,9 +20,6 @@ size = Vector3(10.5, 12.5, 7.5)
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_hocby"]
|
||||
size = Vector3(3, 12.5, 7.5)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_ovxxa"]
|
||||
size = Vector3(3, 12.5, 6)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_5ibpd"]
|
||||
size = Vector3(3.5, 7, 10.5)
|
||||
|
||||
@@ -37,11 +34,6 @@ size = Vector3(3, 6.5, 5.5)
|
||||
[node name="DirectionalLight3D" parent="." index="5" unique_id=1357990191]
|
||||
transform = Transform3D(-0.1772511, 0.44628847, 0.87715954, 0.49540228, -0.72966087, 0.4713508, 0.85038733, 0.51809436, -0.09175911, 0, 0, 0)
|
||||
|
||||
[node name="Player" parent="." index="6" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
|
||||
HasSword = false
|
||||
HasParry = false
|
||||
|
||||
[node name="Greybox" type="CSGCombiner3D" parent="." index="7" unique_id=2082385716]
|
||||
use_collision = true
|
||||
collision_layer = 256
|
||||
@@ -78,9 +70,9 @@ size = Vector3(38, 16.5, 2)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D10" type="CSGBox3D" parent="Greybox" index="5" unique_id=427936811]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.25, 8.5, -35)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.25, 8.5, -35)
|
||||
use_collision = true
|
||||
size = Vector3(21.5, 17, 2)
|
||||
size = Vector3(19.5, 17, 2)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D3" type="CSGBox3D" parent="Greybox" index="6" unique_id=1254886602]
|
||||
@@ -198,9 +190,9 @@ size = Vector3(6.5, 2.5, 11.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D11" type="CSGBox3D" parent="Greybox" index="15" unique_id=316945013]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.75, 6.5, -35.25)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 6.5, -34)
|
||||
use_collision = true
|
||||
size = Vector3(10.5, 1, 13.5)
|
||||
size = Vector3(11, 1, 16)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D23" type="CSGBox3D" parent="Greybox" index="16" unique_id=1942257779]
|
||||
@@ -222,117 +214,117 @@ size = Vector3(25, 7.5, 41)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D12" type="CSGBox3D" parent="Greybox" index="19" unique_id=1227474775]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 10.25, -37.75)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 10.25, -37.75)
|
||||
use_collision = true
|
||||
size = Vector3(2, 13.5, 7.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox" index="20" unique_id=1383851577]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9.5, 8, -31.5)
|
||||
[node name="CSGBox3D13" type="CSGBox3D" parent="Greybox" index="20" unique_id=110274826]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 9.75, -27.25)
|
||||
use_collision = true
|
||||
size = Vector3(2, 16, 5)
|
||||
material = ExtResource("5_r26ni")
|
||||
|
||||
[node name="CSGBox3D15" type="CSGBox3D" parent="Greybox" index="21" unique_id=238418660]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 8, -31.5)
|
||||
use_collision = true
|
||||
size = Vector3(2, 16, 5)
|
||||
material = ExtResource("5_r26ni")
|
||||
|
||||
[node name="CSGBox3D14" type="CSGBox3D" parent="Greybox" index="22" unique_id=437211444]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 8, -27)
|
||||
use_collision = true
|
||||
size = Vector3(7, 16, 4)
|
||||
size = Vector3(3, 5.5, 4.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D20" type="CSGBox3D" parent="Greybox" index="23" unique_id=1913472587]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -8.5)
|
||||
[node name="CSGBox3D15" type="CSGBox3D" parent="Greybox" index="21" unique_id=2074031011]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 8.25, -28.75)
|
||||
use_collision = true
|
||||
size = Vector3(9, 1, 39)
|
||||
size = Vector3(4, 2.5, 7.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="Greybox" index="24" unique_id=1594042498]
|
||||
[node name="CSGBox3D22" type="CSGBox3D" parent="Greybox" index="22" unique_id=1005993604]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -30)
|
||||
use_collision = true
|
||||
size = Vector3(7, 1, 10)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D14" type="CSGBox3D" parent="Greybox" index="23" unique_id=437211444]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 8, -25.5)
|
||||
use_collision = true
|
||||
size = Vector3(7, 16, 1)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D20" type="CSGBox3D" parent="Greybox" index="24" unique_id=1913472587]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -7)
|
||||
use_collision = true
|
||||
size = Vector3(9, 1, 36)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D30" type="CSGBox3D" parent="Greybox" index="25" unique_id=1594042498]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 16.5, 17.5)
|
||||
use_collision = true
|
||||
size = Vector3(5, 1, 3)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox" index="25" unique_id=157354874]
|
||||
[node name="CSGBox3D54" type="CSGBox3D" parent="Greybox" index="26" unique_id=157354874]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -16, 15.5, 22.5)
|
||||
use_collision = true
|
||||
size = Vector3(5, 7, 3)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox" index="26" unique_id=348698998]
|
||||
[node name="CSGBox3D38" type="CSGBox3D" parent="Greybox" index="27" unique_id=348698998]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -6, 18.5, 17.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 13)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox" index="27" unique_id=850320525]
|
||||
[node name="CSGBox3D39" type="CSGBox3D" parent="Greybox" index="28" unique_id=850320525]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 13.75, 17.5)
|
||||
use_collision = true
|
||||
size = Vector3(7, 10.5, 14)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D60" type="CSGBox3D" parent="Greybox" index="28" unique_id=177087863]
|
||||
[node name="CSGBox3D60" type="CSGBox3D" parent="Greybox" index="29" unique_id=177087863]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -34, 22, 17.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 13)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D61" type="CSGBox3D" parent="Greybox" index="29" unique_id=16972982]
|
||||
[node name="CSGBox3D61" type="CSGBox3D" parent="Greybox" index="30" unique_id=16972982]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -38, 17.25, 14.5)
|
||||
use_collision = true
|
||||
size = Vector3(7, 10.5, 20)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D37" type="CSGBox3D" parent="Greybox" index="30" unique_id=1733162117]
|
||||
[node name="CSGBox3D37" type="CSGBox3D" parent="Greybox" index="31" unique_id=1733162117]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.75, 9.5, 17.75)
|
||||
use_collision = true
|
||||
size = Vector3(22.5, 1, 14.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D56" type="CSGBox3D" parent="Greybox" index="31" unique_id=790895849]
|
||||
[node name="CSGBox3D56" type="CSGBox3D" parent="Greybox" index="32" unique_id=790895849]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.25, 11.5, 17.75)
|
||||
use_collision = true
|
||||
size = Vector3(24.5, 1, 14.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D34" type="CSGBox3D" parent="Greybox" index="32" unique_id=2008368941]
|
||||
[node name="CSGBox3D34" type="CSGBox3D" parent="Greybox" index="33" unique_id=2008368941]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 12.5, 14.75)
|
||||
use_collision = true
|
||||
size = Vector3(6, 7, 8.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox" index="33" unique_id=1975028151]
|
||||
[node name="CSGBox3D43" type="CSGBox3D" parent="Greybox" index="34" unique_id=1975028151]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5.5, 12.5, 17.5)
|
||||
use_collision = true
|
||||
size = Vector3(4, 7, 3)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox" index="34" unique_id=177387693]
|
||||
[node name="CSGBox3D44" type="CSGBox3D" parent="Greybox" index="35" unique_id=177387693]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 10.5, 17.25)
|
||||
use_collision = true
|
||||
size = Vector3(3, 3, 13.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D35" type="CSGBox3D" parent="Greybox" index="35" unique_id=570122850]
|
||||
[node name="CSGBox3D35" type="CSGBox3D" parent="Greybox" index="36" unique_id=570122850]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11, 16.5, 17.25)
|
||||
use_collision = true
|
||||
size = Vector3(5, 1, 13.5)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="Greybox" index="36" unique_id=2094633204]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 16.5, -29.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 9)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D24" type="CSGBox3D" parent="Greybox" index="37" unique_id=761197989]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 18.75, -29.5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8, 14.25, -29.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 5.5, 9)
|
||||
size = Vector3(1, 14.5, 9)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D26" type="CSGBox3D" parent="Greybox" index="38" unique_id=258581541]
|
||||
@@ -504,33 +496,33 @@ size = Vector3(3, 1, 6.5)
|
||||
material = ExtResource("5_u8sr4")
|
||||
|
||||
[node name="CSGBox3D25" type="CSGBox3D" parent="Greybox" index="66" unique_id=1000059913]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16, 18.75, -29.5)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16, 14, -29.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 5.5, 9)
|
||||
size = Vector3(1, 15, 9)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D22" type="CSGBox3D" parent="Greybox" index="67" unique_id=1623594342]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 16.5, -29.5)
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="Greybox" index="67" unique_id=1660129006]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -25.5)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 9)
|
||||
material = ExtResource("2_lpm4c")
|
||||
|
||||
[node name="CSGBox3D16" type="CSGBox3D" parent="Greybox" index="68" unique_id=1660129006]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 16.5, -28.5)
|
||||
use_collision = true
|
||||
size = Vector3(5, 1, 1)
|
||||
size = Vector3(7, 1, 1)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="Greybox" index="69" unique_id=528606233]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 16.5, -31.5)
|
||||
[node name="CSGBox3D18" type="CSGBox3D" parent="Greybox" index="68" unique_id=410504645]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14, 13, -27.75)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 5)
|
||||
size = Vector3(3, 1, 3.5)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="Greybox" index="70" unique_id=533984919]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 16.5, -31.5)
|
||||
[node name="CSGBox3D19" type="CSGBox3D" parent="Greybox" index="69" unique_id=1692291429]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 10, -29.25)
|
||||
use_collision = true
|
||||
size = Vector3(1, 1, 5)
|
||||
size = Vector3(4, 1, 6.5)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D21" type="CSGBox3D" parent="Greybox" index="70" unique_id=16284901]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -35.5)
|
||||
use_collision = true
|
||||
size = Vector3(7, 1, 1)
|
||||
material = ExtResource("3_u8sr4")
|
||||
|
||||
[node name="CSGBox3D36" type="CSGBox3D" parent="Greybox" index="71" unique_id=1460670998]
|
||||
@@ -937,17 +929,7 @@ tuto_text = "Double jump"
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, -1.75)
|
||||
shape = SubResource("BoxShape3D_hocby")
|
||||
|
||||
[node name="TutoTrigger4" parent="Tutorials" index="3" unique_id=903897281 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 7.5, -30.5)
|
||||
first_input_texture = ExtResource("8_6c6r2")
|
||||
complex_input_text = "against wall"
|
||||
tuto_text = "Wall jump"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorials/TutoTrigger4" index="1" unique_id=1224334781]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.25, -1)
|
||||
shape = SubResource("BoxShape3D_ovxxa")
|
||||
|
||||
[node name="TutoTrigger5" parent="Tutorials" index="4" unique_id=1703929757 instance=ExtResource("7_r26ni")]
|
||||
[node name="TutoTrigger5" parent="Tutorials" index="3" unique_id=1703929757 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.5, 18.5, -30.5)
|
||||
first_input_texture = ExtResource("9_v7818")
|
||||
complex_input_text = "with speed"
|
||||
@@ -957,7 +939,7 @@ tuto_text = "Slide"
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.75, 0.5, 12.25)
|
||||
shape = SubResource("BoxShape3D_5ibpd")
|
||||
|
||||
[node name="TutoTrigger6" parent="Tutorials" index="5" unique_id=1739438130 instance=ExtResource("7_r26ni")]
|
||||
[node name="TutoTrigger6" parent="Tutorials" index="4" unique_id=1739438130 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 19, 19)
|
||||
first_input_texture = ExtResource("8_6c6r2")
|
||||
complex_input_text = "double tap during mantle"
|
||||
@@ -967,7 +949,7 @@ tuto_text = "Improved jump"
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3.5, 0.25, -1.5)
|
||||
shape = SubResource("BoxShape3D_6rkcg")
|
||||
|
||||
[node name="TutoTrigger7" parent="Tutorials" index="6" unique_id=1993844947 instance=ExtResource("7_r26ni")]
|
||||
[node name="TutoTrigger7" parent="Tutorials" index="5" unique_id=1993844947 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -17.5, 21, 24)
|
||||
first_input_texture = ExtResource("8_6c6r2")
|
||||
complex_input_text = "double tap during mantle"
|
||||
@@ -977,7 +959,7 @@ tuto_text = "Try to wall run"
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.25, 0.25, -1.5)
|
||||
shape = SubResource("BoxShape3D_6rkcg")
|
||||
|
||||
[node name="TutoTrigger8" parent="Tutorials" index="7" unique_id=540710346 instance=ExtResource("7_r26ni")]
|
||||
[node name="TutoTrigger8" parent="Tutorials" index="6" unique_id=540710346 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, 10)
|
||||
first_input_texture = ExtResource("10_hocby")
|
||||
tuto_text = "dash"
|
||||
@@ -986,7 +968,7 @@ tuto_text = "dash"
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75)
|
||||
shape = SubResource("BoxShape3D_p8dgc")
|
||||
|
||||
[node name="TutoTrigger9" parent="Tutorials" index="8" unique_id=2062889854 instance=ExtResource("7_r26ni")]
|
||||
[node name="TutoTrigger9" parent="Tutorials" index="7" unique_id=2062889854 instance=ExtResource("7_r26ni")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -37, 25, -6)
|
||||
first_input_texture = ExtResource("10_hocby")
|
||||
tuto_text = "dash"
|
||||
@@ -994,3 +976,8 @@ tuto_text = "dash"
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorials/TutoTrigger9" index="1" unique_id=192598019]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.25, -3.75)
|
||||
shape = SubResource("BoxShape3D_p8dgc")
|
||||
|
||||
[node name="Player" parent="." index="11" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0.4102497, 0.5415039)
|
||||
HasSword = false
|
||||
HasParry = false
|
||||
|
||||
@@ -61,16 +61,13 @@ size = Vector3(5, 2.25, 3.75)
|
||||
size = Vector3(5.5, 4.5, 2)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_prjj8"]
|
||||
size = Vector3(2, 3.25, 1.25)
|
||||
size = Vector3(2, 3.25, 5.25)
|
||||
|
||||
[sub_resource type="BoxShape3D" id="BoxShape3D_1opdv"]
|
||||
size = Vector3(8.25, 3.25, 2.75)
|
||||
|
||||
[node name="Main" unique_id=955321579 instance=ExtResource("1_8n6bu")]
|
||||
|
||||
[node name="Player" parent="." index="6" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
|
||||
|
||||
[node name="Playground" type="Node3D" parent="." index="7" unique_id=2099606598]
|
||||
transform = Transform3D(-4.371139e-08, 0, -1, 0, 1, 0, 1, 0, -4.371139e-08, -8.25, 13, 58.5)
|
||||
|
||||
@@ -429,7 +426,7 @@ second_input_texture = ExtResource("13_nwk5u")
|
||||
tuto_text = "throw weapon"
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="Tutorial/Triggers/TutoTrigger7" index="1" unique_id=1932556219]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.875, 3.75)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.875, 4)
|
||||
shape = SubResource("BoxShape3D_prjj8")
|
||||
|
||||
[node name="TutoTrigger8" parent="Tutorial/Triggers" index="7" unique_id=36196488 instance=ExtResource("10_dkfm7")]
|
||||
@@ -620,9 +617,9 @@ size = Vector3(5, 1, 11)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D141" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="29" unique_id=1207463075]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 68.625)
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 21.487345, 70.125)
|
||||
use_collision = true
|
||||
size = Vector3(5, 1, 3.25)
|
||||
size = Vector3(5, 1, 6.25)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D121" type="CSGBox3D" parent="Tutorial/DashWithMantle" index="30" unique_id=302433684]
|
||||
@@ -721,26 +718,38 @@ use_collision = true
|
||||
size = Vector3(9, 5.5, 2)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="20" unique_id=1950738925]
|
||||
[node name="CSGBox3D123" type="CSGBox3D" parent="Tutorial" index="20" unique_id=765166179]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 0.625, 6)
|
||||
use_collision = true
|
||||
size = Vector3(9, 2.25, 2)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D118" type="CSGBox3D" parent="Tutorial" index="21" unique_id=1950738925]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -7.75, -10)
|
||||
use_collision = true
|
||||
size = Vector3(9, 2.5, 2)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="21" unique_id=1024529143]
|
||||
[node name="CSGBox3D120" type="CSGBox3D" parent="Tutorial" index="22" unique_id=1024529143]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, -21.75, -11.75)
|
||||
use_collision = true
|
||||
size = Vector3(9, 25.5, 37.5)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="22" unique_id=1261455320]
|
||||
[node name="CSGBox3D122" type="CSGBox3D" parent="Tutorial" index="23" unique_id=1261455320]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -15.5, 16.5, -28.5)
|
||||
use_collision = true
|
||||
size = Vector3(3, 1, 4)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="CSGBox3D143" type="CSGBox3D" parent="Tutorial" index="23" unique_id=1090375546]
|
||||
[node name="CSGBox3D143" type="CSGBox3D" parent="Tutorial" index="24" unique_id=1090375546]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 27.625, 34)
|
||||
use_collision = true
|
||||
size = Vector3(2, 3.25, 1)
|
||||
material = ExtResource("3_wsc2c")
|
||||
|
||||
[node name="Player" parent="." index="9" unique_id=1309399929]
|
||||
transform = Transform3D(0.99999994, 0, 0, 0, 1, 0, 0, 0, 0.99999994, -0.5, 0, 0)
|
||||
|
||||
[node name="PlayerFellRespawn" parent="." index="10" unique_id=479136076]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.5, 1.5, 0)
|
||||
|
||||
@@ -159,8 +159,9 @@ WallHugDownwardMaxSpeed = 4.0
|
||||
WallHugHorizontalDeceleration = 1.0
|
||||
WallRunUpwardVelocityFactor = 0.5
|
||||
MinimumWallRunUpwardSpeed = 4.0
|
||||
MinimumWallRunHorizontalSpeed = 8.0
|
||||
WallRunAltitudeLossSpeed = 8.0
|
||||
WallRunSpeedThreshold = 2.0
|
||||
WallRunSpeedThreshold = 1.0
|
||||
|
||||
[node name="CHealth" parent="." unique_id=1244478698 instance=ExtResource("3_q7bng")]
|
||||
RHealth = ExtResource("4_m8gvy")
|
||||
@@ -1119,8 +1120,8 @@ delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=342055859]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../Jump/SimpleJump")
|
||||
event = &"jump"
|
||||
to = NodePath("../../Jump/DoubleJump")
|
||||
event = &"wall_jump"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnDash" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=43147957]
|
||||
@@ -1156,6 +1157,12 @@ script = ExtResource("27_34snm")
|
||||
[node name="Running" type="Node" parent="StateChart/Root/Movement/OnWall" unique_id=766545186]
|
||||
script = ExtResource("27_34snm")
|
||||
|
||||
[node name="OnJump" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=1699673966]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../../Jump/SimpleJump")
|
||||
event = &"wall_jump"
|
||||
delay_in_seconds = "0.0"
|
||||
|
||||
[node name="OnLeaveWall" type="Node" parent="StateChart/Root/Movement/OnWall/Running" unique_id=73239479]
|
||||
script = ExtResource("28_n7qhm")
|
||||
to = NodePath("../../../Airborne/CoyoteEnabled")
|
||||
|
||||
@@ -245,7 +245,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
public float MinimumWallRunHorizontalSpeed { get; set; } = 12f;
|
||||
[Export(PropertyHint.Range, "1,20,0.1,or_greater")]
|
||||
public float WallRunAltitudeLossSpeed { get; set; } = 10f;
|
||||
[Export(PropertyHint.Range, "1,20,0.1,or_greater")]
|
||||
[Export(PropertyHint.Range, "0,20,0.1,or_greater")]
|
||||
public float WallRunSpeedThreshold { get; set; } = 8f;
|
||||
|
||||
///////////////////////////
|
||||
@@ -360,6 +360,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
|
||||
private Transition _onJumpFromWall;
|
||||
private Transition _onJumpFromWallFalling;
|
||||
private Transition _onJumpFromWallRunning;
|
||||
private Transition _onLeaveWallFromRun;
|
||||
private Transition _onAirborneToGrounded;
|
||||
|
||||
@@ -502,6 +503,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
_mantling = StateChartState.Of(GetNode("StateChart/Root/Movement/Mantling"));
|
||||
_onJumpFromWall = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/OnJump"));
|
||||
_onJumpFromWallFalling = Transition.Of(GetNode("StateChart/Root/Movement/Airborne/Falling/OnWallJump"));
|
||||
_onJumpFromWallRunning = Transition.Of(GetNode("StateChart/Root/Movement/OnWall/Running/OnJump"));
|
||||
_onWall = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall"));
|
||||
_onWallHugging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hugging"));
|
||||
_onWallHanging = StateChartState.Of(GetNode("StateChart/Root/Movement/OnWall/Hanging"));
|
||||
@@ -629,6 +631,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
|
||||
_onJumpFromWall.Taken += OnJumpFromWall;
|
||||
_onJumpFromWallFalling.Taken += OnJumpFromWall;
|
||||
_onJumpFromWallRunning.Taken += OnJumpFromWall;
|
||||
_onLeaveWallFromRun.Taken += OnLeaveWallFromRun;
|
||||
_onAirborneToGrounded.Taken += OnAirborneToGrounded;
|
||||
|
||||
@@ -869,16 +872,16 @@ public partial class PlayerController : CharacterBody3D,
|
||||
_playerState.SendEvent("grounded");
|
||||
|
||||
if (IsTryingToMantle()) _playerState.SendEvent("mantle");
|
||||
|
||||
|
||||
if (!WallHugSystem.IsWallHugging())
|
||||
{
|
||||
_isWallJumpAvailable = true; // reset wall jump if we left the wall
|
||||
return;
|
||||
}
|
||||
|
||||
// Going upwards, we stay simply airborne
|
||||
if (Velocity.AngleTo(Vector3.Up) < Math.PI / 4)
|
||||
return;
|
||||
// // Going upwards, we stay simply airborne
|
||||
// if (Velocity.AngleTo(Vector3.Up) < Math.PI / 4)
|
||||
// return;
|
||||
|
||||
// Should we start a wall run
|
||||
if (ShouldStartWallRun())
|
||||
@@ -1188,15 +1191,19 @@ public partial class PlayerController : CharacterBody3D,
|
||||
}
|
||||
public void OnWallDetected()
|
||||
{
|
||||
if (!_onWall.Active)
|
||||
return;
|
||||
// if (!_onWall.Active)
|
||||
// return;
|
||||
|
||||
var newWallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Up);
|
||||
if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4) return;
|
||||
if (newWallNormal.AngleTo(_wallHugStartNormal) > Mathf.Pi/4 && _onWall.Active) return;
|
||||
_wallHugStartNormal = newWallNormal;
|
||||
}
|
||||
|
||||
|
||||
private float _timeOnWall;
|
||||
public void OnWallStarted()
|
||||
{
|
||||
_timeOnWall = 0f;
|
||||
if (_simpleDashCooldownTimer.IsStopped())
|
||||
_canDash = true;
|
||||
else
|
||||
@@ -1212,6 +1219,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
}
|
||||
public void OnWallStopped()
|
||||
{
|
||||
_timeOnWall = 0f;
|
||||
}
|
||||
public void OnLeaveWallFromRun()
|
||||
{
|
||||
@@ -1221,16 +1229,20 @@ public partial class PlayerController : CharacterBody3D,
|
||||
{
|
||||
// _canDash = true;
|
||||
// _canDashAirborne = true;
|
||||
_timeOnWall += delta;
|
||||
|
||||
WallHug(delta);
|
||||
if (ShouldStartWallRun())
|
||||
{
|
||||
_playerState.SendEvent("wall_run");
|
||||
return;
|
||||
}
|
||||
if (IsInputTowardsWall(_wallHugStartNormal))
|
||||
WallHug(delta);
|
||||
else
|
||||
MoveInAir(delta, IsGroundLike());
|
||||
// if (ShouldStartWallRun())
|
||||
// {
|
||||
// _playerState.SendEvent("wall_run");
|
||||
// return;
|
||||
// }
|
||||
if (isOnFloorCustom())
|
||||
_playerState.SendEvent("grounded");
|
||||
if (!WallHugSystem.IsWallHugging() || !IsInputTowardsWall(_wallHugStartNormal))
|
||||
if (!WallHugSystem.IsWallHugging())
|
||||
_playerState.SendEvent("start_falling");
|
||||
}
|
||||
public void HandleWallHanging(float delta)
|
||||
@@ -1252,6 +1264,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
{
|
||||
// _canDash = false;
|
||||
// _canDashAirborne = false;
|
||||
_timeOnWall += delta;
|
||||
|
||||
// Find horizontal velocity projected on the current wall
|
||||
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
|
||||
@@ -1263,7 +1276,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
// Adapt vertical speed
|
||||
var verticalSpeed = Velocity.Y - WallRunAltitudeLossSpeed * delta;
|
||||
Velocity = finalHVel + Vector3.Up*verticalSpeed;
|
||||
// Velocity *= 0.999f;
|
||||
Velocity *= 0.999f;
|
||||
|
||||
_currentWallContactPoint = WallHugSystem.WallHugLocation.UnwrapOr(Vector3.Zero);
|
||||
|
||||
@@ -1273,7 +1286,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
_playerState.SendEvent("grounded");
|
||||
if (!WallHugSystem.IsWallHugging())
|
||||
_playerState.SendEvent("start_falling");
|
||||
if (Velocity.Length() < WallRunSpeedThreshold / 2f)
|
||||
if (!CanKeepWallRun())
|
||||
_playerState.SendEvent("wall_hug");
|
||||
}
|
||||
|
||||
@@ -1286,27 +1299,88 @@ public partial class PlayerController : CharacterBody3D,
|
||||
|
||||
public bool ShouldStartWallRun()
|
||||
{
|
||||
var wallNormal = WallHugSystem.WallHugNormal.UnwrapOr(Vector3.Zero);
|
||||
var isIndeedWall = wallNormal.Y < 0.1;
|
||||
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon;
|
||||
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
|
||||
var hvelProjected = Velocity.Slide(_wallHugStartNormal);
|
||||
var haveEnoughSpeed = hvelProjected.Length() > WallRunSpeedThreshold;
|
||||
var isCoplanarEnough = Math.Abs(Velocity.Dot(wallNormal)) < 0.3;
|
||||
var isGoingDownwards = Velocity.Dot(Vector3.Down) > 0.9;
|
||||
var isLookingInDirectionOfRun = true; // hvelProjected.Dot(-HeadSystem.GetForwardHorizontalVector()) > 0.5;
|
||||
var shouldStart = haveEnoughSpeed && isThereInput && !isGoingDownwards && isIndeedWall && isCoplanarEnough && isLookingInDirectionOfRun;
|
||||
|
||||
var debugText = "--------------\n";
|
||||
debugText += shouldStart ? "WALL RUN STARTED\n" : "NO WALL RUN\n";
|
||||
debugText += $"Enough speed? {haveEnoughSpeed}\n";
|
||||
debugText += $"Coplanar enough? {isCoplanarEnough}\n";
|
||||
debugText += $"Going downwards? {isGoingDownwards}\n";
|
||||
debugText += $"Is looking in direction of run? {isLookingInDirectionOfRun}\n";
|
||||
debugText += "--------------\n";
|
||||
GD.Print(debugText);
|
||||
if (_wallHugStartNormal.Length() < Mathf.Epsilon)
|
||||
{
|
||||
// GD.Print("No wall normal");
|
||||
return false;
|
||||
}
|
||||
|
||||
return shouldStart;
|
||||
var isIndeedWall = _wallHugStartNormal.Y < 0.1;
|
||||
if (!isIndeedWall)
|
||||
{
|
||||
// GD.Print("Not a wall");
|
||||
return false;
|
||||
}
|
||||
|
||||
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon;
|
||||
if (!isThereInput)
|
||||
{
|
||||
// GD.Print("No input");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!IsInputForwardOrTowardsWall())
|
||||
{
|
||||
// GD.Print("Input isn't forward or towards wall");
|
||||
return false;
|
||||
}
|
||||
|
||||
var canUseVelocity = Velocity.Length() > WallRunSpeedThreshold;
|
||||
if (!canUseVelocity)
|
||||
{
|
||||
// GD.Print("Not enough speed");
|
||||
return false;
|
||||
}
|
||||
|
||||
var hvel = new Vector3(Velocity.X, 0, Velocity.Z);
|
||||
var hvelProjected = hvel.Slide(_wallHugStartNormal);
|
||||
var haveEnoughSpeed = hvelProjected.Length() > WallRunSpeedThreshold;
|
||||
if (!haveEnoughSpeed)
|
||||
{
|
||||
// GD.Print("Not enough projected speed");
|
||||
return false;
|
||||
}
|
||||
|
||||
var isCoplanarEnough = Math.Abs(Velocity.Normalized().Dot(_wallHugStartNormal)) < 0.9;
|
||||
if (!isCoplanarEnough)
|
||||
{
|
||||
// GD.Print("Not coplanar enough");
|
||||
return false;
|
||||
}
|
||||
|
||||
var isGoingDownwards = Velocity.Normalized().Dot(Vector3.Down) > 0.7;
|
||||
if (isGoingDownwards)
|
||||
{
|
||||
// GD.Print("Going down");
|
||||
return false;
|
||||
}
|
||||
|
||||
var isLookingInDirectionOfRun = hvelProjected.Normalized().Dot(-HeadSystem.GetForwardHorizontalVector()) > 0.5;
|
||||
if (!isLookingInDirectionOfRun)
|
||||
{
|
||||
// GD.Print("Not looking in direction of run");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsInputForwardOrTowardsWall()
|
||||
{
|
||||
return IsPlayerInputtingForward() || IsInputTowardsWall(_wallHugStartNormal);
|
||||
}
|
||||
|
||||
public bool CanKeepWallRun()
|
||||
{
|
||||
var isThereInput = GetMoveInput().Length() > Mathf.Epsilon;
|
||||
if (!isThereInput) return false;
|
||||
|
||||
if (!IsInputForwardOrTowardsWall()) return false;
|
||||
|
||||
var haveEnoughSpeed = Velocity.Length() > WallRunSpeedThreshold;
|
||||
if (!haveEnoughSpeed) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public void WallHug(float delta)
|
||||
@@ -1319,6 +1393,7 @@ public partial class PlayerController : CharacterBody3D,
|
||||
}
|
||||
public void WallHang(float delta)
|
||||
{
|
||||
_timeOnWall += 1; // Consider we've already spent quite some time on wall
|
||||
Velocity = Vector3.Zero;
|
||||
GlobalPosition = _wallHugStartLocation;
|
||||
}
|
||||
@@ -1365,11 +1440,15 @@ public partial class PlayerController : CharacterBody3D,
|
||||
_playerState.SendEvent("mantle");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (WallHugSystem.IsWallHugging())
|
||||
if (_onWall.Active) // Always allow jumping out of wall run and hang
|
||||
{
|
||||
_playerState.SendEvent("wall_jump");
|
||||
return;
|
||||
}
|
||||
|
||||
// Regular jump
|
||||
_playerState.SendEvent("jump");
|
||||
}
|
||||
|
||||
@@ -1465,13 +1544,13 @@ public partial class PlayerController : CharacterBody3D,
|
||||
|
||||
SetHorizontalVelocity(currentHorizontalVelocity + wallJumpHorizontalVelocity);
|
||||
}
|
||||
|
||||
public void OnJumpFromWall()
|
||||
{
|
||||
if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall()))
|
||||
{
|
||||
if (!IsFacingWall() || (!_isWallJumpAvailable && IsFacingWall()) || _onWallRunning.Active)
|
||||
ComputeJumpFromWallHSpeed(WallJumpStartVelocity);
|
||||
}
|
||||
|
||||
// OnJumpStarted(DoubleJumpStartVelocity);
|
||||
// Remove the ability to dash straight away so you cannot scale up the wall
|
||||
// _canDashAirborne = false;
|
||||
_airborneDashCooldownTimer.Start();
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
extends Area3D
|
||||
class_name TutoTrigger
|
||||
|
||||
@onready var control: Control = $Control
|
||||
|
||||
|
||||
Reference in New Issue
Block a user