Untitled
unknown
plain_text
6 months ago
1.7 kB
2
Indexable
class_name Bull extends CharacterBody3D @export var move_speed: float = 1.0 @export var m_max_stunned_time = 2 @export var m_max_target_time = 4 var m_current_stunned_time = m_max_stunned_time var m_current_target_time = m_max_target_time # Get the gravity from the project settings to be synced with RigidBody nodes. var gravity: float = ProjectSettings.get_setting("physics/3d/default_gravity") enum States {IDLE, TARGETING, CHARGING, STUNNED} var m_state: States = States.IDLE var m_charge_direction: Vector3 = Vector3.ZERO func _ready(): add_to_group("bulls") func _physics_process(delta: float) -> void: match m_state: States.IDLE: m_current_target_time -= delta if (m_current_target_time <= 0): m_current_stunned_time = m_max_stunned_time m_state = States.TARGETING States.TARGETING: var closest_monster = get_closest_monster_position() m_charge_direction = (closest_monster - position).normalized() m_state = States.CHARGING States.CHARGING: velocity.x = m_charge_direction.x * move_speed velocity.z = m_charge_direction.z * move_speed var collision = move_and_collide(velocity * delta) if collision: var collider = collision.get_collider() if collider: if (collider.is_in_group("walls")): screen_shake() m_state = States.STUNNED elif (collider.is_in_group("players")): m_state = States.STUNNED States.STUNNED: m_current_stunned_time -= delta if (m_current_stunned_time <= 0): m_current_stunned_time = m_max_stunned_time m_state = States.IDLE func get_closest_monster_position() -> Vector3: return get_parent().get_node("Player").position func screen_shake() -> void: get_parent().get_node("Camera3D").init_shake()
Editor is loading...
Leave a Comment