Fixed quest system path indicator
This commit is contained in:
@@ -5,6 +5,9 @@ var raycasts_count = 100
|
|||||||
var raycast_queue = []
|
var raycast_queue = []
|
||||||
var astar: AStar
|
var astar: AStar
|
||||||
|
|
||||||
|
# Need to make more generic
|
||||||
|
var exit_door: Node
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
set_save_slot(0)
|
set_save_slot(0)
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,8 @@ var quest_triggers = [
|
|||||||
"desc": "You wake up from noise. Explore the building to find the source.",
|
"desc": "You wake up from noise. Explore the building to find the source.",
|
||||||
"trigger": ["once", 0, 0, 10],
|
"trigger": ["once", 0, 0, 10],
|
||||||
"objectives": [
|
"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
|
return _title
|
||||||
class ObjectiveWalkto extends QuestObjective:
|
class ObjectiveWalkto extends QuestObjective:
|
||||||
var where = Vector3()
|
var where = Vector3()
|
||||||
var meta = ""
|
|
||||||
var radius = 0.0
|
var radius = 0.0
|
||||||
var indicator = preload("res://ui/quest_indicator.tscn")
|
var indicator = preload("res://ui/quest_indicator.tscn")
|
||||||
var ind_i: Node2D
|
var ind_i: Node2D
|
||||||
var old_pos = Vector3()
|
var old_pos = Vector3()
|
||||||
func _init(t, d, w, r).(t, d):
|
func _init(t, d, w, r).(t, d):
|
||||||
meta = w
|
where = w
|
||||||
radius = r
|
radius = r
|
||||||
func activate():
|
func activate():
|
||||||
active = true
|
active = true
|
||||||
@@ -128,6 +128,7 @@ class ObjectiveWalkto extends QuestObjective:
|
|||||||
func finish():
|
func finish():
|
||||||
active = false
|
active = false
|
||||||
ind_i.queue_free()
|
ind_i.queue_free()
|
||||||
|
print(_title, " FINISHED")
|
||||||
func update():
|
func update():
|
||||||
if !active:
|
if !active:
|
||||||
return
|
return
|
||||||
@@ -148,9 +149,11 @@ class ObjectiveWalkto extends QuestObjective:
|
|||||||
else:
|
else:
|
||||||
ind_i.target = where + Vector3(0, 1, 0) * 0.3
|
ind_i.target = where + Vector3(0, 1, 0) * 0.3
|
||||||
old_pos = player_pos
|
old_pos = player_pos
|
||||||
|
if old_pos.distance_to(where) < radius:
|
||||||
|
complete = true
|
||||||
func save():
|
func save():
|
||||||
var save_data = {}
|
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.active = active
|
||||||
save_data.complete = complete
|
save_data.complete = complete
|
||||||
return save_data
|
return save_data
|
||||||
@@ -182,7 +185,24 @@ func create_objective(v):
|
|||||||
var o_desc = v[2]
|
var o_desc = v[2]
|
||||||
var o_meta = v[3]
|
var o_meta = v[3]
|
||||||
var o_radius = v[4]
|
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 obj
|
||||||
return null
|
return null
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ var room = preload("res://scenes/maps/interior2.tscn")
|
|||||||
var bed = preload("res://scenes/furniture/bed.tscn")
|
var bed = preload("res://scenes/furniture/bed.tscn")
|
||||||
var table_chairs = preload("res://scenes/furniture/table_chairs.tscn")
|
var table_chairs = preload("res://scenes/furniture/table_chairs.tscn")
|
||||||
var closet = preload("res://scenes/furniture/closet.tscn")
|
var closet = preload("res://scenes/furniture/closet.tscn")
|
||||||
var size_x = 4
|
var size_x = 3
|
||||||
var size_y = 5
|
var size_y = 3
|
||||||
var floors = 5
|
var floors = 6
|
||||||
var w = 10
|
var w = 10
|
||||||
var h = 8
|
var h = 8
|
||||||
var dungeon = []
|
var dungeon = []
|
||||||
@@ -142,9 +142,12 @@ var dungeon_ids = []
|
|||||||
func _process(_delta):
|
func _process(_delta):
|
||||||
match(state):
|
match(state):
|
||||||
0:
|
0:
|
||||||
|
global.save_data.dungeon_seed = OS.get_unix_time()
|
||||||
global.load_game()
|
global.load_game()
|
||||||
|
seed(global.save_data.dungeon_seed)
|
||||||
if global.save_data.has("dungeon"):
|
if global.save_data.has("dungeon"):
|
||||||
dungeon_save = global.save_data.dungeon
|
dungeon_save = global.save_data.dungeon
|
||||||
|
seed(global.save_data.dungeon_seed)
|
||||||
state = 1
|
state = 1
|
||||||
1:
|
1:
|
||||||
dungeon.resize(floors * size_x * size_y)
|
dungeon.resize(floors * size_x * size_y)
|
||||||
@@ -170,6 +173,7 @@ func _process(_delta):
|
|||||||
22:
|
22:
|
||||||
for r in dungeon:
|
for r in dungeon:
|
||||||
r.create_rooms()
|
r.create_rooms()
|
||||||
|
assert(global.exit_door)
|
||||||
state = 23
|
state = 23
|
||||||
23:
|
23:
|
||||||
furniture_nodes = get_tree().get_nodes_in_group("furniture")
|
furniture_nodes = get_tree().get_nodes_in_group("furniture")
|
||||||
|
|||||||
@@ -217,19 +217,24 @@ func wall2window(n):
|
|||||||
# else:
|
# else:
|
||||||
# window_i = door.instance()
|
# window_i = door.instance()
|
||||||
if has_meta("exit_room") && !outside_door_placed:
|
if has_meta("exit_room") && !outside_door_placed:
|
||||||
|
print("exit room place door")
|
||||||
window_i = outside_door.instance()
|
window_i = outside_door.instance()
|
||||||
outside_door_placed = true
|
outside_door_placed = true
|
||||||
|
global.exit_door = window_i
|
||||||
else:
|
else:
|
||||||
window_i = window.instance()
|
window_i = window.instance()
|
||||||
add_child(window_i)
|
add_child(window_i)
|
||||||
window_i.transform = window_xform
|
window_i.transform = window_xform
|
||||||
n.queue_free()
|
n.queue_free()
|
||||||
func create_rooms():
|
func create_rooms():
|
||||||
|
assert(exits.size() > 0)
|
||||||
if has_meta("master_room"):
|
if has_meta("master_room"):
|
||||||
master_room()
|
master_room()
|
||||||
elif has_meta("kitchen_room"):
|
elif has_meta("kitchen_room"):
|
||||||
master_room()
|
master_room()
|
||||||
elif has_meta("exit_room"):
|
elif has_meta("exit_room"):
|
||||||
|
assert(windows.size() > 0)
|
||||||
|
master_room()
|
||||||
for e in get_children():
|
for e in get_children():
|
||||||
if e.is_in_group("furniture"):
|
if e.is_in_group("furniture"):
|
||||||
e.queue_free()
|
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 )
|
"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 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="path_west" type="Path" parent="." index="1" groups=[
|
[node name="path_west" type="Path" parent="." index="1" groups=[
|
||||||
|
|||||||
@@ -17,11 +17,19 @@ func _ready():
|
|||||||
func _process(delta):
|
func _process(delta):
|
||||||
var pos = get_viewport().get_camera().unproject_position(target)
|
var pos = get_viewport().get_camera().unproject_position(target)
|
||||||
rect = get_viewport_rect()
|
rect = get_viewport_rect()
|
||||||
if rect.has_point(pos):
|
rect.grow(-8.0)
|
||||||
if !visible:
|
if get_viewport().get_camera().is_position_behind(target):
|
||||||
show()
|
if visible:
|
||||||
|
hide()
|
||||||
else:
|
else:
|
||||||
pos.x = clamp(pos.x, rect.position.x, rect.position.x + rect.size.x)
|
if rect.has_point(pos):
|
||||||
pos.y = clamp(pos.x, rect.position.x, rect.position.x + rect.size.x)
|
if !visible:
|
||||||
position = position.linear_interpolate(pos, delta)
|
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