45 lines
1.3 KiB
GDScript
45 lines
1.3 KiB
GDScript
# 挂在角色owner节点上的
|
|
extends CharacterBody2D
|
|
|
|
@onready var state_machine = get_node("Enemy_State_Machine")
|
|
@onready var floor_raycast = self.get_node("Detector/Floor")
|
|
@onready var floor_l_raycast = self.get_node("Detector/Floor_L")
|
|
@onready var floor_r_raycast = self.get_node("Detector/Floor_R")
|
|
@onready var slope_l_raycast = self.get_node("Detector/Slope_L")
|
|
@onready var slope_r_raycast = self.get_node("Detector/Slope_R")
|
|
|
|
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
|
|
|
|
var hurt = false
|
|
var hurt_data: Array = []
|
|
var health = 1
|
|
var death = false
|
|
var freeze : bool = false
|
|
|
|
func set_floor_raycasts_enabled(enabled: bool) -> void:
|
|
floor_raycast.enabled = enabled
|
|
floor_l_raycast.enabled = enabled
|
|
floor_r_raycast.enabled = enabled
|
|
slope_l_raycast.enabled = enabled
|
|
slope_r_raycast.enabled = enabled
|
|
|
|
func is_on_slope() -> String:
|
|
if floor_raycast.is_colliding() and floor_l_raycast.is_colliding() and floor_r_raycast.is_colliding():
|
|
return ""
|
|
if slope_l_raycast.is_colliding():
|
|
return "L"
|
|
if slope_r_raycast.is_colliding():
|
|
return "R"
|
|
return ""
|
|
|
|
func is_on_ground():
|
|
if self.is_on_floor() and floor_raycast.is_colliding() or floor_l_raycast.is_colliding() or floor_r_raycast.is_colliding():
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
func start_hurt():
|
|
if !hurt:
|
|
state_machine.change_state("hurt_begin")
|
|
hurt = true
|