|
|
|
extends Node
|
|
|
|
|
|
|
|
|
|
|
|
# Goal
|
|
|
|
# ====
|
|
|
|
#
|
|
|
|
# Set up Majority Judgment polls using a variety of providers,
|
|
|
|
# such a the Twitch Chat, SMS (Android only)…
|
|
|
|
#
|
|
|
|
|
|
|
|
|
|
|
|
# Unused (see Config.gd) #
|
|
|
|
var config:ConfigResource
|
|
|
|
var config_path := "user://settings.tres"
|
|
|
|
##########################
|
|
|
|
|
|
|
|
# Add your provider here, as well as in the SettingsForm scene.
|
|
|
|
var registered_providers = [
|
|
|
|
'MajorityJudgmentDemoProvider',
|
|
|
|
'MajorityJudgmentTwitchChatProvider',
|
|
|
|
'MajorityJudgmentAndroidSmsProvider',
|
|
|
|
]
|
|
|
|
|
|
|
|
const ONGOING_POLL_FILEPATH = "user://ongoing_poll.tres"
|
|
|
|
var ongoing_poll:MajorityJudgmentPoll
|
|
|
|
|
|
|
|
|
|
|
|
func _ready():
|
|
|
|
load_config()
|
|
|
|
# load_ongoing_poll()
|
|
|
|
|
|
|
|
|
|
|
|
func go_to_main_menu():
|
|
|
|
var _done = get_tree().change_scene("res://gui/MainMenu.tscn")
|
|
|
|
|
|
|
|
|
|
|
|
func go_to_settings():
|
|
|
|
var _done = get_tree().change_scene("res://gui/forms/SettingsForm.tscn")
|
|
|
|
|
|
|
|
|
|
|
|
func go_to_twitch_settings():
|
|
|
|
var _done = get_tree().change_scene("res://gui/forms/twitch_config/TwitchAuthConfig.tscn")
|
|
|
|
|
|
|
|
|
|
|
|
func load_config():
|
|
|
|
if File.new().file_exists(self.config_path):
|
|
|
|
self.config = load(self.config_path)
|
|
|
|
if null == self.config:
|
|
|
|
self.config = ConfigResource.new()
|
|
|
|
|
|
|
|
|
|
|
|
func save_config():
|
|
|
|
var saved = ResourceSaver.save(self.config_path, self.config)
|
|
|
|
if OK != saved:
|
|
|
|
printerr("Failed to save configuration.")
|
|
|
|
|
|
|
|
|
|
|
|
func start_poll(poll):
|
|
|
|
prints("Starting poll", poll)
|
|
|
|
# Prepare timer for automatic closing of the poll?
|
|
|
|
# Move to poll results scene
|
|
|
|
assert(null == self.ongoing_poll, "Cannot start another poll while one is ongoing.")
|
|
|
|
self.ongoing_poll = poll
|
|
|
|
var _done = get_tree().change_scene("res://addons/majority_judgment/nodes/MajorityJudgmentLinearResultsControl.tscn")
|
|
|
|
yield(get_tree(), "idle_frame")
|
|
|
|
get_tree().current_scene.align_with_bottom = Config.get_parameter("align_with_bottom", false)
|
|
|
|
get_tree().current_scene.set_poll(poll) # last
|
|
|
|
|
|
|
|
|
|
|
|
func close_ongoing_poll():
|
|
|
|
assert(self.ongoing_poll, "No ongoing poll to close.")
|
|
|
|
|
|
|
|
var saved = ResourceSaver.save(
|
|
|
|
"user://poll_%d.tres" % [self.ongoing_poll.opened_at],
|
|
|
|
self.ongoing_poll,
|
|
|
|
ResourceSaver.FLAG_OMIT_EDITOR_PROPERTIES
|
|
|
|
)
|
|
|
|
if OK != saved:
|
|
|
|
printerr("Failed to save closing poll to disk: ERROR " + saved)
|
|
|
|
|
|
|
|
self.ongoing_poll = null
|
|
|
|
|
|
|
|
|
|
|
|
func save_ongoing_poll():
|
|
|
|
assert(self.ongoing_poll, "No ongoing poll to save.")
|
|
|
|
var saved = ResourceSaver.save(ONGOING_POLL_FILEPATH, self.ongoing_poll)
|
|
|
|
if OK != saved:
|
|
|
|
printerr("Failed to save ongoing poll to disk: ERROR " + saved)
|
|
|
|
|
|
|
|
|
|
|
|
func has_ongoing_poll():
|
|
|
|
if null != self.ongoing_poll:
|
|
|
|
return true
|
|
|
|
var file = File.new()
|
|
|
|
return file.file_exists(ONGOING_POLL_FILEPATH)
|
|
|
|
|
|
|
|
|
|
|
|
func load_ongoing_poll():
|
|
|
|
# assert(null == ongoing_poll, "There already is an ongoing poll.")
|
|
|
|
var file := File.new()
|
|
|
|
if file.file_exists(ONGOING_POLL_FILEPATH):
|
|
|
|
print("Loading ongoing poll…")
|
|
|
|
# var _ongoing_poll = ResourceLoader.load(ONGOING_POLL_FILEPATH, "MajorityJudgmentPoll")
|
|
|
|
var _ongoing_poll = ResourceLoader.load(ONGOING_POLL_FILEPATH)
|
|
|
|
print("Ongoing poll loaded!")
|
|
|
|
start_poll(_ongoing_poll)
|
|
|
|
else:
|
|
|
|
print("No ongoing poll to load.")
|
|
|
|
|
|
|
|
|
|
|
|
func get_providers() -> Array:
|
|
|
|
var providers = Array()
|
|
|
|
for registered_provider in registered_providers:
|
|
|
|
var enabled = Config.get_parameter(
|
|
|
|
"provider_%s_enabled" % registered_provider,
|
|
|
|
false # default
|
|
|
|
)
|
|
|
|
if enabled:
|
|
|
|
var provider = load(
|
|
|
|
"res://addons/majority_judgment/providers/%s.gd"
|
|
|
|
%
|
|
|
|
registered_provider
|
|
|
|
).new()
|
|
|
|
providers.append(provider)
|
|
|
|
return providers
|
|
|
|
|
|
|
|
|
|
|
|
func can_have_sms_provider() -> bool:
|
|
|
|
return Engine.has_singleton("AndroidSmsReceiver")
|
|
|
|
|
|
|
|
|
|
|
|
func get_now() -> int:
|
|
|
|
return OS.get_unix_time()
|
|
|
|
|
|
|
|
|
|
|
|
func timer(duration:int) -> SceneTreeTimer:
|
|
|
|
return get_tree().create_timer(duration)
|