|
@@ -1,38 +1,37 @@
|
|
extends Node2D
|
|
extends Node2D
|
|
|
|
|
|
-# Member variables
|
|
|
|
-var viewport = null
|
|
|
|
-var sprite = null
|
|
|
|
-var viewport_sprite = null
|
|
|
|
-
|
|
|
|
-var viewport_initial_size = Vector2()
|
|
|
|
-
|
|
|
|
-# variables for the sprite animation
|
|
|
|
|
|
+# These first 3 members are for the sprite animation.
|
|
const MAX_FRAME_FOR_SPRITE = 4
|
|
const MAX_FRAME_FOR_SPRITE = 4
|
|
const FRAME_SWITCH_TIME = 0.2
|
|
const FRAME_SWITCH_TIME = 0.2
|
|
|
|
+
|
|
var frame_switch_timer = 0
|
|
var frame_switch_timer = 0
|
|
|
|
+var viewport_initial_size = Vector2()
|
|
|
|
+
|
|
|
|
+onready var viewport = $Viewport
|
|
|
|
+onready var sprite = $Sprite2D
|
|
|
|
+onready var viewport_sprite = $ViewportSprite
|
|
|
|
|
|
func _ready():
|
|
func _ready():
|
|
|
|
+ # We want Godot to load everything but be hidden for a bit.
|
|
|
|
+ viewport_sprite.modulate = Color(1, 1, 1, 0.01)
|
|
|
|
+ #warning-ignore:return_value_discarded
|
|
get_viewport().connect("size_changed", self, "_root_viewport_size_changed")
|
|
get_viewport().connect("size_changed", self, "_root_viewport_size_changed")
|
|
-
|
|
|
|
- viewport = get_node("Viewport")
|
|
|
|
- sprite = get_node("Sprite")
|
|
|
|
- viewport_sprite = get_node("Viewport_Sprite")
|
|
|
|
-
|
|
|
|
viewport_initial_size = viewport.size
|
|
viewport_initial_size = viewport.size
|
|
|
|
|
|
- # Assign the sprite's texture to the viewport texture
|
|
|
|
|
|
+ # Assign the sprite's texture to the viewport texture.
|
|
viewport.set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
|
|
viewport.set_clear_mode(Viewport.CLEAR_MODE_ONLY_NEXT_FRAME)
|
|
|
|
|
|
- # Let two frames pass to make sure the screen was captured
|
|
|
|
|
|
+ # Let two frames pass to make sure the screen was captured.
|
|
yield(get_tree(), "idle_frame")
|
|
yield(get_tree(), "idle_frame")
|
|
yield(get_tree(), "idle_frame")
|
|
yield(get_tree(), "idle_frame")
|
|
viewport_sprite.texture = viewport.get_texture()
|
|
viewport_sprite.texture = viewport.get_texture()
|
|
|
|
+ # Hide a little bit longer just in case.
|
|
|
|
+ for _unused in range(50):
|
|
|
|
+ yield(get_tree(), "idle_frame")
|
|
|
|
+ viewport_sprite.modulate = Color.white # Default modulate color.
|
|
|
|
|
|
- set_process(true)
|
|
|
|
|
|
|
|
-
|
|
|
|
-# Simple frame-based animation
|
|
|
|
|
|
+# Simple frame-based animation.
|
|
func _process(delta):
|
|
func _process(delta):
|
|
frame_switch_timer += delta
|
|
frame_switch_timer += delta
|
|
if frame_switch_timer >= FRAME_SWITCH_TIME:
|
|
if frame_switch_timer >= FRAME_SWITCH_TIME:
|
|
@@ -41,6 +40,7 @@ func _process(delta):
|
|
if sprite.frame > MAX_FRAME_FOR_SPRITE:
|
|
if sprite.frame > MAX_FRAME_FOR_SPRITE:
|
|
sprite.frame = 0
|
|
sprite.frame = 0
|
|
|
|
|
|
|
|
+
|
|
# Called when the root's viewport size changes (i.e. when the window is resized).
|
|
# Called when the root's viewport size changes (i.e. when the window is resized).
|
|
# This is done to handle multiple resolutions without losing quality.
|
|
# This is done to handle multiple resolutions without losing quality.
|
|
func _root_viewport_size_changed():
|
|
func _root_viewport_size_changed():
|