新视角下角色钩锁修正
This commit is contained in:
parent
ed424fc250
commit
fd64d64adf
|
Before Width: | Height: | Size: 78 KiB After Width: | Height: | Size: 78 KiB |
|
|
@ -3,15 +3,15 @@
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://ntm66vo10u2q"
|
uid="uid://ntm66vo10u2q"
|
||||||
path="res://.godot/imported/tile.png-7448e5d2fb0210684de3a0324519aaf4.ctex"
|
path="res://.godot/imported/tile.png-289c3a7c75eaae83df78711948565daf.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://_asset/ksw/tile.png"
|
source_file="res://_asset/ksw/tile/tile.png"
|
||||||
dest_files=["res://.godot/imported/tile.png-7448e5d2fb0210684de3a0324519aaf4.ctex"]
|
dest_files=["res://.godot/imported/tile.png-289c3a7c75eaae83df78711948565daf.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
|
@ -3,15 +3,15 @@
|
||||||
importer="texture"
|
importer="texture"
|
||||||
type="CompressedTexture2D"
|
type="CompressedTexture2D"
|
||||||
uid="uid://cchtbbig85jcm"
|
uid="uid://cchtbbig85jcm"
|
||||||
path="res://.godot/imported/tile02.png-520f52959c7a0ed7245207d133347d95.ctex"
|
path="res://.godot/imported/tile02.png-e8381a8c1a148c3eb8ce3bc8009de863.ctex"
|
||||||
metadata={
|
metadata={
|
||||||
"vram_texture": false
|
"vram_texture": false
|
||||||
}
|
}
|
||||||
|
|
||||||
[deps]
|
[deps]
|
||||||
|
|
||||||
source_file="res://_asset/ksw/tile02.png"
|
source_file="res://_asset/ksw/tile/tile02.png"
|
||||||
dest_files=["res://.godot/imported/tile02.png-520f52959c7a0ed7245207d133347d95.ctex"]
|
dest_files=["res://.godot/imported/tile02.png-e8381a8c1a148c3eb8ce3bc8009de863.ctex"]
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 78 KiB |
|
|
@ -1,40 +0,0 @@
|
||||||
[remap]
|
|
||||||
|
|
||||||
importer="texture"
|
|
||||||
type="CompressedTexture2D"
|
|
||||||
uid="uid://dnrvktjrinxon"
|
|
||||||
path="res://.godot/imported/pure_color_tile.png-2b37f3adadaf3d4a746ba81fc564d09f.ctex"
|
|
||||||
metadata={
|
|
||||||
"vram_texture": false
|
|
||||||
}
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://_asset/tile/pure_color_tile.png"
|
|
||||||
dest_files=["res://.godot/imported/pure_color_tile.png-2b37f3adadaf3d4a746ba81fc564d09f.ctex"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
||||||
compress/mode=0
|
|
||||||
compress/high_quality=false
|
|
||||||
compress/lossy_quality=0.7
|
|
||||||
compress/uastc_level=0
|
|
||||||
compress/rdo_quality_loss=0.0
|
|
||||||
compress/hdr_compression=1
|
|
||||||
compress/normal_map=0
|
|
||||||
compress/channel_pack=0
|
|
||||||
mipmaps/generate=false
|
|
||||||
mipmaps/limit=-1
|
|
||||||
roughness/mode=0
|
|
||||||
roughness/src_normal=""
|
|
||||||
process/channel_remap/red=0
|
|
||||||
process/channel_remap/green=1
|
|
||||||
process/channel_remap/blue=2
|
|
||||||
process/channel_remap/alpha=3
|
|
||||||
process/fix_alpha_border=true
|
|
||||||
process/premult_alpha=false
|
|
||||||
process/normal_map_invert_y=false
|
|
||||||
process/hdr_as_srgb=false
|
|
||||||
process/hdr_clamp_exposure=false
|
|
||||||
process/size_limit=0
|
|
||||||
detect_3d/compress_to=1
|
|
||||||
|
|
@ -163,22 +163,31 @@ unique_name_in_owner = true
|
||||||
script = ExtResource("2_11vl8")
|
script = ExtResource("2_11vl8")
|
||||||
dash_speed = 400.0
|
dash_speed = 400.0
|
||||||
end_dash_speed = 190.0
|
end_dash_speed = 190.0
|
||||||
climb_hop_velocity_x = 180.0
|
climb_max_speed_upward = 450.0
|
||||||
climb_hop_velocity_y = 334.0
|
climb_max_speed_downward = 800.0
|
||||||
|
climb_acceleration = 3000.0
|
||||||
|
climb_hop_velocity_x = 1400.0
|
||||||
|
climb_hop_velocity_y = 2600.0
|
||||||
|
climb_jump_velocity_x = 1800.0
|
||||||
|
climb_jump_velocity_y = 3300.0
|
||||||
|
custom_move_force = 10000.0
|
||||||
|
custom_move_max_speed = 4500.0
|
||||||
|
custom_move_stop_distance = 40.0
|
||||||
jump_force = 5800.0
|
jump_force = 5800.0
|
||||||
jump_hold_maxium_time = 0.125
|
jump_hold_maxium_time = 0.125
|
||||||
jump_horizontal_Boost = 5600.0
|
jump_horizontal_Boost = 5600.0
|
||||||
jump_countinus_horizontal_Boost = 4000.0
|
jump_countinus_horizontal_Boost = 4000.0
|
||||||
jump_horizontal_Boost_last_time = 0.12
|
jump_horizontal_Boost_last_time = 0.12
|
||||||
max_jump_horizontal_boost_speed = 3600.0
|
max_jump_horizontal_boost_speed = 3600.0
|
||||||
light_gravity_threshold = 135.0
|
light_gravity_threshold = 1200.0
|
||||||
light_gravity_mult = 0.6
|
light_gravity_mult = 0.6
|
||||||
wall_jump_base_force_x = 260.0
|
wall_slide_fall_maxium_speed = 5000.0
|
||||||
wall_jump_base_force_y = 220.0
|
wall_jump_base_force_x = 2800.0
|
||||||
|
wall_jump_base_force_y = 1600.0
|
||||||
fall_maxium_speed = 8000.0
|
fall_maxium_speed = 8000.0
|
||||||
air_control_mult = 0.55
|
air_control_mult = 0.55
|
||||||
run_accel = 5800.0
|
run_accel = 15000.0
|
||||||
run_reduce = 7900.0
|
run_reduce = 20000.0
|
||||||
move_speed_max = 2650.0
|
move_speed_max = 2650.0
|
||||||
|
|
||||||
[node name="WallDetector" parent="LocomotionComponent" instance=ExtResource("20_air0b")]
|
[node name="WallDetector" parent="LocomotionComponent" instance=ExtResource("20_air0b")]
|
||||||
|
|
|
||||||
|
|
@ -67,11 +67,11 @@ func _draw() -> void:
|
||||||
var a_x: float = clampf(abs(velocity.x),1,2000) * .3 * sign(locomotion_comp._current_acceleration.x)
|
var a_x: float = clampf(abs(velocity.x),1,2000) * .3 * sign(locomotion_comp._current_acceleration.x)
|
||||||
var a_y: float = clampf(abs(velocity.x),1,2000) * .3 * sign(locomotion_comp._current_acceleration.y)
|
var a_y: float = clampf(abs(velocity.x),1,2000) * .3 * sign(locomotion_comp._current_acceleration.y)
|
||||||
|
|
||||||
draw_line(Vector2.ZERO,Vector2(x, 0),Color.RED,4)
|
draw_line(Vector2.ZERO,Vector2(x, 0),Color.RED,40)
|
||||||
draw_line(Vector2.ZERO,Vector2(0, y),Color.GREEN,4)
|
draw_line(Vector2.ZERO,Vector2(0, y),Color.GREEN,40)
|
||||||
|
|
||||||
draw_line(Vector2.ZERO,Vector2(a_x, 0),Color.YELLOW,2)
|
draw_line(Vector2.ZERO,Vector2(a_x, 0),Color.YELLOW,20)
|
||||||
draw_line(Vector2.ZERO,Vector2(0, a_y),Color.PURPLE,2)
|
draw_line(Vector2.ZERO,Vector2(0, a_y),Color.PURPLE,20)
|
||||||
|
|
||||||
func _process(delta: float) -> void:
|
func _process(delta: float) -> void:
|
||||||
queue_redraw()
|
queue_redraw()
|
||||||
|
|
|
||||||
|
|
@ -1,89 +1,167 @@
|
||||||
[gd_resource type="TileSet" load_steps=5 format=3 uid="uid://bt25n4i5s2bkj"]
|
[gd_resource type="TileSet" load_steps=5 format=3 uid="uid://bt25n4i5s2bkj"]
|
||||||
|
|
||||||
[ext_resource type="Texture2D" uid="uid://ntm66vo10u2q" path="res://_asset/ksw/tile.png" id="1_jwfln"]
|
[ext_resource type="Texture2D" uid="uid://ntm66vo10u2q" path="res://_asset/ksw/tile/tile.png" id="1_jwfln"]
|
||||||
[ext_resource type="Texture2D" uid="uid://cchtbbig85jcm" path="res://_asset/ksw/tile02.png" id="2_5i20m"]
|
[ext_resource type="Texture2D" uid="uid://cchtbbig85jcm" path="res://_asset/ksw/tile/tile02.png" id="2_5i20m"]
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_i03by"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_i03by"]
|
||||||
texture = ExtResource("1_jwfln")
|
texture = ExtResource("1_jwfln")
|
||||||
texture_region_size = Vector2i(128, 128)
|
texture_region_size = Vector2i(128, 128)
|
||||||
1:1/0 = 0
|
1:1/0 = 0
|
||||||
|
1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 64, -48, 64, 48, 48, 48, 48, 64, -48, 64)
|
||||||
2:1/0 = 0
|
2:1/0 = 0
|
||||||
|
2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 64, -48, 64, 48, -64, 48)
|
||||||
3:1/0 = 0
|
3:1/0 = 0
|
||||||
|
3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 48, -48, 48, 64, -48, 64, -48, 48, -64, 48)
|
||||||
3:2/0 = 0
|
3:2/0 = 0
|
||||||
|
3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -64, 48, -64, 48, 64, -48, 64)
|
||||||
3:3/0 = 0
|
3:3/0 = 0
|
||||||
|
3:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -64, 48, -64, 48, 48, -64, 48, -64, -48, -48, -48)
|
||||||
2:3/0 = 0
|
2:3/0 = 0
|
||||||
|
2:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(64, -48, 64, 48, -64, 48, -64, -48)
|
||||||
1:3/0 = 0
|
1:3/0 = 0
|
||||||
|
1:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(64, -48, 64, 48, -48, 48, -48, -64, 48, -64, 48, -48)
|
||||||
1:2/0 = 0
|
1:2/0 = 0
|
||||||
|
1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -64, 48, -64, 48, 64)
|
||||||
6:1/0 = 0
|
6:1/0 = 0
|
||||||
|
6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 64, -48, 64, 64, -64, 64)
|
||||||
5:2/0 = 0
|
5:2/0 = 0
|
||||||
|
5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -64, 64, -64, 64, 64, -48, 64)
|
||||||
5:1/0 = 0
|
5:1/0 = 0
|
||||||
|
5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 64, -48, 64, 64, -48, 64)
|
||||||
6:2/0 = 0
|
6:2/0 = 0
|
||||||
|
6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 64, -64, 64, 64, -64, 64)
|
||||||
6:3/0 = 0
|
6:3/0 = 0
|
||||||
|
6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 64, -64, 64, 48, -64, 48)
|
||||||
5:3/0 = 0
|
5:3/0 = 0
|
||||||
|
5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -64, 64, -64, 64, 48, -48, 48)
|
||||||
7:3/0 = 0
|
7:3/0 = 0
|
||||||
|
7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 48, -64, 48, 48, -64, 48)
|
||||||
7:2/0 = 0
|
7:2/0 = 0
|
||||||
|
7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 48, -64, 48, 64, -64, 64)
|
||||||
7:1/0 = 0
|
7:1/0 = 0
|
||||||
|
7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 48, -48, 48, 64, -64, 64)
|
||||||
9:1/0 = 0
|
9:1/0 = 0
|
||||||
|
9:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 48, -48, 48, 48, -48, 48)
|
||||||
11:1/0 = 0
|
11:1/0 = 0
|
||||||
|
11:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 64, -48, 64, 48, -48, 48)
|
||||||
12:1/0 = 0
|
12:1/0 = 0
|
||||||
|
12:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 64, -48, 64, 48, -64, 48)
|
||||||
13:1/0 = 0
|
13:1/0 = 0
|
||||||
|
13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -48, 48, -48, 48, 48, -64, 48)
|
||||||
9:3/0 = 0
|
9:3/0 = 0
|
||||||
|
9:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 48, -48, 48, 64)
|
||||||
9:4/0 = 0
|
9:4/0 = 0
|
||||||
|
9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -64, 48, -64, 48, 64)
|
||||||
9:5/0 = 0
|
9:5/0 = 0
|
||||||
|
9:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 48, -64, 48, 48)
|
||||||
1:4/0 = 0
|
1:4/0 = 0
|
||||||
|
1:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -48, 64, -48, 64, 48)
|
||||||
2:4/0 = 0
|
2:4/0 = 0
|
||||||
|
2:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -64, 48, -64, -48, 64, -48, 64, 48, 48, 48, 48, 64, -48, 64)
|
||||||
3:4/0 = 0
|
3:4/0 = 0
|
||||||
|
3:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 48, -64, -48, 48, -48, 48, 48)
|
||||||
2:5/0 = 0
|
2:5/0 = 0
|
||||||
|
2:5/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 48, -64, 48, 48)
|
||||||
2:6/0 = 0
|
2:6/0 = 0
|
||||||
|
2:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 48, -48, 48, 64)
|
||||||
2:7/0 = 0
|
2:7/0 = 0
|
||||||
|
2:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 48, -64, -48, -48, -48, -48, -64, 48, -64, 48, -48, 64, -48, 64, 48)
|
||||||
1:7/0 = 0
|
1:7/0 = 0
|
||||||
|
1:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -48, 64, -48, 64, 48)
|
||||||
3:7/0 = 0
|
3:7/0 = 0
|
||||||
|
3:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 48, -64, -48, 48, -48, 48, 48)
|
||||||
1:8/0 = 0
|
1:8/0 = 0
|
||||||
|
1:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 48, -48, 48, 64)
|
||||||
1:9/0 = 0
|
1:9/0 = 0
|
||||||
|
1:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -64, 48, -64, 48, -48, 64, -48, 64, 48, 48, 48, 48, 64)
|
||||||
1:10/0 = 0
|
1:10/0 = 0
|
||||||
|
1:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 48, -64, 48, 48)
|
||||||
2:9/0 = 0
|
2:9/0 = 0
|
||||||
|
2:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 48, -64, -48, 48, -48, 48, 48)
|
||||||
3:9/0 = 0
|
3:9/0 = 0
|
||||||
|
3:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -48, 64, -48, 64, 48)
|
||||||
4:8/0 = 0
|
4:8/0 = 0
|
||||||
|
4:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 48, -48, 48, 64)
|
||||||
4:9/0 = 0
|
4:9/0 = 0
|
||||||
|
4:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, 48, -64, 48, -64, -48, -48, -48, -48, -64, 48, -64, 48, 64)
|
||||||
4:10/0 = 0
|
4:10/0 = 0
|
||||||
|
4:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 48, -64, 48, 48)
|
||||||
5:8/0 = 0
|
5:8/0 = 0
|
||||||
|
5:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 48, -64, 48, 48)
|
||||||
5:7/0 = 0
|
5:7/0 = 0
|
||||||
|
5:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 64, -48, 64, 48, 48, 48, 48, 64)
|
||||||
6:7/0 = 0
|
6:7/0 = 0
|
||||||
|
6:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 48, -64, -48, 48, -48, 48, 48)
|
||||||
8:7/0 = 0
|
8:7/0 = 0
|
||||||
|
8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -48, 64, -48, 64, 48)
|
||||||
9:7/0 = 0
|
9:7/0 = 0
|
||||||
|
9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -64, 48, -64, -48, 48, -48, 48, 64, -48, 64)
|
||||||
9:8/0 = 0
|
9:8/0 = 0
|
||||||
|
9:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -64, 48, -64, 48, 48, -48, 48)
|
||||||
7:8/0 = 0
|
7:8/0 = 0
|
||||||
|
7:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 48, -48, 48, 64, -48, 64)
|
||||||
7:9/0 = 0
|
7:9/0 = 0
|
||||||
|
7:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, -48, -64, 48, -64, 48, -48, 64, -48, 64, 48, 47.33333, 48, 48, 64, -48, 64, -48, 48, -64, 48, -64, -48)
|
||||||
6:9/0 = 0
|
6:9/0 = 0
|
||||||
|
6:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, -48, 64, -48, 64, 48, -48, 48)
|
||||||
8:9/0 = 0
|
8:9/0 = 0
|
||||||
|
8:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, -48, 47.33333, 48, -64, 48, -64, -48)
|
||||||
7:10/0 = 0
|
7:10/0 = 0
|
||||||
|
7:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, -64, 47.33333, 48, -48, 48, -48, -64)
|
||||||
5:10/0 = 0
|
5:10/0 = 0
|
||||||
|
5:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, -48, 48, 64, -48, 64, -48, -48)
|
||||||
6:11/0 = 0
|
6:11/0 = 0
|
||||||
|
6:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, 48, -64, 48, -64, -48, 48, -48)
|
||||||
8:11/0 = 0
|
8:11/0 = 0
|
||||||
|
8:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(64, 48, -48, 48, -48, -48, 64, -48)
|
||||||
5:11/0 = 0
|
5:11/0 = 0
|
||||||
|
5:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, -48, 64, -48, 64, 48, -48, 48, -48, -64, 48, -64)
|
||||||
9:11/0 = 0
|
9:11/0 = 0
|
||||||
|
9:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, 48, -64, 48, -64, -48, -48, -48, -48, -64, 48, -64)
|
||||||
9:10/0 = 0
|
9:10/0 = 0
|
||||||
|
9:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(48, 64, -48, 64, -48, -48, 48, -48)
|
||||||
11:9/0 = 0
|
11:9/0 = 0
|
||||||
|
11:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -64, 64, -64, 64, 64)
|
||||||
11:8/0 = 0
|
11:8/0 = 0
|
||||||
|
11:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 64, -48, 64, 64)
|
||||||
11:10/0 = 0
|
11:10/0 = 0
|
||||||
|
11:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 64, -64, 64, 48)
|
||||||
12:9/0 = 0
|
12:9/0 = 0
|
||||||
|
12:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 64, -64, 64, 64)
|
||||||
12:8/0 = 0
|
12:8/0 = 0
|
||||||
|
12:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -48, -48, -48, -48, -64, 64, -64, 64, 64)
|
||||||
12:7/0 = 0
|
12:7/0 = 0
|
||||||
|
12:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 64, -48, -48, 64, -48, 64, 64)
|
||||||
13:7/0 = 0
|
13:7/0 = 0
|
||||||
|
13:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -48, 64, -48, 64, 64)
|
||||||
14:7/0 = 0
|
14:7/0 = 0
|
||||||
|
14:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -48, 48, -48, 48, 64)
|
||||||
13:8/0 = 0
|
13:8/0 = 0
|
||||||
|
13:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 64, -64, 64, 64)
|
||||||
13:9/0 = 0
|
13:9/0 = 0
|
||||||
|
13:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 64, -64, 64, 64)
|
||||||
13:10/0 = 0
|
13:10/0 = 0
|
||||||
|
13:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 64, -64, 64, 64)
|
||||||
13:11/0 = 0
|
13:11/0 = 0
|
||||||
|
13:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 64, -64, 64, 48, -64, 48)
|
||||||
12:10/0 = 0
|
12:10/0 = 0
|
||||||
|
12:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -64, 48, -64, -64, 64, -64, 64, 64, -48, 64)
|
||||||
12:11/0 = 0
|
12:11/0 = 0
|
||||||
|
12:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-48, 48, -48, -64, 64, -64, 64, 48)
|
||||||
14:8/0 = 0
|
14:8/0 = 0
|
||||||
|
14:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 48, -64, 48, -48, 64, -48, 64, 64)
|
||||||
14:9/0 = 0
|
14:9/0 = 0
|
||||||
|
14:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 64, -64, 64, 64)
|
||||||
14:10/0 = 0
|
14:10/0 = 0
|
||||||
|
14:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 64, -64, 64, 48, 48, 48, 48, 64, -64, 64)
|
||||||
14:11/0 = 0
|
14:11/0 = 0
|
||||||
|
14:11/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 48, -64, 48, 48, -64, 48)
|
||||||
15:9/0 = 0
|
15:9/0 = 0
|
||||||
|
15:9/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -64, 48, -64, 48, 64)
|
||||||
15:10/0 = 0
|
15:10/0 = 0
|
||||||
|
15:10/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, -64, 48, -64, 48, 48, -64, 48)
|
||||||
15:8/0 = 0
|
15:8/0 = 0
|
||||||
|
15:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-64, 64, -64, -48, 48, -48, 48, 64)
|
||||||
|
|
||||||
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ekrk0"]
|
[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_ekrk0"]
|
||||||
texture = ExtResource("2_5i20m")
|
texture = ExtResource("2_5i20m")
|
||||||
|
|
@ -163,5 +241,5 @@ texture_region_size = Vector2i(128, 128)
|
||||||
tile_size = Vector2i(128, 128)
|
tile_size = Vector2i(128, 128)
|
||||||
physics_layer_0/collision_layer = 4
|
physics_layer_0/collision_layer = 4
|
||||||
physics_layer_0/collision_mask = 0
|
physics_layer_0/collision_mask = 0
|
||||||
sources/2 = SubResource("TileSetAtlasSource_i03by")
|
|
||||||
sources/3 = SubResource("TileSetAtlasSource_ekrk0")
|
sources/3 = SubResource("TileSetAtlasSource_ekrk0")
|
||||||
|
sources/2 = SubResource("TileSetAtlasSource_i03by")
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,30 @@
|
||||||
[gd_scene load_steps=3 format=3 uid="uid://ddwoxlqluxiq5"]
|
[gd_scene load_steps=4 format=3 uid="uid://ddwoxlqluxiq5"]
|
||||||
|
|
||||||
[ext_resource type="Script" uid="uid://bvxgviq7l64ck" path="res://addons/reedcomponent/grap_hook/garpping_hook_v_2.gd" id="1_jrg4x"]
|
[ext_resource type="Script" uid="uid://bvxgviq7l64ck" path="res://addons/reedcomponent/grap_hook/garpping_hook_v_2.gd" id="1_jrg4x"]
|
||||||
|
|
||||||
|
[sub_resource type="CircleShape2D" id="CircleShape2D_2bmkq"]
|
||||||
|
|
||||||
[sub_resource type="CircleShape2D" id="CircleShape2D_jrg4x"]
|
[sub_resource type="CircleShape2D" id="CircleShape2D_jrg4x"]
|
||||||
radius = 5.0990195
|
radius = 5.0990195
|
||||||
|
|
||||||
[node name="GarppingHookV2" type="Node2D"]
|
[node name="GarppingHookV2" type="Node2D"]
|
||||||
script = ExtResource("1_jrg4x")
|
script = ExtResource("1_jrg4x")
|
||||||
|
min_length = 900.0
|
||||||
|
max_length = 1200.0
|
||||||
|
stretching_speed = 5000.0
|
||||||
|
max_speed = 5600.0
|
||||||
|
retract_speed = 7000.0
|
||||||
|
|
||||||
[node name="Line2D" type="Line2D" parent="."]
|
[node name="Line2D" type="Line2D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
points = PackedVector2Array(0, 0, 80, 0)
|
points = PackedVector2Array(0, 0, 80, 0)
|
||||||
width = 8.0
|
width = 50.0
|
||||||
|
|
||||||
|
[node name="ShapeCast2D" type="ShapeCast2D" parent="."]
|
||||||
|
unique_name_in_owner = true
|
||||||
|
shape = SubResource("CircleShape2D_2bmkq")
|
||||||
|
target_position = Vector2(80, 0)
|
||||||
|
collision_mask = 20
|
||||||
|
|
||||||
[node name="RayCast2D" type="RayCast2D" parent="."]
|
[node name="RayCast2D" type="RayCast2D" parent="."]
|
||||||
unique_name_in_owner = true
|
unique_name_in_owner = true
|
||||||
|
|
|
||||||
|
|
@ -1,20 +1,27 @@
|
||||||
class_name Hook
|
class_name Hook
|
||||||
extends Node2D
|
extends Node2D
|
||||||
|
|
||||||
|
@onready var line_2d: Line2D = %Line2D
|
||||||
|
@onready var shape_cast_2d: ShapeCast2D = %ShapeCast2D
|
||||||
|
@onready var tip_detector: Area2D = $TipDetector
|
||||||
## ================
|
## ================
|
||||||
## Export Field
|
## Export Field
|
||||||
## ================
|
## ================
|
||||||
|
##钩爪最短长度
|
||||||
@export var min_length := 140.0
|
@export var min_length := 140.0
|
||||||
|
##钩爪最大长度
|
||||||
@export var max_length := 200.0
|
@export var max_length := 200.0
|
||||||
|
##钩爪伸出速度
|
||||||
@export var stretching_speed: float = 1400.0
|
@export var stretching_speed: float = 1400.0
|
||||||
|
## 最大速度上限
|
||||||
|
@export var max_speed: float = 800.0
|
||||||
|
|
||||||
@export_category("Hook Retract")
|
@export_category("Hook Retract")
|
||||||
@export var retract_speed: float = 1800.0
|
@export var retract_speed: float = 1800.0
|
||||||
|
|
||||||
@onready var line_2d: Line2D = %Line2D
|
|
||||||
@onready var ray: RayCast2D = %RayCast2D
|
|
||||||
@onready var tip_detector: Area2D = $TipDetector
|
|
||||||
|
|
||||||
|
## 钩爪当前速度
|
||||||
|
var _current_velocity: Vector2 = Vector2.ZERO
|
||||||
var _tween: Tween
|
var _tween: Tween
|
||||||
|
|
||||||
const GRAPABLE_GROUP = &"GRAPABLE"
|
const GRAPABLE_GROUP = &"GRAPABLE"
|
||||||
|
|
@ -40,8 +47,8 @@ var _dir_id: int = -1
|
||||||
# =================
|
# =================
|
||||||
|
|
||||||
func _ready() -> void:
|
func _ready() -> void:
|
||||||
ray.enabled = true
|
shape_cast_2d.enabled = true
|
||||||
ray.target_position = Vector2.ZERO
|
shape_cast_2d.target_position = Vector2.ZERO
|
||||||
|
|
||||||
## 初始化
|
## 初始化
|
||||||
func init(hook_comp: SpawnHookComponet, reset_to_target: bool) -> void:
|
func init(hook_comp: SpawnHookComponet, reset_to_target: bool) -> void:
|
||||||
|
|
@ -100,10 +107,6 @@ func _process(_delta: float) -> void:
|
||||||
# Core Logic
|
# Core Logic
|
||||||
# =================
|
# =================
|
||||||
|
|
||||||
## 钩爪当前速度
|
|
||||||
var _current_velocity: Vector2 = Vector2.ZERO
|
|
||||||
## 最大速度上限
|
|
||||||
@export var max_speed: float = 800.0
|
|
||||||
|
|
||||||
func _update_stretching(delta: float) -> void:
|
func _update_stretching(delta: float) -> void:
|
||||||
# 检测前端点的吸引力 (direction, strength)
|
# 检测前端点的吸引力 (direction, strength)
|
||||||
|
|
@ -134,17 +137,17 @@ func _update_stretching(delta: float) -> void:
|
||||||
|
|
||||||
tip_detector.global_position = predicted_pos
|
tip_detector.global_position = predicted_pos
|
||||||
|
|
||||||
# RayCast 也应该射到“累计长度”
|
# ShapeCast2D 也应该射到"累计长度"
|
||||||
ray.target_position = velocity_dir * next_length
|
shape_cast_2d.target_position = velocity_dir * next_length
|
||||||
ray.force_raycast_update()
|
shape_cast_2d.force_shapecast_update()
|
||||||
|
|
||||||
# ===== 命中檢測(最高優先)=====
|
# ===== 命中檢測(最高優先)=====
|
||||||
if ray.is_colliding():
|
if shape_cast_2d.is_colliding():
|
||||||
var collider := ray.get_collider()
|
var collider := shape_cast_2d.get_collider(0)
|
||||||
if collider is Node2D and collider.is_in_group(GRAPABLE_GROUP):
|
if collider is Node2D and collider.is_in_group(GRAPABLE_GROUP):
|
||||||
var hit_pos := ray.get_collision_point()
|
var hit_pos := shape_cast_2d.get_collision_point(0)
|
||||||
_current_length = global_position.distance_to(hit_pos)
|
_current_length = global_position.distance_to(hit_pos)
|
||||||
ray.target_position = velocity_dir * _current_length
|
shape_cast_2d.target_position = velocity_dir * _current_length
|
||||||
_handle_hit(collider as Node2D, hit_pos)
|
_handle_hit(collider as Node2D, hit_pos)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -190,7 +193,7 @@ func _handle_hit(target: Node2D, hit_pos: Vector2) -> void:
|
||||||
_stretching_dir = Vector2.ZERO
|
_stretching_dir = Vector2.ZERO
|
||||||
_current_velocity = Vector2.ZERO # 重置速度
|
_current_velocity = Vector2.ZERO # 重置速度
|
||||||
|
|
||||||
ray.target_position = to_local(hit_pos)
|
shape_cast_2d.target_position = to_local(hit_pos)
|
||||||
|
|
||||||
# 如果 target 有 on_hook_hit 方法,调用它(传入钩爪实例)
|
# 如果 target 有 on_hook_hit 方法,调用它(传入钩爪实例)
|
||||||
if target.has_method(&"on_hook_hit"):
|
if target.has_method(&"on_hook_hit"):
|
||||||
|
|
@ -218,8 +221,8 @@ func _release_hook() -> void:
|
||||||
_anchor.queue_free()
|
_anchor.queue_free()
|
||||||
_anchor = null
|
_anchor = null
|
||||||
|
|
||||||
# 3. 重置 Ray 與 Line(視覺清乾淨)
|
# 3. 重置 ShapeCast2D 與 Line(視覺清乾淨)
|
||||||
ray.target_position = Vector2.ZERO
|
shape_cast_2d.target_position = Vector2.ZERO
|
||||||
_update_line()
|
_update_line()
|
||||||
|
|
||||||
func release_hook_with_transition(has_trans: bool) -> void:
|
func release_hook_with_transition(has_trans: bool) -> void:
|
||||||
|
|
@ -242,7 +245,7 @@ func release_hook_with_transition(has_trans: bool) -> void:
|
||||||
_anchor = null
|
_anchor = null
|
||||||
|
|
||||||
# 当前末端位置(本地坐标)
|
# 当前末端位置(本地坐标)
|
||||||
var start_pos: Vector2 = ray.target_position
|
var start_pos: Vector2 = shape_cast_2d.target_position
|
||||||
var distance := start_pos.length()
|
var distance := start_pos.length()
|
||||||
|
|
||||||
if distance <= 0.001:
|
if distance <= 0.001:
|
||||||
|
|
@ -260,7 +263,7 @@ func release_hook_with_transition(has_trans: bool) -> void:
|
||||||
_tween.set_ease(Tween.EASE_IN)
|
_tween.set_ease(Tween.EASE_IN)
|
||||||
|
|
||||||
_tween.tween_property(
|
_tween.tween_property(
|
||||||
ray,
|
shape_cast_2d,
|
||||||
"target_position",
|
"target_position",
|
||||||
Vector2.ZERO,
|
Vector2.ZERO,
|
||||||
duration
|
duration
|
||||||
|
|
@ -273,9 +276,9 @@ func release_hook_with_transition(has_trans: bool) -> void:
|
||||||
func _update_line() -> void:
|
func _update_line() -> void:
|
||||||
if _anchor and is_instance_valid(_anchor):
|
if _anchor and is_instance_valid(_anchor):
|
||||||
# 关键:锚点是世界坐标固定的,把它换算到 Hook 的本地坐标
|
# 关键:锚点是世界坐标固定的,把它换算到 Hook 的本地坐标
|
||||||
ray.target_position = to_local(_anchor.global_position)
|
shape_cast_2d.target_position = to_local(_anchor.global_position)
|
||||||
|
|
||||||
line_2d.set_point_position(1, ray.target_position)
|
line_2d.set_point_position(1, shape_cast_2d.target_position)
|
||||||
|
|
||||||
func _create_anchor_on_node(target: Node2D, hit_global_pos: Vector2) -> Node2D:
|
func _create_anchor_on_node(target: Node2D, hit_global_pos: Vector2) -> Node2D:
|
||||||
if _anchor and is_instance_valid(_anchor):
|
if _anchor and is_instance_valid(_anchor):
|
||||||
|
|
|
||||||
|
|
@ -35,6 +35,8 @@ const FALL_SPEED_EXCEED_TOLERANCE_THRESHOLD = 40
|
||||||
|
|
||||||
@export_category("Locomotion Properties")
|
@export_category("Locomotion Properties")
|
||||||
@export_subgroup("Move")
|
@export_subgroup("Move")
|
||||||
|
##如果为true,则使用加速度逐渐达到目标速度;如果为false,则直接设置速度
|
||||||
|
@export var use_acceleration: bool = true
|
||||||
##存在輸入時,向最大移動輸入運動的加速度
|
##存在輸入時,向最大移動輸入運動的加速度
|
||||||
@export var run_accel : float = 1200
|
@export var run_accel : float = 1200
|
||||||
##不存在輸入時,向Vector.ZERO運動的加速度
|
##不存在輸入時,向Vector.ZERO運動的加速度
|
||||||
|
|
@ -125,11 +127,15 @@ func _update_movement(delta : float) -> void:
|
||||||
var applyed_air_control = 1 if characterbody.is_on_floor() else air_control_mult
|
var applyed_air_control = 1 if characterbody.is_on_floor() else air_control_mult
|
||||||
var target_move_speed = move_speed_max * input_dir
|
var target_move_speed = move_speed_max * input_dir
|
||||||
|
|
||||||
|
if use_acceleration:
|
||||||
characterbody.velocity.x = speed_approach(
|
characterbody.velocity.x = speed_approach(
|
||||||
characterbody.velocity.x,
|
characterbody.velocity.x,
|
||||||
target_move_speed,
|
target_move_speed,
|
||||||
applyed_air_control * accel * delta
|
applyed_air_control * accel * delta
|
||||||
)
|
)
|
||||||
|
else:
|
||||||
|
# 直接设置速度,无加速度
|
||||||
|
characterbody.velocity.x = target_move_speed
|
||||||
|
|
||||||
#检测是否这帧开始了移动
|
#检测是否这帧开始了移动
|
||||||
_check_is_start_move()
|
_check_is_start_move()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue