mirror of
https://github.com/tonytins/citylimits
synced 2025-12-16 21:24:43 -05:00
Removed state machine for behavior trees
- Added Font Awesome Support
This commit is contained in:
parent
b133ee2680
commit
c46d0e27e4
161 changed files with 7082 additions and 1083 deletions
102
examples/simple_ai_logic/lumberjack.gd
Normal file
102
examples/simple_ai_logic/lumberjack.gd
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
extends Node2D
|
||||
|
||||
#------------------------------------------
|
||||
# Signaux
|
||||
#------------------------------------------
|
||||
|
||||
#------------------------------------------
|
||||
# Exports
|
||||
#------------------------------------------
|
||||
|
||||
@export_category("Logger")
|
||||
|
||||
@export var max_log_capacity:int = 2
|
||||
|
||||
#------------------------------------------
|
||||
# Variables publiques
|
||||
#------------------------------------------
|
||||
|
||||
var logs_count:int = 0
|
||||
|
||||
#------------------------------------------
|
||||
# Variables privées
|
||||
#------------------------------------------
|
||||
|
||||
@onready var _btroot:BTRoot = $AI
|
||||
|
||||
var _cutting_log:bool = false
|
||||
var _cutting_tree:Node2D
|
||||
|
||||
#------------------------------------------
|
||||
# Fonctions Godot redéfinies
|
||||
#------------------------------------------
|
||||
|
||||
#------------------------------------------
|
||||
# Fonctions publiques
|
||||
#------------------------------------------
|
||||
|
||||
func on_state_entered() :
|
||||
_btroot.on_running.connect(func(s):print(s))
|
||||
_btroot.on_idle.connect(func():print("idle..."))
|
||||
_btroot.enabled = true
|
||||
|
||||
func can_carry_more_logs() -> bool:
|
||||
return logs_count < max_log_capacity
|
||||
|
||||
func has_no_log() -> bool:
|
||||
return logs_count == 0
|
||||
|
||||
func has_remaining_trees() -> bool:
|
||||
return not get_tree().get_nodes_in_group("tree").is_empty()
|
||||
|
||||
func get_nearest_tree() -> Node2D:
|
||||
var nearest_tree:Node2D
|
||||
var nearest_distance_to_tree:float = 99999.0
|
||||
for tree in get_tree().get_nodes_in_group("tree"):
|
||||
var distance_to_tree:float = global_position.distance_to(tree.global_position)
|
||||
if distance_to_tree < nearest_distance_to_tree:
|
||||
nearest_distance_to_tree = distance_to_tree
|
||||
nearest_tree = tree
|
||||
return nearest_tree
|
||||
|
||||
func get_nearest_warehouse() -> Node2D:
|
||||
var nearest_warehouse:Node2D
|
||||
var nearest_distance_to_warehouse:float = 99999.0
|
||||
for warehouse in get_tree().get_nodes_in_group("warehouse"):
|
||||
var distance_to_warehouse:float = global_position.distance_to(warehouse.global_position)
|
||||
if distance_to_warehouse < nearest_distance_to_warehouse:
|
||||
nearest_distance_to_warehouse = distance_to_warehouse
|
||||
nearest_warehouse = warehouse
|
||||
return nearest_warehouse
|
||||
|
||||
func tree_is_valid(tree:Node2D) -> bool:
|
||||
return is_instance_valid(tree) and tree.has_logs()
|
||||
|
||||
func cut_log(tree:Node2D) -> int:
|
||||
if not _cutting_log:
|
||||
_cutting_log = true
|
||||
_cutting_tree = tree
|
||||
get_tree().create_timer(1).timeout.connect(_on_log_cut, CONNECT_ONE_SHOT)
|
||||
return BTTickResult.RUNNING if _cutting_log else BTTickResult.FAILURE
|
||||
|
||||
func drop_logs_to_warehouse() -> void:
|
||||
logs_count = 0
|
||||
|
||||
func move_to(delta:float, node:Node2D) -> int:
|
||||
if global_position.distance_to(node.global_position) > 10:
|
||||
global_position = global_position.move_toward(node.global_position, delta * 300)
|
||||
return BTTickResult.RUNNING
|
||||
else:
|
||||
return BTTickResult.SUCCESS
|
||||
|
||||
|
||||
#------------------------------------------
|
||||
# Fonctions privées
|
||||
#------------------------------------------
|
||||
|
||||
func _on_log_cut() -> void:
|
||||
if is_instance_valid(_cutting_tree):
|
||||
_cutting_tree.cut_log()
|
||||
_cutting_tree = null
|
||||
logs_count += 1
|
||||
_cutting_log = false
|
||||
Loading…
Add table
Add a link
Reference in a new issue