interact
This commit is contained in:
@@ -2,8 +2,11 @@ extends Node
|
||||
|
||||
# Player AI
|
||||
var ignore_input = false
|
||||
var body_exit_signal = false # interact_input()
|
||||
var interact_target = null
|
||||
var velocity_sum = Vector2(0.0,0.0)
|
||||
|
||||
# Setters + Getters
|
||||
func set_ignore_input(new_bool):
|
||||
ignore_input = new_bool
|
||||
func get_ignore_input():
|
||||
@@ -11,10 +14,55 @@ func get_ignore_input():
|
||||
func get_user():
|
||||
return get_parent()
|
||||
|
||||
### LOGIC ###
|
||||
|
||||
# Get Player Input
|
||||
func get_input():
|
||||
if not ignore_input:
|
||||
get_movement_input()
|
||||
get_interact_input()
|
||||
|
||||
### INTERACTING ###
|
||||
|
||||
# Listen for Hotkey for Interacting
|
||||
func get_interact_input():
|
||||
## Interact Hotkey
|
||||
if Input.is_action_just_pressed('interact'):
|
||||
## Get overlapping bodies from range bubble
|
||||
var bodies = get_user().get_overlapping_bodies()
|
||||
#var areas = get_user().get_overlapping_areas()
|
||||
## Exclusions
|
||||
for body in bodies:
|
||||
if !body.has_method("get_user"):
|
||||
bodies.erase(body)
|
||||
if body.has_method("get_user") and body.get_user().is_player():
|
||||
bodies.erase(body)
|
||||
#for area in areas:
|
||||
# if area.has_method("get_user"):
|
||||
# areas.erase(area)
|
||||
## Collect Interactable Targets in Range
|
||||
var interact_targets = []
|
||||
for b in bodies:
|
||||
if b.get_user().is_in_group("can_interact"):
|
||||
interact_targets.append(b.get_user())
|
||||
#for a in areas:
|
||||
# if a.get_user().is_in_group("can_interact"):
|
||||
# interact_targets.append(a.get_user())
|
||||
## Find Nearest Interactable Target
|
||||
if interact_targets:
|
||||
interact_targets.sort_custom(FoeSorter.new(get_user().get_gpos()), "sort")
|
||||
#get_user().set_target(interact_targets[0])
|
||||
interact_targets[0].interact()
|
||||
|
||||
# Foe Finder System
|
||||
class FoeSorter:
|
||||
var point = null
|
||||
func _init(new_point):
|
||||
self.point = new_point
|
||||
func sort(a, b):
|
||||
return self.point.distance_to(a.get_gpos()) < self.point.distance_to(b.get_gpos())
|
||||
|
||||
### MOVEMENT ###
|
||||
|
||||
# Get Movement Key Input
|
||||
func get_movement_input():
|
||||
@@ -65,6 +113,8 @@ func movement_key_released(direction):
|
||||
get_user().animate("Idle")
|
||||
get_user().set_internal_velocity(velocity_sum)
|
||||
|
||||
### PHYSICS PROCESS
|
||||
|
||||
# Physics Process
|
||||
func _physics_process(_delta):
|
||||
## Keyboard Movement
|
||||
|
||||
Reference in New Issue
Block a user