70 lines
2.1 KiB
GDScript
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()
|