From 69cd38082eed85317b5e8f00ae268f7e07d3f178 Mon Sep 17 00:00:00 2001 From: Segey Lapin Date: Mon, 22 Jul 2019 03:30:03 +0300 Subject: [PATCH] Proper action indication --- proto2/autoloads/controls.gd | 50 ++++++++++++++++++++++++++++------ proto2/characters/character.gd | 5 ++++ 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/proto2/autoloads/controls.gd b/proto2/autoloads/controls.gd index 52bb27b..5ce16a7 100644 --- a/proto2/autoloads/controls.gd +++ b/proto2/autoloads/controls.gd @@ -2,17 +2,12 @@ extends Node signal user_click 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 camera: Camera +var monitored_objects = [] +var mon_labels = {} func _ready(): - pass # Replace with function body. - -# Called every frame. 'delta' is the elapsed time since the previous frame. + pass func _process(delta): if !master_node: return @@ -30,6 +25,45 @@ func _process(delta): if Input.is_action_pressed("move_west"): var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta)) 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_update: bool = false var click3d: Vector3 = Vector3() diff --git a/proto2/characters/character.gd b/proto2/characters/character.gd index f34d11b..c8ed944 100644 --- a/proto2/characters/character.gd +++ b/proto2/characters/character.gd @@ -11,6 +11,11 @@ const GRAVITY = Vector3(0, -9.8, 0) func _ready(): orientation = Transform() skel = get_children()[0] + add_to_group("characters") + add_to_group("activatable") + +func get_act(): + return "Talk" func idle(): var sm: AnimationNodeStateMachinePlayback = $AnimationTree["parameters/base/playback"]