add todos app
This commit is contained in:
parent
25a62f9c43
commit
dfff9d383c
28 changed files with 648 additions and 1 deletions
72
todos/global.gd
Normal file
72
todos/global.gd
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
extends Node
|
||||
# https://docs.godotengine.org/en/stable/tutorials/scripting/singletons_autoload.html
|
||||
|
||||
signal state_changed(previous, new)
|
||||
|
||||
enum State {UNLOADED, LOADED}
|
||||
|
||||
const config_path = "user://logue.cfg"
|
||||
|
||||
var config = ConfigFile.new()
|
||||
var db = SQLite.new()
|
||||
var current_scene = null
|
||||
var current_state = State.UNLOADED
|
||||
|
||||
func _ready():
|
||||
var root = get_tree().root
|
||||
current_scene = root.get_child(root.get_child_count() - 1)
|
||||
|
||||
db.verbosity_level = SQLite.VERBOSE
|
||||
|
||||
var err = config.load(config_path)
|
||||
if err == OK:
|
||||
var db_path = config.get_value("general", "db_path")
|
||||
var db_success = load_db(db_path)
|
||||
if not db_success:
|
||||
# HACK: File picker on Android is broken
|
||||
const possible_cfg_paths = ["/foo/bar/logue.cfg"]
|
||||
for possible_path in possible_cfg_paths:
|
||||
if FileAccess.file_exists(possible_path):
|
||||
db_success = load_db(possible_path)
|
||||
if db_success:
|
||||
break
|
||||
|
||||
|
||||
func switch_state(new: State):
|
||||
var old = current_state
|
||||
if old == new:
|
||||
return
|
||||
|
||||
current_state = new
|
||||
emit_signal("state_changed", old, new)
|
||||
#signal state_changed(old, new)
|
||||
|
||||
func load_db(path: String):
|
||||
db.path = path
|
||||
var success = db.open_db()
|
||||
if success:
|
||||
config.set_value("general", "db_path", path)
|
||||
config.save(config_path)
|
||||
switch_state(State.LOADED)
|
||||
else:
|
||||
db.path = ""
|
||||
switch_state(State.UNLOADED)
|
||||
|
||||
func goto_scene(path):
|
||||
call_deferred("_deferred_goto_scene", path)
|
||||
|
||||
func _deferred_goto_scene(path):
|
||||
# It is now safe to remove the current scene.
|
||||
current_scene.free()
|
||||
|
||||
# Load the new scene.
|
||||
var s = ResourceLoader.load(path)
|
||||
|
||||
# Instance the new scene.
|
||||
current_scene = s.instantiate()
|
||||
|
||||
# Add it to the active scene, as child of root.
|
||||
get_tree().root.add_child(current_scene)
|
||||
|
||||
# Optionally, to make it compatible with the SceneTree.change_scene_to_file() API.
|
||||
get_tree().current_scene = current_scene
|
||||
Loading…
Add table
Add a link
Reference in a new issue