create AntNitwit class and make them wander

This commit is contained in:
2024-10-06 08:55:57 +10:00
parent 3ad9d2a6ac
commit f6110711fc
5 changed files with 131 additions and 715 deletions

View File

@@ -0,0 +1,38 @@
extends ControlledUnit
class_name AntNitwit
enum AntNitwitState {
WANDERING,
MOVING,
}
var state: AntNitwitState = AntNitwitState.WANDERING
func _ready() -> void:
super._ready()
moving_started.connect(_on_moving_started)
moving_ended.connect(_on_moving_ended)
func _process(delta: float) -> void:
super._process(delta)
if moving_to_target:
state = AntNitwitState.MOVING
_handle_wandering(delta)
func _handle_wandering(delta: float) -> void:
if state != AntNitwitState.WANDERING:
return
_wander(delta)
func _on_moving_ended() -> void:
state = AntNitwitState.WANDERING
func _on_moving_started() -> void:
state = AntNitwitState.MOVING

View File

@@ -1,13 +1,23 @@
extends Unit
class_name ControlledUnit
signal moving_started
signal moving_ended
var selected: bool = false
var moving_to_target: bool = false
var ground_plane: Plane = Plane(Vector3.UP, 0)
@onready var camera: Camera3D = get_viewport().get_camera_3d()
@onready var selection_sprite: Sprite3D = $SelectionSprite
func _init() -> void:
max_wander_distance = 2
min_wander_interval = 0.5
max_wander_interval = 30
func _ready() -> void:
assert(camera != null, "camera missing!")
assert(selection_sprite != null, "selection_sprite missing!")
@@ -16,6 +26,13 @@ func _ready() -> void:
super._ready()
func _physics_process(delta: float) -> void:
super._physics_process(delta)
if moving_to_target and nav_agent.is_navigation_finished():
moving_to_target = false
moving_ended.emit()
func _input(event: InputEvent) -> void:
if not is_on_screen:
return
@@ -26,6 +43,8 @@ func _input(event: InputEvent) -> void:
button_event.button_index == MOUSE_BUTTON_RIGHT
and button_event.pressed
):
moving_to_target = true
moving_started.emit()
_set_target_click(button_event.position)

View File

@@ -4,9 +4,9 @@ class_name Unit
const MOVE_SPEED: float = 3
const TURN_SPEED: float = 10
const MAX_WANDER_DISTANCE: float = 5
const MIN_WANDER_INTERVAL: float = 0.25
const MAX_WANDER_INTERVAL: float = 5
var max_wander_distance: float = 5
var min_wander_interval: float = 0.25
var max_wander_interval: float = 5
var hovered: bool = false
var is_on_screen: bool = false
@@ -94,13 +94,13 @@ func _wander(delta: float) -> void:
wandering_timer -= delta
if wandering_timer <= 0:
var new_pos_offset := Vector3(
randf_range(-MAX_WANDER_DISTANCE, MAX_WANDER_DISTANCE),
randf_range(-max_wander_distance, max_wander_distance),
0,
randf_range(-MAX_WANDER_DISTANCE, MAX_WANDER_DISTANCE),
randf_range(-max_wander_distance, max_wander_distance),
)
var new_pos := wandering_center + new_pos_offset
nav_agent.set_target_position(new_pos)
wandering_timer = randf_range(-MIN_WANDER_INTERVAL, MAX_WANDER_INTERVAL)
wandering_timer = randf_range(-min_wander_interval, max_wander_interval)
func _on_nav_agent_velocity_computed(safe_velocity: Vector3) -> void: