D3/Char/Enemy/Enemy_Base.gd
2025-05-10 23:19:52 +08:00

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