Fixed quest system path indicator
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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=[
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user