This repository was archived by the owner on Apr 22, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathInkRuntimeManager.gd
More file actions
83 lines (70 loc) · 2.1 KB
/
InkRuntimeManager.gd
File metadata and controls
83 lines (70 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
extends Node
onready var InkRuntime = load("res://addons/inkgd/runtime.gd");
onready var Story = load("res://addons/inkgd/runtime/story.gd");
var story
export var json_story = "res://ink/main.json"
export var auto_continue_newline_text = true
signal ink_ready
signal ink_unavailable
signal ink_update_text(text)
signal ink_update_choices(choices)
signal ink_update_tags(tags)
signal ink_done
func _ready():
call_deferred("_add_runtime")
func _exit_tree():
call_deferred("_remove_runtime")
func _add_runtime():
InkRuntime.init(get_tree().root)
emit_signal("ink_ready")
func _remove_runtime():
InkRuntime.deinit(get_tree().root)
emit_signal("ink_unavailable")
func load_story():
var ink_story = File.new()
if ink_story.file_exists(json_story):
ink_story.open(json_story, File.READ)
var content = ink_story.get_as_text()
ink_story.close()
self.story = Story.new(content)
return true
else:
return false
func save_state(file_name="user://save.json"):
var save_file = File.new()
if save_file.file_exists(file_name):
save_file.open(file_name, File.WRITE)
var json = story.state.to_json();
save_file.store_line(json);
save_file.close()
else:
return false
func load_state(file_name="user://save.json"):
var save_file = File.new()
if save_file.file_exists(file_name):
save_file.open(file_name, File.READ)
var json = save_file.get_as_text();
var save_exists = !json.empty();
if save_exists:
story.state.load_json(save_file.get_as_text())
save_file.close()
return save_exists
else:
return false
func has_choices():
return story.current_choices != null && story.current_choices.size() > 0
func at_end():
return !story.can_continue && !has_choices()
func continue(with_choice = null):
if !at_end():
if with_choice != null:
story.choose_choice_index(with_choice)
story.continue()
emit_signal("ink_update_tags", story.current_tags)
if story.current_text == "\n" && auto_continue_newline_text:
self.continue()
return
emit_signal("ink_update_text", story.current_text)
emit_signal("ink_update_choices", story.current_choices)
if at_end():
emit_signal("ink_done")