胖子游戏怪物砍刀
This commit is contained in:
parent
3bed2fc3a4
commit
e36c8671e2
@ -4827,7 +4827,7 @@ animations = [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("1043_e3b0h")
|
||||
}],
|
||||
"loop": true,
|
||||
"loop": false,
|
||||
"name": &"c03_胖子游戏_胖子对半砍",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
@ -58,6 +58,8 @@ const CANVAS_LAYER_SHADING = 10
|
||||
const CANVAS_LAYER_LITTLE_GAME = 5
|
||||
# 前景层
|
||||
const CANVAS_LAYER_FG = 2
|
||||
# 背景兜底层
|
||||
const CANVAS_LAYER_BG_BOTTOM = -100
|
||||
|
||||
const DIALOG_IGNORE_INPUT = "ignore_input"
|
||||
# memory layer: 30
|
||||
|
@ -23,7 +23,7 @@ signal animation_finished
|
||||
@export var lock_move_right := false
|
||||
@export var reenter_lock: PlayerReenterLock
|
||||
@export var camera_marker: CameraFocusMarker
|
||||
@export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "吕萍拉大柜子", "小小蝶", "盒子猫", "小小小蝶") var character := "吕萍":
|
||||
@export_enum("吕萍", "吕萍爬行", "吕萍带小猫", "吕萍推柜子", "吕萍拉大柜子", "小小蝶", "盒子猫", "胖子游戏", "小小小蝶") var character := "吕萍":
|
||||
set(val):
|
||||
character = val
|
||||
if is_node_ready():
|
||||
|
@ -206,7 +206,7 @@ var ANIMATION_CONFIG = {
|
||||
MOVEMENT_RUNNING: [&"", &"c03_胖子游戏_瘦子跑"],
|
||||
5: [&"c03_胖子游戏_掉下来", Vector2.ONE, Vector2(0, -51.0)],
|
||||
6: [&"c03_胖子游戏_洞里爬出来", Vector2.ONE, Vector2(-70, -44.5)],
|
||||
7: [&"c03_胖子游戏_胖子对半砍", Vector2.ONE, Vector2(-70, -44.5)],
|
||||
7: [&"c03_胖子游戏_胖子对半砍", Vector2.ONE, Vector2(0, -51.0)],
|
||||
},
|
||||
"小小小蝶":
|
||||
{
|
||||
|
@ -63,6 +63,7 @@ const GROUND_SCENE_PATH_DICT: Dictionary[String, Dictionary] = {
|
||||
@export var force_archive_portal := ""
|
||||
|
||||
# Nodes
|
||||
@onready var bg_layer := $BGLayer as CanvasLayer
|
||||
@onready var mask_layer := %MaskLayer as CanvasLayer
|
||||
@onready var mask := %Mask as ColorRect
|
||||
|
||||
@ -89,7 +90,7 @@ var last_modify_time := 0
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
_setup_mask_layer()
|
||||
_setup_layer()
|
||||
if not ignore_archive:
|
||||
_load_save()
|
||||
if current_scene and entrance_portal:
|
||||
@ -97,10 +98,11 @@ func _ready() -> void:
|
||||
transition_to_scene(current_scene, entrance_portal)
|
||||
|
||||
|
||||
func _setup_mask_layer() -> void:
|
||||
func _setup_layer() -> void:
|
||||
mask.visible = true
|
||||
mask.color.a = 0.0
|
||||
mask_layer.layer = GlobalConfig.CANVAS_LAYER_GROUND_MASK
|
||||
bg_layer.layer = GlobalConfig.CANVAS_LAYER_BG_BOTTOM
|
||||
|
||||
|
||||
func _load_save() -> void:
|
||||
|
@ -7,7 +7,7 @@ script = ExtResource("1_6mjre")
|
||||
current_scene = "c01_s05"
|
||||
|
||||
[node name="BGLayer" type="CanvasLayer" parent="."]
|
||||
layer = -1
|
||||
layer = -100
|
||||
|
||||
[node name="BGColorRect" type="ColorRect" parent="BGLayer"]
|
||||
z_index = -10
|
||||
|
@ -14,19 +14,31 @@ func _ready() -> void:
|
||||
|
||||
|
||||
#region node_reference
|
||||
var monster: Node2D
|
||||
var monster_target: Node2D
|
||||
#endregion
|
||||
|
||||
|
||||
# 读取设置变量名
|
||||
func _setup_node_reference() -> void:
|
||||
pass
|
||||
monster = $"../CanvasLayer/胖子游戏棺材怪"
|
||||
monster_target = $"../DeployLayer/MonsterMoveTarget"
|
||||
|
||||
|
||||
func _on_ground_ready() -> void:
|
||||
_check_first_enter()
|
||||
var right_x = SceneManager.get_player().player_movement_rect.size.x
|
||||
var right_x = SceneManager.get_player().player_movement_rect.size.x
|
||||
SceneManager.get_camera_marker().limit_right = int(right_x) + 50
|
||||
|
||||
await Util.wait(2.0)
|
||||
monster.chop_left(1.0)
|
||||
await Util.wait(4.0)
|
||||
monster.chop_left(1.0)
|
||||
await Util.wait(4.0)
|
||||
monster.chop_left(1.0)
|
||||
await Util.wait(4.0)
|
||||
monster.chop_right(1.0)
|
||||
|
||||
|
||||
func _check_first_enter() -> void:
|
||||
if not data["has_entered"]:
|
||||
@ -36,6 +48,6 @@ func _check_first_enter() -> void:
|
||||
await SceneManager.get_player().animation_finished
|
||||
SceneManager.unlock_player()
|
||||
|
||||
|
||||
# 0:初始化; 1:砍字; 2:隐藏_定点砍; 3:显现_动态砍; 4:隐藏_追踪砍;
|
||||
var current_stage := 0
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
[gd_scene load_steps=29 format=3 uid="uid://clgwc3jcqarpe"]
|
||||
[gd_scene load_steps=30 format=3 uid="uid://clgwc3jcqarpe"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_0c2p2"]
|
||||
[ext_resource type="Script" uid="uid://cs4ddcjq81c1d" path="res://scene/ground/scene/c03/s10_胖子游戏1.gd" id="2_tthij"]
|
||||
@ -28,6 +28,14 @@
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_k01ve"]
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_2wy2j"]
|
||||
radius = 20.0
|
||||
height = 300.0
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_whxhi"]
|
||||
radius = 15.0
|
||||
height = 293.0
|
||||
|
||||
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_f57cq"]
|
||||
playback_mode = 1
|
||||
random_pitch = 1.1
|
||||
@ -38,9 +46,6 @@ stream_1/stream = ExtResource("10_js8ld")
|
||||
stream_2/stream = ExtResource("10_js8ld")
|
||||
stream_3/stream = ExtResource("10_js8ld")
|
||||
|
||||
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_2wy2j"]
|
||||
height = 300.0
|
||||
|
||||
[node name="S10" type="Node2D"]
|
||||
metadata/_edit_horizontal_guides_ = [98.0, 120.0]
|
||||
|
||||
@ -71,126 +76,11 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m"
|
||||
light_mask = 5
|
||||
offset = Vector2(0, -158)
|
||||
|
||||
[node name="ParallaxBackground" type="ParallaxBackground" parent="Ground/BGSprite2D" index="0"]
|
||||
layer = -1
|
||||
|
||||
[node name="底图" type="ParallaxLayer" parent="Ground/BGSprite2D/ParallaxBackground"]
|
||||
z_index = -10
|
||||
motion_scale = Vector2(0.3, 1)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/底图"]
|
||||
texture = ExtResource("5_a608f")
|
||||
|
||||
[node name="后山" type="ParallaxLayer" parent="Ground/BGSprite2D/ParallaxBackground"]
|
||||
z_index = -10
|
||||
motion_scale = Vector2(0.5, 1)
|
||||
motion_mirroring = Vector2(1134, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/后山"]
|
||||
texture = ExtResource("6_x0t6p")
|
||||
|
||||
[node name="前山" type="ParallaxLayer" parent="Ground/BGSprite2D/ParallaxBackground"]
|
||||
z_index = -10
|
||||
position = Vector2(0, 16)
|
||||
motion_scale = Vector2(0.8, 1)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/前山"]
|
||||
texture = ExtResource("7_8s7iq")
|
||||
|
||||
[node name="地面" type="ParallaxLayer" parent="Ground/BGSprite2D/ParallaxBackground"]
|
||||
position = Vector2(0, 101)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="地面" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
texture = ExtResource("8_2van8")
|
||||
|
||||
[node name="遮罩" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
modulate = Color(0.14902, 0.14902, 0.14902, 0.533333)
|
||||
position = Vector2(0, -101)
|
||||
texture = ExtResource("9_podki")
|
||||
|
||||
[node name="肉1" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
position = Vector2(-143, -48)
|
||||
texture = ExtResource("10_pr5np")
|
||||
|
||||
[node name="肉2" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
position = Vector2(0, -49)
|
||||
texture = ExtResource("11_3wrhx")
|
||||
|
||||
[node name="肉3" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
position = Vector2(449, -57)
|
||||
texture = ExtResource("12_jcaoy")
|
||||
|
||||
[node name="肉4" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
position = Vector2(153, -46)
|
||||
texture = ExtResource("13_8ancs")
|
||||
|
||||
[node name="肉5" type="Sprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面"]
|
||||
position = Vector2(724, -47)
|
||||
texture = ExtResource("14_bm1fy")
|
||||
|
||||
[node name="胖子游戏棺材怪" type="AnimatedSprite2D" parent="Ground/BGSprite2D/ParallaxBackground/地面" node_paths=PackedStringArray("move_target", "left_side_sprite", "right_side_sprite", "left_area", "right_area")]
|
||||
z_index = 10
|
||||
position = Vector2(1015, -138)
|
||||
sprite_frames = ExtResource("16_f57cq")
|
||||
animation = &"棺材怪移动"
|
||||
script = ExtResource("9_js8ld")
|
||||
move_target = NodePath("../../../../DeployLayer/MonsterMoveTarget")
|
||||
left_side_sprite = NodePath("../../../../DeployLayer/左侧")
|
||||
right_side_sprite = NodePath("../../../../DeployLayer/右侧")
|
||||
left_area = NodePath("../../../../DeployLayer/左侧/手拿刀")
|
||||
right_area = NodePath("../../../../DeployLayer/右侧/手拿刀2")
|
||||
|
||||
[node name="Sfx2D棺材怪脚步声" type="AudioStreamPlayer2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
stream = SubResource("AudioStreamRandomizer_f57cq")
|
||||
max_distance = 500.0
|
||||
bus = &"game_sfx"
|
||||
script = ExtResource("10_f57cq")
|
||||
loop = true
|
||||
loop_round_time = 0.4
|
||||
metadata/_custom_type_script = "uid://wapo47a1oddf"
|
||||
|
||||
[node name="Sfx2D棺材怪切刀" type="AudioStreamPlayer2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
stream = ExtResource("12_whxhi")
|
||||
max_distance = 1000.0
|
||||
bus = &"game_sfx"
|
||||
script = ExtResource("10_f57cq")
|
||||
metadata/_custom_type_script = "uid://wapo47a1oddf"
|
||||
|
||||
[node name="身子" type="RemoteTransform2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
position = Vector2(-22, -49)
|
||||
remote_path = NodePath("../../../../../DeployLayer/左侧/手拿刀")
|
||||
update_rotation = false
|
||||
|
||||
[node name="左侧" type="RemoteTransform2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
position = Vector2(-308, -300)
|
||||
remote_path = NodePath("../../../../../DeployLayer/左侧")
|
||||
update_rotation = false
|
||||
|
||||
[node name="右侧" type="RemoteTransform2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
position = Vector2(268, -300)
|
||||
remote_path = NodePath("../../../../../DeployLayer/右侧")
|
||||
update_rotation = false
|
||||
|
||||
[node name="左落点" type="RemoteTransform2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
position = Vector2(-308, 128)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
remote_path = NodePath("../../../../../DeployLayer/落点左")
|
||||
update_rotation = false
|
||||
|
||||
[node name="右落点" type="RemoteTransform2D" parent="Ground/BGSprite2D/ParallaxBackground/地面/胖子游戏棺材怪"]
|
||||
position = Vector2(268, 128)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
remote_path = NodePath("../../../../../DeployLayer/落点右")
|
||||
update_rotation = false
|
||||
|
||||
[node name="装饰手" type="Sprite2D" parent="Ground/BGSprite2D" index="1"]
|
||||
[node name="装饰手" type="Sprite2D" parent="Ground/BGSprite2D" index="0"]
|
||||
position = Vector2(935, 60)
|
||||
texture = ExtResource("16_bm1fy")
|
||||
|
||||
[node name="装饰手2" type="Sprite2D" parent="Ground/BGSprite2D" index="2"]
|
||||
[node name="装饰手2" type="Sprite2D" parent="Ground/BGSprite2D" index="1"]
|
||||
position = Vector2(1318, 58)
|
||||
texture = ExtResource("17_f57cq")
|
||||
|
||||
@ -208,46 +98,68 @@ sprite_frames = ExtResource("18_f57cq")
|
||||
animation = &"胖子的母亲"
|
||||
autoplay = "胖子的母亲"
|
||||
|
||||
[node name="左侧" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="3"]
|
||||
position = Vector2(707, -337)
|
||||
sprite_frames = ExtResource("16_f57cq")
|
||||
animation = &"左手砍"
|
||||
offset = Vector2(-11, 0)
|
||||
|
||||
[node name="手拿刀" type="Area2D" parent="Ground/DeployLayer/左侧"]
|
||||
z_index = 10
|
||||
position = Vector2(-11, 0)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/左侧/手拿刀"]
|
||||
position = Vector2(8, -24)
|
||||
shape = SubResource("CapsuleShape2D_2wy2j")
|
||||
|
||||
[node name="落点左" type="Sprite2D" parent="Ground/DeployLayer" index="4"]
|
||||
position = Vector2(707, 91)
|
||||
[node name="落点左" type="Sprite2D" parent="Ground/DeployLayer" index="3"]
|
||||
position = Vector2(501, 98)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
texture = ExtResource("18_js8ld")
|
||||
|
||||
[node name="右侧" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="5"]
|
||||
position = Vector2(1283, -337)
|
||||
[node name="左侧手" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="4"]
|
||||
position = Vector2(501, -317)
|
||||
sprite_frames = ExtResource("16_f57cq")
|
||||
animation = &"右手砍"
|
||||
offset = Vector2(9, 0)
|
||||
animation = &"左手砍"
|
||||
offset = Vector2(-11, -13)
|
||||
|
||||
[node name="手拿刀2" type="Area2D" parent="Ground/DeployLayer/右侧"]
|
||||
[node name="左侧碰撞" type="Area2D" parent="Ground/DeployLayer/左侧手"]
|
||||
visible = false
|
||||
z_index = 10
|
||||
position = Vector2(-7, 0)
|
||||
position = Vector2(-11, -11)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/右侧/手拿刀2"]
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/左侧手/左侧碰撞"]
|
||||
position = Vector2(8, -24)
|
||||
shape = SubResource("CapsuleShape2D_2wy2j")
|
||||
|
||||
[node name="落点右" type="Sprite2D" parent="Ground/DeployLayer" index="6"]
|
||||
position = Vector2(1283, 91)
|
||||
[node name="AnimatableBody2D" type="AnimatableBody2D" parent="Ground/DeployLayer/左侧手"]
|
||||
position = Vector2(-4, -1)
|
||||
collision_layer = 3
|
||||
collision_mask = 3
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/左侧手/AnimatableBody2D"]
|
||||
position = Vector2(1, -24)
|
||||
shape = SubResource("CapsuleShape2D_whxhi")
|
||||
disabled = true
|
||||
|
||||
[node name="落点右" type="Sprite2D" parent="Ground/DeployLayer" index="5"]
|
||||
position = Vector2(1077, 98)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
texture = ExtResource("20_whxhi")
|
||||
|
||||
[node name="右侧手" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="6"]
|
||||
position = Vector2(1077, -317)
|
||||
sprite_frames = ExtResource("16_f57cq")
|
||||
animation = &"右手砍"
|
||||
offset = Vector2(9, -12)
|
||||
|
||||
[node name="右侧碰撞" type="Area2D" parent="Ground/DeployLayer/右侧手"]
|
||||
visible = false
|
||||
z_index = 10
|
||||
position = Vector2(-7, -11)
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/右侧手/右侧碰撞"]
|
||||
position = Vector2(8, -24)
|
||||
shape = SubResource("CapsuleShape2D_2wy2j")
|
||||
|
||||
[node name="AnimatableBody2D" type="AnimatableBody2D" parent="Ground/DeployLayer/右侧手"]
|
||||
position = Vector2(0, -12)
|
||||
collision_layer = 3
|
||||
collision_mask = 3
|
||||
|
||||
[node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/右侧手/AnimatableBody2D"]
|
||||
position = Vector2(1, -24)
|
||||
shape = SubResource("CapsuleShape2D_whxhi")
|
||||
disabled = true
|
||||
|
||||
[node name="MonsterMoveTarget" type="Marker2D" parent="Ground/DeployLayer" index="7"]
|
||||
position = Vector2(775, 3)
|
||||
position = Vector2(395, 50)
|
||||
|
||||
[node name="MainPlayer" parent="Ground" index="5"]
|
||||
position = Vector2(396, 98)
|
||||
@ -255,11 +167,19 @@ character = "胖子游戏"
|
||||
player_movement_rect = Rect2(30, -158, 8170, 316)
|
||||
facing_direction = Vector2(1, 0)
|
||||
|
||||
[node name="RemoteTransform2D" type="RemoteTransform2D" parent="Ground/MainPlayer" index="6"]
|
||||
position = Vector2(-1, -48)
|
||||
remote_path = NodePath("../../DeployLayer/MonsterMoveTarget")
|
||||
update_position = false
|
||||
update_rotation = false
|
||||
update_scale = false
|
||||
|
||||
[node name="BGParallaxLayer" parent="Ground/ParallaxForeground" index="0"]
|
||||
motion_scale = Vector2(0.9, 1)
|
||||
|
||||
[node name="FGParallaxLayer" parent="Ground/ParallaxForeground" index="1"]
|
||||
position = Vector2(0, -7)
|
||||
position = Vector2(-19, 38)
|
||||
motion_scale = Vector2(1.5, 1)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
|
||||
@ -272,6 +192,139 @@ points = PackedVector2Array(30, 150, 8200, 151)
|
||||
[node name="DirectionalLight2D" parent="Ground" index="8"]
|
||||
energy = 0.4
|
||||
blend_mode = 1
|
||||
range_layer_min = -1
|
||||
range_layer_min = -10
|
||||
|
||||
[node name="ParallaxBackground" type="ParallaxBackground" parent="Ground"]
|
||||
layer = -3
|
||||
|
||||
[node name="底图" type="ParallaxLayer" parent="Ground/ParallaxBackground"]
|
||||
z_index = -10
|
||||
motion_scale = Vector2(0.3, 1)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/ParallaxBackground/底图"]
|
||||
texture = ExtResource("5_a608f")
|
||||
|
||||
[node name="后山" type="ParallaxLayer" parent="Ground/ParallaxBackground"]
|
||||
z_index = -10
|
||||
motion_scale = Vector2(0.5, 1)
|
||||
motion_mirroring = Vector2(1134, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/ParallaxBackground/后山"]
|
||||
texture = ExtResource("6_x0t6p")
|
||||
|
||||
[node name="前山" type="ParallaxLayer" parent="Ground/ParallaxBackground"]
|
||||
z_index = -10
|
||||
position = Vector2(0, 16)
|
||||
motion_scale = Vector2(0.8, 1)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="Sprite2D" type="Sprite2D" parent="Ground/ParallaxBackground/前山"]
|
||||
texture = ExtResource("7_8s7iq")
|
||||
|
||||
[node name="CanvasLayer" type="CanvasLayer" parent="Ground"]
|
||||
layer = -2
|
||||
follow_viewport_enabled = true
|
||||
|
||||
[node name="胖子游戏棺材怪" type="AnimatedSprite2D" parent="Ground/CanvasLayer" node_paths=PackedStringArray("move_target", "left_side_sprite", "right_side_sprite", "left_area", "right_area", "left_static_collision", "right_static_collision")]
|
||||
z_index = -1
|
||||
position = Vector2(809, -17)
|
||||
sprite_frames = ExtResource("16_f57cq")
|
||||
animation = &"棺材怪右砍"
|
||||
script = ExtResource("9_js8ld")
|
||||
move_target = NodePath("../../DeployLayer/MonsterMoveTarget")
|
||||
left_side_sprite = NodePath("../../DeployLayer/左侧手")
|
||||
right_side_sprite = NodePath("../../DeployLayer/右侧手")
|
||||
left_area = NodePath("../../DeployLayer/左侧手/左侧碰撞")
|
||||
right_area = NodePath("../../DeployLayer/右侧手/右侧碰撞")
|
||||
left_static_collision = NodePath("../../DeployLayer/左侧手/AnimatableBody2D/CollisionShape2D")
|
||||
right_static_collision = NodePath("../../DeployLayer/右侧手/AnimatableBody2D/CollisionShape2D")
|
||||
|
||||
[node name="Sfx2D棺材怪脚步声" type="AudioStreamPlayer2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
stream = SubResource("AudioStreamRandomizer_f57cq")
|
||||
max_distance = 1000.0
|
||||
bus = &"game_sfx"
|
||||
script = ExtResource("10_f57cq")
|
||||
loop = true
|
||||
loop_round_time = 0.4
|
||||
metadata/_custom_type_script = "uid://wapo47a1oddf"
|
||||
|
||||
[node name="Sfx2D棺材怪切刀" type="AudioStreamPlayer2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
stream = ExtResource("12_whxhi")
|
||||
max_distance = 1000.0
|
||||
bus = &"game_sfx"
|
||||
script = ExtResource("10_f57cq")
|
||||
metadata/_custom_type_script = "uid://wapo47a1oddf"
|
||||
|
||||
[node name="左侧" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
position = Vector2(-308, -300)
|
||||
remote_path = NodePath("../../../DeployLayer/左侧手")
|
||||
update_rotation = false
|
||||
update_scale = false
|
||||
|
||||
[node name="左侧static_body" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪/左侧"]
|
||||
position = Vector2(-4, -1)
|
||||
remote_path = NodePath("../../../../DeployLayer/左侧手/AnimatableBody2D")
|
||||
update_rotation = false
|
||||
update_scale = false
|
||||
|
||||
[node name="右侧" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
position = Vector2(268, -300)
|
||||
remote_path = NodePath("../../../DeployLayer/右侧手")
|
||||
update_rotation = false
|
||||
update_scale = false
|
||||
|
||||
[node name="右侧static_body" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪/右侧"]
|
||||
position = Vector2(0, -12)
|
||||
remote_path = NodePath("../../../../DeployLayer/右侧手/AnimatableBody2D")
|
||||
update_rotation = false
|
||||
update_scale = false
|
||||
|
||||
[node name="左落点" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
position = Vector2(-308, 115)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
remote_path = NodePath("../../../DeployLayer/落点左")
|
||||
update_rotation = false
|
||||
|
||||
[node name="右落点" type="RemoteTransform2D" parent="Ground/CanvasLayer/胖子游戏棺材怪"]
|
||||
position = Vector2(268, 115)
|
||||
scale = Vector2(1e-05, 1e-05)
|
||||
remote_path = NodePath("../../../DeployLayer/落点右")
|
||||
update_rotation = false
|
||||
|
||||
[node name="ParallaxBackground2" type="ParallaxBackground" parent="Ground"]
|
||||
layer = -1
|
||||
|
||||
[node name="地面" type="ParallaxLayer" parent="Ground/ParallaxBackground2"]
|
||||
position = Vector2(0, 101)
|
||||
motion_mirroring = Vector2(1200, 0)
|
||||
|
||||
[node name="地面" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
texture = ExtResource("8_2van8")
|
||||
|
||||
[node name="遮罩" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
modulate = Color(0.14902, 0.14902, 0.14902, 0.533333)
|
||||
position = Vector2(0, -101)
|
||||
texture = ExtResource("9_podki")
|
||||
|
||||
[node name="肉1" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
position = Vector2(-143, -48)
|
||||
texture = ExtResource("10_pr5np")
|
||||
|
||||
[node name="肉2" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
position = Vector2(0, -49)
|
||||
texture = ExtResource("11_3wrhx")
|
||||
|
||||
[node name="肉3" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
position = Vector2(449, -57)
|
||||
texture = ExtResource("12_jcaoy")
|
||||
|
||||
[node name="肉4" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
position = Vector2(153, -46)
|
||||
texture = ExtResource("13_8ancs")
|
||||
|
||||
[node name="肉5" type="Sprite2D" parent="Ground/ParallaxBackground2/地面"]
|
||||
position = Vector2(724, -47)
|
||||
texture = ExtResource("14_bm1fy")
|
||||
|
||||
[editable path="Ground"]
|
||||
|
@ -1,28 +1,24 @@
|
||||
extends AnimatedSprite2D
|
||||
|
||||
const MOVE_SPEED := 120.0
|
||||
const RESET_Y := 300.0
|
||||
const RESET_Y := -300.0
|
||||
|
||||
@export var mute := true:
|
||||
@export var mute := false:
|
||||
set(val):
|
||||
mute = val
|
||||
if not is_node_ready():
|
||||
return
|
||||
if mute:
|
||||
footstep_sfx.volume_db = -100
|
||||
else:
|
||||
footstep_sfx.reset_volumn_to_default()
|
||||
_on_mute_updated()
|
||||
@export var move_target: Node2D
|
||||
@export_enum("left", "right") var hand_mode := 0
|
||||
@export var left_side_sprite: AnimatedSprite2D
|
||||
@export var right_side_sprite: AnimatedSprite2D
|
||||
@export var left_area: Area2D
|
||||
@export var right_area: Area2D
|
||||
@export var left_static_collision: CollisionShape2D
|
||||
@export var right_static_collision: CollisionShape2D
|
||||
|
||||
@onready var footstep_sfx = $"Sfx2D棺材怪脚步声" as Sfx2D
|
||||
@onready var chop_sfx = $"Sfx2D棺材怪切刀" as Sfx2D
|
||||
|
||||
@onready var remote_body = $"身子" as RemoteTransform2D
|
||||
@onready var remote_left_side = $"左侧" as RemoteTransform2D
|
||||
@onready var remote_right_side = $"右侧" as RemoteTransform2D
|
||||
@onready var remote_left_shadow = $"左落点" as RemoteTransform2D
|
||||
@ -30,13 +26,23 @@ const RESET_Y := 300.0
|
||||
|
||||
var left_hand_x_offset: float
|
||||
var right_hand_x_offset: float
|
||||
|
||||
var chopped_safe_period := false
|
||||
|
||||
func _ready() -> void:
|
||||
left_hand_x_offset = remote_left_shadow.position.x
|
||||
right_hand_x_offset = remote_right_shadow.position.x
|
||||
left_area.body_entered.connect(_on_player_chopped)
|
||||
right_area.body_entered.connect(_on_player_chopped)
|
||||
_on_mute_updated()
|
||||
|
||||
|
||||
func _on_mute_updated() -> void:
|
||||
if not is_node_ready():
|
||||
return
|
||||
if mute:
|
||||
footstep_sfx.volume_db = -100
|
||||
else:
|
||||
footstep_sfx.reset_volumn_to_default()
|
||||
|
||||
|
||||
# 停止切肉动作, x 对齐到 move_target
|
||||
@ -47,42 +53,62 @@ func refresh_monster() -> void:
|
||||
remote_left_shadow.scale = Vector2.ZERO
|
||||
remote_right_shadow.scale = Vector2.ZERO
|
||||
|
||||
var aiming := false
|
||||
|
||||
func aim_left() -> void:
|
||||
var tween = create_tween()
|
||||
tween.tween_property(remote_left_shadow, "scale", Vector2.ONE, 1.0)
|
||||
|
||||
|
||||
func aim_right() -> void:
|
||||
var tween = create_tween()
|
||||
tween.tween_property(remote_right_shadow, "scale", Vector2.ONE, 1.0)
|
||||
|
||||
|
||||
func chop_left() -> void:
|
||||
left_side_sprite.play()
|
||||
func chop_left(aiming_duration := 3.0) -> void:
|
||||
hand_mode = 0
|
||||
aiming = true
|
||||
_checkout_hand_animation(false)
|
||||
var tween = create_tween()
|
||||
if aiming_duration > 0.0:
|
||||
tween.tween_property(remote_left_shadow, "scale", Vector2.ONE, aiming_duration)
|
||||
tween.tween_callback(left_side_sprite.play)
|
||||
tween.tween_property(remote_left_side, "position:y", 0.0, 0.2)
|
||||
if aiming_duration <= 0.0:
|
||||
tween.parallel().tween_property(remote_left_shadow, "scale", Vector2.ONE, 0.2)
|
||||
tween.tween_callback(chop_sfx.play)
|
||||
tween.tween_callback(toggle_safe_period.bind(true))
|
||||
tween.tween_callback(shake)
|
||||
tween.tween_interval(1.0)
|
||||
tween.tween_property(remote_left_side, "position:y", RESET_Y, 1.0)
|
||||
tween.parallel().tween_property(remote_left_shadow, "scale", Vector2.ZERO, 0.8)
|
||||
tween.tween_callback(toggle_safe_period.bind(false))
|
||||
tween.tween_callback(func(): aiming = false)
|
||||
|
||||
|
||||
func chop_right() -> void:
|
||||
right_side_sprite.play()
|
||||
func chop_right(aiming_duration := 3.0) -> void:
|
||||
hand_mode = 1
|
||||
aiming = true
|
||||
_checkout_hand_animation(false)
|
||||
var tween = create_tween()
|
||||
if aiming_duration > 0.0:
|
||||
tween.tween_property(remote_right_shadow, "scale", Vector2.ONE, aiming_duration)
|
||||
tween.tween_callback(right_side_sprite.play)
|
||||
tween.tween_property(remote_right_side, "position:y", 0.0, 0.2)
|
||||
if aiming_duration <= 0.0:
|
||||
tween.parallel().tween_property(remote_right_shadow, "scale", Vector2.ONE, 0.2)
|
||||
tween.tween_callback(chop_sfx.play)
|
||||
tween.tween_callback(toggle_safe_period.bind(true))
|
||||
tween.tween_callback(shake)
|
||||
tween.tween_interval(1.0)
|
||||
tween.tween_property(remote_right_side, "position:y", RESET_Y, 1.0)
|
||||
tween.parallel().tween_property(remote_right_shadow, "scale", Vector2.ZERO, 0.8)
|
||||
tween.tween_callback(toggle_safe_period.bind(false))
|
||||
tween.tween_callback(func(): aiming = false)
|
||||
|
||||
|
||||
func toggle_safe_period(safe: bool) -> void:
|
||||
chopped_safe_period = safe
|
||||
left_static_collision.disabled = not safe
|
||||
right_static_collision.disabled = not safe
|
||||
|
||||
|
||||
func shake() -> void:
|
||||
SceneManager.get_camera_marker().shake_camera(4.0)
|
||||
SceneManager.get_camera_marker().shake_camera(6.0)
|
||||
|
||||
|
||||
func _on_player_chopped(_body) -> void:
|
||||
if chopped_safe_period:
|
||||
return
|
||||
SceneManager.lock_player()
|
||||
await SceneManager.player_action(7)
|
||||
await Util.wait(1.0)
|
||||
@ -93,17 +119,34 @@ func _on_player_chopped(_body) -> void:
|
||||
|
||||
func _physics_process(delta: float) -> void:
|
||||
var target_x = move_target.global_position.x
|
||||
if hand_mode == 0:
|
||||
target_x -= left_hand_x_offset
|
||||
else:
|
||||
target_x -= right_hand_x_offset
|
||||
var x = global_position.x
|
||||
if target_x == x:
|
||||
if chopped_safe_period or abs(target_x - x) < 0.1:
|
||||
stop()
|
||||
if footstep_sfx.playing:
|
||||
footstep_sfx.stop()
|
||||
else:
|
||||
global_position.x = move_toward(x, target_x, delta * MOVE_SPEED)
|
||||
var speed = MOVE_SPEED
|
||||
if aiming:
|
||||
speed *= 0.3
|
||||
global_position.x = move_toward(x, target_x, delta * speed)
|
||||
# if Time.get_ticks_msec() % 100 == 0:
|
||||
# prints(x, target_x)
|
||||
if not footstep_sfx.playing:
|
||||
footstep_sfx.play()
|
||||
if not is_playing():
|
||||
if hand_mode == 0:
|
||||
play("棺材怪移动")
|
||||
else:
|
||||
play("棺材怪移动右")
|
||||
_checkout_hand_animation()
|
||||
|
||||
func _checkout_hand_animation(is_move := true) -> void:
|
||||
var target_animation = ""
|
||||
if is_move:
|
||||
target_animation = "棺材怪移动" if hand_mode == 0 else "棺材怪移动右"
|
||||
else:
|
||||
target_animation = "棺材怪左砍" if hand_mode == 0 else "棺材怪右砍"
|
||||
if not is_playing() or animation != target_animation:
|
||||
if hand_mode == 0:
|
||||
play(target_animation)
|
||||
else:
|
||||
play(target_animation)
|
||||
|
Loading…
Reference in New Issue
Block a user