Add crashing prevention

This commit is contained in:
JeremyStar™ 2024-05-17 01:49:37 +02:00
parent 527bd23363
commit 126ca9f412
Signed by: JeremyStarTM
GPG key ID: E366BAEF67E4704D
2 changed files with 13 additions and 3 deletions

View file

@ -28,7 +28,8 @@ var presenloader: Node
# Presentation data # Presentation data
var entrypoint: PresencodeEntrypoint var entrypoint: PresencodeEntrypoint
var manifest: Dictionary var manifest: Dictionary
var current_slide: int = -1 var current_slide: int = 0
var slide_switch_in_progress: bool = false
# +++ initialization +++ # +++ initialization +++
func _init(core_new: Core, presenloader_new: Node) -> void: func _init(core_new: Core, presenloader_new: Node) -> void:
@ -56,13 +57,17 @@ func _process(_delta: float) -> void:
# +++ slide management +++ # +++ slide management +++
func switch_slide(new_slide: int) -> PresencodeTypes.PresencodeError: func switch_slide(new_slide: int) -> PresencodeTypes.PresencodeError:
if slide_switch_in_progress: return PresencodeTypes.PresencodeError.ALREADY_RUNNING
slide_switch_in_progress = true
var old_slide: int = current_slide var old_slide: int = current_slide
if new_slide < 0: if new_slide < 0:
logger.error(core.misc.stringify_variables("Invalid slide %slide%", { "slide": new_slide })) logger.error(core.misc.stringify_variables("Invalid slide %slide%", { "slide": new_slide }))
slide_switch_in_progress = false
return PresencodeTypes.PresencodeError.INVALID_SLIDE return PresencodeTypes.PresencodeError.INVALID_SLIDE
if new_slide > manifest["slides"]: if new_slide > manifest["slides"]:
logger.error(core.misc.stringify_variables("Invalid slide %slide%", { "slide": new_slide })) logger.error(core.misc.stringify_variables("Invalid slide %slide%", { "slide": new_slide }))
slide_switch_in_progress = false
return PresencodeTypes.PresencodeError.INVALID_SLIDE return PresencodeTypes.PresencodeError.INVALID_SLIDE
logger.info(core.misc.stringify_variables("Switching from slide %old% to %new%", { "old": old_slide, "new": new_slide })) logger.info(core.misc.stringify_variables("Switching from slide %old% to %new%", { "old": old_slide, "new": new_slide }))
@ -74,13 +79,16 @@ func switch_slide(new_slide: int) -> PresencodeTypes.PresencodeError:
# Call switch_slide() # Call switch_slide()
logger.verb("Switching slide") logger.verb("Switching slide")
await entrypoint.switch_slide(new_slide) await entrypoint.switch_to_slide(new_slide)
# Play AFTER animation # Play AFTER animation
if manifest["animations"]: if manifest["animations"]:
logger.verb("Starting AFTER animation") logger.verb("Starting AFTER animation")
await entrypoint.play_animation(PresencodeTypes.AnimationStage.AFTER, old_slide, new_slide) await entrypoint.play_animation(PresencodeTypes.AnimationStage.AFTER, old_slide, new_slide)
current_slide = new_slide
slide_switch_in_progress = false
return PresencodeTypes.PresencodeError.OK return PresencodeTypes.PresencodeError.OK
func remove_all_slides() -> void: func remove_all_slides() -> void:

View file

@ -19,7 +19,8 @@ class_name PresencodeTypes
enum PresencodeError { enum PresencodeError {
OK, OK,
INVALID_SLIDE INVALID_SLIDE,
ALREADY_RUNNING,
} }
enum AnimationStage { BEFORE, AFTER } enum AnimationStage { BEFORE, AFTER }
@ -27,4 +28,5 @@ func presencodeerror_string(error: PresencodeError) -> String:
match(error): match(error):
PresencodeError.OK: return "OK" PresencodeError.OK: return "OK"
PresencodeError.INVALID_SLIDE: return "Invalid Slide" PresencodeError.INVALID_SLIDE: return "Invalid Slide"
PresencodeError.ALREADY_RUNNING: return "Already running"
_: return "<invalid enum value>" _: return "<invalid enum value>"