Fixed quest system path indicator

This commit is contained in:
Segey Lapin
2020-04-15 14:54:49 +03:00
parent 32c5212209
commit 4e3135559f
6 changed files with 57 additions and 15 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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")

View File

@@ -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()

View File

@@ -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=[

View File

@@ -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