Presencode/example/test.gd
JeremyStarTM e158173104 Update source code
- [Console.tscn, src/console.gd, src/console_info.gd, src/console_expressionscript.gd] Add (mostly uncommented) debugging console
- [example/test.gd] Optimize example presentation controller
- [src/loader.gd, src/pmana.gd] Move click overlay into Loader
- [src/pmana.gd] Add check against invalid controller scripts
- [src/pmana.gd] Create seperate pmana.shutdown() function to handle shutdowns during presentations
- [src/preader.gd] Add checks against empty manifest variable
- [src/preader.gd] Fix bug in get_authors()
- Change/optimize various other smaller things
2024-01-14 21:52:38 +01:00

129 lines
5.5 KiB
GDScript

##############################################################################
### PRESENCODE TEST FILE ###
### Copyright (c) 2024 JeremyStarTM & Contributors ###
### Licensed under the GNU General Public License v3 ###
### ###
### This program is free software: you can redistribute it and/or modify ###
### it under the terms of the GNU General Public License as published by ###
### the Free Software Foundation, either version 3 of the License, or ###
### (at your option) any later version. ###
### ###
### This program is distributed in the hope that it will be useful, ###
### but WITHOUT ANY WARRANTY; without even the implied warranty of ###
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ###
### GNU General Public License for more details. ###
### ###
### You should have received a copy of the GNU General Public License ###
### along with this program. If not, see <https://www.gnu.org/licenses/>. ###
##############################################################################
### example/test.gd (Example presentation script) ###
### ###
### This test file serves as the entrypoint for the example presentation ###
### bundled in Presencode's source code. It's only interesting for ###
### developers working on Presencode and for people wanting to make their ###
### own Presencode presentations. ###
##############################################################################
extends Node
# Viewport
var viewport: Control = null
# Resources
var resources_files: Array = ["foxxo.jpg", "meme.jpg"]
var resources: Dictionary = {}
# Presentation controller registration
func _ready() -> void:
# Print debug message
logger.diag("Example presentation entrypoint has been loaded into memory")
# Load resources into memory
for resource_name in resources_files:
var resource = preader.read_file("images/" + resource_name)
if resource_name.ends_with(".jpg"):
var image: Image = Image.new()
image.load_jpg_from_buffer(resource)
resource = ImageTexture.create_from_image(image)
elif resource_name.ends_with(".png"):
var image: Image = Image.new()
image.load_png_from_buffer(resource)
resource = ImageTexture.create_from_image(image)
#elif resource_name.ends_with(".gif"):
# resource = GifManager.sprite_frames_from_buffer(resource)
resources.merge({resource_name: resource}, true)
# Register controller with these arguments:
## version: 1
## max slides: 3
## animations: no
## quit on last slide: no
## controller: this script
pmana.register(1, 2, false, false, self.get_path())
# pmana has registered this controller
func presentation_start(viewport_: Control) -> void:
logger.diag("presentation_start() called")
viewport = viewport_
# Hide log output
pmana.hide_log()
# Switch to slide 0
# Note: We explicitly don't call pmana.change_slide(0) here as
# current_slide is set to 0 already. pmana expects that the
# presentation controller switches to slide zero automatically.
change_slide(0)
# Presentation has ended
## This function will only be called if the controller or the user exceeds
## the maximum amount of slides by one (if quit_last_slide=true) or by two
## (if quit_last_slide=false) and Presencode wants to shut down.
## This is useful as you can unregister this controller and register another
## without calling this function.
func presentation_end() -> void:
logger.diag("presentation_end() called")
queue_free()
# Change the current slide to another one
func change_slide(new_slide: int) -> void:
logger.diag("change_slide(new_slide=" + str(new_slide) + ") called")
match(new_slide):
0:
logger.info("Displaying slide about memes")
pmana.clear_viewport()
var npr: NinePatchRect = NinePatchRect.new()
npr.name = "Educational Meme"
npr.texture = resources["meme.jpg"]
npr.size = Vector2(680, 453)
npr.position = Vector2(100, 50)
viewport.add_child(npr)
1:
logger.info("Displaying slide about foxes")
pmana.clear_viewport()
var npr: NinePatchRect = NinePatchRect.new()
npr.name = "Fox"
npr.texture = resources["foxxo.jpg"]
npr.size = Vector2(400, 400)
npr.position = misc.get_center_float(viewport.size, npr.size)
viewport.add_child(npr)
2:
logger.info("Displaying slide about mario")
pmana.clear_viewport()
# var as2d: AnimatedSprite2D = AnimatedSprite2D.new()
# as2d.name = "Mario Melee"
# as2d.sprite_frames = resources["mario.gif"]
# var size: Vector2 = as2d.sprite_frames.get_frame_texture(as2d.sprite_frames.get_animation_names()[0], 0).get_size()
# as2d.position = Vector2(viewport.size.x-size.x, viewport.size.y-size.y)
# viewport.add_child(as2d)
# as2d.play()
_:
logger.error("Invalid slide")
# Display the end slide, unused if quit_last_slide=true
func display_end_slide() -> void:
logger.diag("display_end_slide() called")
logger.info("Displaying end slide")
pmana.clear_viewport()
var rtl: RichTextLabel = RichTextLabel.new()
rtl.name = "End"
rtl.text = "THE END"
rtl.scroll_active = false
rtl.size = Vector2(69, 22)
rtl.position = misc.get_center_float(viewport.size, rtl.size)
viewport.add_child(rtl)