Proper action indication
This commit is contained in:
@@ -2,17 +2,12 @@ extends Node
|
|||||||
signal user_click
|
signal user_click
|
||||||
|
|
||||||
var frame_tf: Transform = Transform()
|
var frame_tf: Transform = Transform()
|
||||||
# Declare member variables here. Examples:
|
|
||||||
# var a = 2
|
|
||||||
# var b = "text"
|
|
||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
|
||||||
var master_node: Node
|
var master_node: Node
|
||||||
var camera: Camera
|
var camera: Camera
|
||||||
|
var monitored_objects = []
|
||||||
|
var mon_labels = {}
|
||||||
func _ready():
|
func _ready():
|
||||||
pass # Replace with function body.
|
pass
|
||||||
|
|
||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
if !master_node:
|
if !master_node:
|
||||||
return
|
return
|
||||||
@@ -30,6 +25,45 @@ func _process(delta):
|
|||||||
if Input.is_action_pressed("move_west"):
|
if Input.is_action_pressed("move_west"):
|
||||||
var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta))
|
var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta))
|
||||||
frame_tf *= tf_turn
|
frame_tf *= tf_turn
|
||||||
|
var act_obj = null
|
||||||
|
var act_dist = -1.0
|
||||||
|
var opos = master_node.global_transform.origin
|
||||||
|
for k in get_tree().get_nodes_in_group("activatable"):
|
||||||
|
if k == master_node:
|
||||||
|
continue
|
||||||
|
var epos = k.global_transform.origin
|
||||||
|
var new_dist = opos.distance_squared_to(epos)
|
||||||
|
if act_dist < 0:
|
||||||
|
act_obj = k
|
||||||
|
act_dist = new_dist
|
||||||
|
continue
|
||||||
|
elif act_dist > new_dist:
|
||||||
|
act_dist = new_dist
|
||||||
|
act_obj = k
|
||||||
|
# if act_obj != null && act_dist < 3.0:
|
||||||
|
# print("act: ", act_obj, " ", act_dist)
|
||||||
|
if act_obj != null && !act_obj in monitored_objects:
|
||||||
|
if act_dist < 4.0 && monitored_objects.size() < 4:
|
||||||
|
print("act2: ", act_obj, " ", act_dist)
|
||||||
|
monitored_objects.push_back(act_obj)
|
||||||
|
mon_labels[act_obj] = Label.new()
|
||||||
|
mon_labels[act_obj].text = act_obj.get_act()
|
||||||
|
add_child(mon_labels[act_obj])
|
||||||
|
mon_labels[act_obj].rect_position = camera.unproject_position(act_obj.global_transform.origin)
|
||||||
|
print("act3:", mon_labels[act_obj].text)
|
||||||
|
for k in monitored_objects:
|
||||||
|
var epos = k.global_transform.origin
|
||||||
|
var new_dist = opos.distance_squared_to(epos)
|
||||||
|
if new_dist > 6.0:
|
||||||
|
monitored_objects.erase(k)
|
||||||
|
mon_labels[k].queue_free()
|
||||||
|
mon_labels.erase(k)
|
||||||
|
print("removed label")
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
mon_labels[k].rect_position = camera.unproject_position(k.global_transform.origin)
|
||||||
|
|
||||||
|
|
||||||
var click2d: Vector2 = Vector2()
|
var click2d: Vector2 = Vector2()
|
||||||
var click2d_update: bool = false
|
var click2d_update: bool = false
|
||||||
var click3d: Vector3 = Vector3()
|
var click3d: Vector3 = Vector3()
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ const GRAVITY = Vector3(0, -9.8, 0)
|
|||||||
func _ready():
|
func _ready():
|
||||||
orientation = Transform()
|
orientation = Transform()
|
||||||
skel = get_children()[0]
|
skel = get_children()[0]
|
||||||
|
add_to_group("characters")
|
||||||
|
add_to_group("activatable")
|
||||||
|
|
||||||
|
func get_act():
|
||||||
|
return "Talk"
|
||||||
|
|
||||||
func idle():
|
func idle():
|
||||||
var sm: AnimationNodeStateMachinePlayback = $AnimationTree["parameters/base/playback"]
|
var sm: AnimationNodeStateMachinePlayback = $AnimationTree["parameters/base/playback"]
|
||||||
|
|||||||
Reference in New Issue
Block a user