diff --git a/proto3/godot/autoloads/global.gd b/proto3/godot/autoloads/global.gd index 49a90a2..9606d1a 100644 --- a/proto3/godot/autoloads/global.gd +++ b/proto3/godot/autoloads/global.gd @@ -5,6 +5,9 @@ var raycasts_count = 100 var raycast_queue = [] var astar: AStar +# Need to make more generic +var exit_door: Node + func _ready(): set_save_slot(0) diff --git a/proto3/godot/autoloads/quests.gd b/proto3/godot/autoloads/quests.gd index 8ba79b6..6935235 100644 --- a/proto3/godot/autoloads/quests.gd +++ b/proto3/godot/autoloads/quests.gd @@ -22,7 +22,8 @@ var quest_triggers = [ "desc": "You wake up from noise. Explore the building to find the source.", "trigger": ["once", 0, 0, 10], "objectives": [ - ["walkto_room", "Check enterance.", "Check enterance room.", "exit_room", 8.0] + ["walkto_room", "Check enterance.", "Check enterance room.", "exit_room", 8.0], + ["walkto_exit", "Check enteranc edoor is ok.", "Check the door.", 3.0] ] } ] @@ -103,13 +104,12 @@ class Quest extends Reference: return _title class ObjectiveWalkto extends QuestObjective: var where = Vector3() - var meta = "" var radius = 0.0 var indicator = preload("res://ui/quest_indicator.tscn") var ind_i: Node2D var old_pos = Vector3() func _init(t, d, w, r).(t, d): - meta = w + where = w radius = r func activate(): active = true @@ -128,6 +128,7 @@ class ObjectiveWalkto extends QuestObjective: func finish(): active = false ind_i.queue_free() + print(_title, " FINISHED") func update(): if !active: return @@ -148,9 +149,11 @@ class ObjectiveWalkto extends QuestObjective: else: ind_i.target = where + Vector3(0, 1, 0) * 0.3 old_pos = player_pos + if old_pos.distance_to(where) < radius: + complete = true func save(): var save_data = {} - save_data.create = ["walkto_room", _title, _desc, meta, radius] + save_data.create = ["walkto_room", _title, _desc, where, radius] save_data.active = active save_data.complete = complete return save_data @@ -182,7 +185,24 @@ func create_objective(v): var o_desc = v[2] var o_meta = v[3] var o_radius = v[4] - var obj = ObjectiveWalkto.new(o_title, o_desc, o_meta, o_radius) + var where = Vector3() + var rooms = global.get_tree().get_nodes_in_group("room") + var room_set = false + for e in rooms: + print(e.name) + if e.has_meta(o_meta): + where = e.global_transform.origin + room_set = true + break + assert(room_set == true) + var obj = ObjectiveWalkto.new(o_title, o_desc, where, o_radius) + return obj + "walkto_exit": + var o_title = v[1] + var o_desc = v[2] + var o_radius = v[3] + var where = global.exit_door.global_transform.origin + var obj = ObjectiveWalkto.new(o_title, o_desc, where, o_radius) return obj return null diff --git a/proto3/godot/scenes/maps/dungeon.gd b/proto3/godot/scenes/maps/dungeon.gd index d5c0be3..1dbef10 100644 --- a/proto3/godot/scenes/maps/dungeon.gd +++ b/proto3/godot/scenes/maps/dungeon.gd @@ -13,9 +13,9 @@ var room = preload("res://scenes/maps/interior2.tscn") var bed = preload("res://scenes/furniture/bed.tscn") var table_chairs = preload("res://scenes/furniture/table_chairs.tscn") var closet = preload("res://scenes/furniture/closet.tscn") -var size_x = 4 -var size_y = 5 -var floors = 5 +var size_x = 3 +var size_y = 3 +var floors = 6 var w = 10 var h = 8 var dungeon = [] @@ -142,9 +142,12 @@ var dungeon_ids = [] func _process(_delta): match(state): 0: + global.save_data.dungeon_seed = OS.get_unix_time() global.load_game() + seed(global.save_data.dungeon_seed) if global.save_data.has("dungeon"): dungeon_save = global.save_data.dungeon + seed(global.save_data.dungeon_seed) state = 1 1: dungeon.resize(floors * size_x * size_y) @@ -170,6 +173,7 @@ func _process(_delta): 22: for r in dungeon: r.create_rooms() + assert(global.exit_door) state = 23 23: furniture_nodes = get_tree().get_nodes_in_group("furniture") diff --git a/proto3/godot/scenes/maps/interior2.gd b/proto3/godot/scenes/maps/interior2.gd index 0045826..f39f9f2 100644 --- a/proto3/godot/scenes/maps/interior2.gd +++ b/proto3/godot/scenes/maps/interior2.gd @@ -217,19 +217,24 @@ func wall2window(n): # else: # window_i = door.instance() if has_meta("exit_room") && !outside_door_placed: + print("exit room place door") window_i = outside_door.instance() outside_door_placed = true + global.exit_door = window_i else: window_i = window.instance() add_child(window_i) window_i.transform = window_xform n.queue_free() func create_rooms(): + assert(exits.size() > 0) if has_meta("master_room"): master_room() elif has_meta("kitchen_room"): master_room() elif has_meta("exit_room"): + assert(windows.size() > 0) + master_room() for e in get_children(): if e.is_in_group("furniture"): e.queue_free() diff --git a/proto3/godot/scenes/maps/interior2.tscn b/proto3/godot/scenes/maps/interior2.tscn index 180dbe1..5666e66 100644 --- a/proto3/godot/scenes/maps/interior2.tscn +++ b/proto3/godot/scenes/maps/interior2.tscn @@ -57,7 +57,9 @@ _data = { "tilts": PoolRealArray( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ) } -[node name="interior2" instance=ExtResource( 1 )] +[node name="interior2" groups=[ +"room", +] instance=ExtResource( 1 )] script = ExtResource( 2 ) [node name="path_west" type="Path" parent="." index="1" groups=[ diff --git a/proto3/godot/ui/quest_indicator.gd b/proto3/godot/ui/quest_indicator.gd index efc9d9c..bb6b736 100644 --- a/proto3/godot/ui/quest_indicator.gd +++ b/proto3/godot/ui/quest_indicator.gd @@ -17,11 +17,19 @@ func _ready(): func _process(delta): var pos = get_viewport().get_camera().unproject_position(target) rect = get_viewport_rect() - if rect.has_point(pos): - if !visible: - show() + rect.grow(-8.0) + if get_viewport().get_camera().is_position_behind(target): + if visible: + hide() else: - pos.x = clamp(pos.x, rect.position.x, rect.position.x + rect.size.x) - pos.y = clamp(pos.x, rect.position.x, rect.position.x + rect.size.x) - position = position.linear_interpolate(pos, delta) + if rect.has_point(pos): + if !visible: + show() + else: + pos.x = clamp(pos.x, rect.position.x, rect.position.x + rect.size.x) + pos.y = clamp(pos.y, rect.position.y, rect.position.y + rect.size.y) + if position.distance_squared_to(pos) < 480.0: + position = position.linear_interpolate(pos, delta) + else: + position = pos