102 lines
2.5 KiB
GDScript
102 lines
2.5 KiB
GDScript
extends Node
|
|
signal new_day
|
|
|
|
var raycasts_count = 100
|
|
var raycast_queue = []
|
|
var astar: AStar
|
|
|
|
func _ready():
|
|
set_save_slot(0)
|
|
|
|
enum periods {MORNING, DAY, EVENING, NIGHT}
|
|
var game_day: int = 0
|
|
var day_period: int = periods.MORNING
|
|
var game_hour: int = 0
|
|
var game_minute: int = 0
|
|
|
|
var acc_time:float = 0.0
|
|
var time_active = false
|
|
|
|
func _process(delta):
|
|
if time_active:
|
|
update_time(delta)
|
|
|
|
func update_time(delta):
|
|
acc_time += delta
|
|
if acc_time >= 1.0:
|
|
game_minute += 1
|
|
acc_time -= 1.0
|
|
if game_minute == 60:
|
|
game_minute = 0
|
|
game_hour += 1
|
|
if game_hour == 24:
|
|
game_hour = 0
|
|
game_day += 1
|
|
match(game_hour):
|
|
23,0,1,2,3:
|
|
day_period = periods.NIGHT
|
|
4,5,6,7,8,9,10,11:
|
|
day_period = periods.MORNING
|
|
12,13,14,15,16:
|
|
day_period = periods.DAY
|
|
17,18,19,20,21,22:
|
|
day_period = periods.EVENING
|
|
func start_time():
|
|
time_active = true
|
|
func stop_time():
|
|
time_active = false
|
|
|
|
func visibility_check(ch1, ch2):
|
|
var direction: Vector3 = -ch1.global_transform.basis[2].normalized()
|
|
var to_ch2: Vector3 = (ch2.global_transform.origin - ch1.global_transform.origin).normalized()
|
|
var angle = direction.angle_to(to_ch2)
|
|
if abs(angle) < PI / 2.0:
|
|
var space_state = ch1.get_world().direct_space_state
|
|
var ch1_pos = ch1.global_transform.origin
|
|
var ch2_pos = ch2.global_transform.origin
|
|
var up = Vector3(0, 0.6, 0)
|
|
var front_result = space_state.intersect_ray(ch1_pos + up, ch2_pos + up,
|
|
[ch1, ch2], 0xffff)
|
|
if !front_result.has("collider"):
|
|
return true
|
|
return false
|
|
|
|
var player = null
|
|
var smart_object = []
|
|
const save_slot_base = "user://save"
|
|
var save_slot = ""
|
|
func set_save_slot(id: int):
|
|
save_slot = save_slot_base + str(id)
|
|
var save_data: Dictionary = {}
|
|
|
|
func save_characters():
|
|
for k in get_tree().get_nodes_in_group("characters"):
|
|
var spawner = k.get_meta("spawner")
|
|
var stats = {}
|
|
for s in rpg.save_stats:
|
|
stats[s] = k.get_meta(s)
|
|
spawner.set_meta("stats", stats)
|
|
|
|
func save_game():
|
|
print("save game")
|
|
save_data.game_day = game_day
|
|
save_data.game_hour = game_hour
|
|
save_data.day_period = day_period
|
|
assert(save_slot.length() > 0)
|
|
var fd = File.new()
|
|
fd.open(save_slot, File.WRITE)
|
|
var data = JSON.print(save_data, "\t", true)
|
|
fd.store_string(data)
|
|
fd.close()
|
|
func load_game():
|
|
assert(save_slot.length() > 0)
|
|
var fd = File.new()
|
|
if fd.open(save_slot, File.READ) == OK:
|
|
var data = fd.get_as_text()
|
|
var parse: = JSON.parse(data)
|
|
save_data = parse.result
|
|
game_day = save_data.game_day
|
|
game_hour = save_data.game_hour
|
|
day_period = save_data.day_period
|
|
fd.close()
|