channel-switcher/base modules/channel_controller.gd

78 lines
1.9 KiB
GDScript3
Raw Normal View History

extends Control
class_name Channel
2025-05-16 22:13:34 +10:00
2025-05-15 14:35:32 +10:00
enum Mode{
Online,
Static,
Offline
}
@export var channel_name : String
@export var channel_scene : PackedScene
2025-05-17 12:49:44 +10:00
@export var dead_channel : bool # mark channel as disabled so game logic doesnt try to switch it on
@export var win_result_tex : Texture
@export var lose_result_tex : Texture
@export_group("Node References")
@export var offline_channel_cover : TextureRect
2025-05-15 14:35:32 +10:00
@export var static_channel_cover : TextureRect
@export var game_viewport : SubViewport
2025-05-17 12:49:44 +10:00
@export var result_cover : TextureRect
2025-05-17 17:36:06 +10:00
@export var win_player : AudioStreamPlayer
@export var lose_player : AudioStreamPlayer
2025-05-15 14:35:32 +10:00
var channel_mode : Mode = Mode.Offline
2025-05-17 12:49:44 +10:00
var result_realness : float = 0
2025-05-11 20:11:41 +10:00
func _ready() -> void:
#var new_scene = channel_scene.instantiate()
#game_viewport.add_child(new_scene)
#start_channel(channel_scene)
#if(channel_name == "Platformer"):
#start_channel(channel_scene)
pass
2025-05-11 20:11:41 +10:00
func _process(delta: float) -> void:
2025-05-15 14:35:32 +10:00
offline_channel_cover.visible = channel_mode == Mode.Offline
static_channel_cover.visible = channel_mode == Mode.Static
2025-05-17 12:49:44 +10:00
result_realness -= delta
result_cover.modulate = Color(1,1,1,result_realness)
2025-05-16 15:56:55 +10:00
func start_channel():
2025-05-16 22:13:34 +10:00
start_specific_channel(channel_scene)
2025-05-16 15:56:55 +10:00
func start_specific_channel(scene : PackedScene):
var new_scene = scene.instantiate()
2025-05-16 22:13:34 +10:00
new_scene.game_win.connect(win_channel)
new_scene.game_lose.connect(lose_channel)
game_viewport.add_child(new_scene)
2025-05-15 14:35:32 +10:00
channel_mode = Mode.Online
func end_channel():
2025-05-15 14:35:32 +10:00
channel_mode = Mode.Static
game_viewport.get_child(0).queue_free()
2025-05-15 14:35:32 +10:00
func make_static():
channel_mode = Mode.Static
func make_offline():
channel_mode = Mode.Offline
func win_channel():
2025-05-16 22:13:34 +10:00
GameManager.channel_win.emit()
2025-05-17 12:49:44 +10:00
result_cover.texture = win_result_tex
result_realness = 2
2025-05-17 17:36:06 +10:00
win_player.play()
end_channel()
func lose_channel():
2025-05-16 22:13:34 +10:00
GameManager.channel_lose.emit()
2025-05-17 12:49:44 +10:00
result_cover.texture = lose_result_tex
result_realness = 2
2025-05-17 17:36:06 +10:00
lose_player.play()
end_channel()