mirror of
https://gitlab.com/MaddoScientisto/cirnogodot.git
synced 2026-06-01 11:15:33 +00:00
Title screen rotating crystal
This commit is contained in:
parent
d25696425b
commit
9ae79d54bb
10 changed files with 406 additions and 1 deletions
78
Scripts/Tools/AnimatedTextureRect.gd
Normal file
78
Scripts/Tools/AnimatedTextureRect.gd
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
@tool
|
||||
@icon("res://addons/AnimatedTextureRect/AnimatedTextureRect.png")
|
||||
extends TextureRect
|
||||
class_name AnimatedTextureRect
|
||||
|
||||
@export var Frames: SpriteFrames = null
|
||||
var _previous_frames: SpriteFrames = null
|
||||
var _current_animation: StringName = "default"
|
||||
var autoplay: StringName = ""
|
||||
var _current_frame: int
|
||||
var _frame_timer: float = 0.0
|
||||
var _animation_stopped: bool = false
|
||||
|
||||
# Signals
|
||||
signal animation_finished
|
||||
signal animation_changed
|
||||
signal animation_looped
|
||||
signal frame_changed
|
||||
signal sprite_frames_changed
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready() -> void:
|
||||
pass # Replace with function body.
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta: float) -> void:
|
||||
if !is_instance_valid(Frames): return
|
||||
|
||||
_frame_timer += delta
|
||||
|
||||
if Frames != _previous_frames:
|
||||
sprite_frames_changed.emit()
|
||||
_sprite_frames_changed()
|
||||
|
||||
var frame_FPS: float = 1.0 / Frames.get_animation_speed(_current_animation)
|
||||
var frame_delay: float = frame_FPS * Frames.get_frame_duration(_current_animation, _current_frame)
|
||||
|
||||
if !_animation_stopped:
|
||||
if _frame_timer > frame_delay:
|
||||
_frame_timer -= frame_delay
|
||||
_current_frame += 1
|
||||
frame_changed.emit()
|
||||
if _current_frame >= Frames.get_frame_count(_current_animation):
|
||||
if Frames.get_animation_loop(_current_animation):
|
||||
_current_frame = 0
|
||||
animation_looped.emit()
|
||||
else:
|
||||
_current_frame -= 1
|
||||
_animation_stopped = true
|
||||
animation_finished.emit()
|
||||
|
||||
texture = Frames.get_frame_texture(_current_animation, _current_frame)
|
||||
|
||||
func play(animation: StringName) -> void:
|
||||
for _names in Frames.get_animation_names():
|
||||
if animation == _names:
|
||||
if _current_animation != animation: animation_changed.emit()
|
||||
_current_animation = animation
|
||||
_animation_stopped = false
|
||||
return
|
||||
|
||||
func stop() -> void:
|
||||
_animation_stopped = true
|
||||
_frame_timer = 0.0
|
||||
|
||||
@warning_ignore("native_method_override")
|
||||
func get_class() -> String:
|
||||
return "AnimatedTextureRect"
|
||||
|
||||
func _sprite_frames_changed() -> void:
|
||||
if autoplay != "":
|
||||
_current_animation = autoplay
|
||||
else:
|
||||
if is_instance_valid(Frames):
|
||||
# Default to the first animation in the list
|
||||
_current_animation = Frames.get_animation_names()[0]
|
||||
else:
|
||||
_current_animation = "default"
|
||||
1
Scripts/Tools/AnimatedTextureRect.gd.uid
Normal file
1
Scripts/Tools/AnimatedTextureRect.gd.uid
Normal file
|
|
@ -0,0 +1 @@
|
|||
uid://w85hem1ec8cq
|
||||
Loading…
Add table
Add a link
Reference in a new issue