everything_has_a_price_jam/troup.gd
2026-09-27 16:39:05 -06:00

70 lines
2.1 KiB
GDScript

extends CharacterBody2D
const SPEED = 700.0
const JUMP_VELOCITY = -400.0
@export var target : Node2D
@export var enemTarget : Node2D
func _ready() -> void:
UserContext. set_target_for . connect(set_target_for)
#enemTarget = %PlayerGates
func set_target_for(who: CurrencyMemberSprite, t: Node2D):
if %MemberSprite == who:
if target != null:
target.tree_exiting.disconnect(removed_target)
t.tree_exiting.connect(removed_target)
target = t
UserContext.modal(null)
func removed_target():
target = null
func sprite() -> CurrencyMemberSprite:
return %MemberSprite
func combat(target):
if get_node("MemberSprite").get_combat() == false:
var p := Production.new()
p.amount = -1
p.currency = %MemberSprite.currency
Economy.produce(p)
self.queue_free()
return
var winner = randf_range(0,2)
if %MemberSprite.currency.name == "Dinosaur" or %MemberSprite.currency.name == "Wizard":
winner -= 0.5
if target.get_node("MemberSprite").currency.name == "Dinosaur" or target.get_node("MemberSprite").currency.name == "Wizard":
winner += 0.5
if winner <= 1:
target.queue_free()
else:
var p := Production.new()
p.amount = -1
p.currency = %MemberSprite.currency
Economy.produce(p)
Economy.log.emit("A " + p.currency.name +" died in combat!")
self.queue_free()
func _physics_process(delta: float) -> void:
if %MemberSprite.get_allegiance() == "Rivaldom" and %MemberSprite.get_combat() == true and target != enemTarget:
target = enemTarget
elif %MemberSprite.get_allegiance() == "You" and target == enemTarget:
removed_target()
if target != null:
var _num = abs(abs(self.global_position) - abs(target.global_position))
var direction = (target.global_position - self.global_position).normalized() * SPEED * delta
if (self.global_position.distance_to(target.global_position) > 25):
self.velocity = direction
elif (target.is_class("CharacterBody2D")):
if (target.get_node("MemberSprite").get_allegiance() != get_node("MemberSprite").get_allegiance() ):
combat(target)
removed_target()
else:
removed_target()
move_and_slide()