From 018ebe6647c1f125dd74dd4587c45d17310809b0 Mon Sep 17 00:00:00 2001 From: Tabby <41929769+tabby-cat-nya@users.noreply.github.com> Date: Sat, 17 May 2025 12:49:44 +1000 Subject: [PATCH] channel result feedback --- base modules/channel_controller.gd | 13 ++++++++-- base modules/test_channel.tscn | 20 +++++++++++++-- games/platformer/platformer_channel.gd | 2 ++ sprites/cross.png | Bin 0 -> 5677 bytes sprites/cross.png.import | 34 +++++++++++++++++++++++++ sprites/tick.png | Bin 0 -> 6238 bytes sprites/tick.png.import | 34 +++++++++++++++++++++++++ 7 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 sprites/cross.png create mode 100644 sprites/cross.png.import create mode 100644 sprites/tick.png create mode 100644 sprites/tick.png.import diff --git a/base modules/channel_controller.gd b/base modules/channel_controller.gd index c31632b..13e7b5b 100644 --- a/base modules/channel_controller.gd +++ b/base modules/channel_controller.gd @@ -12,14 +12,17 @@ enum Mode{ @export var channel_name : String @export var channel_scene : PackedScene -@export var dead_channel : bool +@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 @export var static_channel_cover : TextureRect @export var game_viewport : SubViewport +@export var result_cover : TextureRect var channel_mode : Mode = Mode.Offline - +var result_realness : float = 0 func _ready() -> void: @@ -34,6 +37,8 @@ func _ready() -> void: func _process(delta: float) -> void: offline_channel_cover.visible = channel_mode == Mode.Offline static_channel_cover.visible = channel_mode == Mode.Static + result_realness -= delta + result_cover.modulate = Color(1,1,1,result_realness) func start_channel(): start_specific_channel(channel_scene) @@ -57,8 +62,12 @@ func make_offline(): func win_channel(): GameManager.channel_win.emit() + result_cover.texture = win_result_tex + result_realness = 2 end_channel() func lose_channel(): GameManager.channel_lose.emit() + result_cover.texture = lose_result_tex + result_realness = 2 end_channel() diff --git a/base modules/test_channel.tscn b/base modules/test_channel.tscn index bf6cbeb..ae1f422 100644 --- a/base modules/test_channel.tscn +++ b/base modules/test_channel.tscn @@ -1,12 +1,14 @@ -[gd_scene load_steps=10 format=3 uid="uid://63rik2noj8id"] +[gd_scene load_steps=12 format=3 uid="uid://63rik2noj8id"] [ext_resource type="Script" uid="uid://h43mmpjmmir4" path="res://base modules/channel_controller.gd" id="1_r07ln"] [ext_resource type="Texture2D" uid="uid://cyo0wl4dt3td1" path="res://sprites/offline_channel.png" id="2_01b3p"] +[ext_resource type="Texture2D" uid="uid://bnjisd726f3na" path="res://sprites/tick.png" id="2_7qn6j"] [ext_resource type="Texture2D" uid="uid://d2xkwf58dxlvh" path="res://sprites/static/Television_static.gif_frame_00000.jpg" id="3_w8dl7"] [ext_resource type="Texture2D" uid="uid://qr2f4j3tofos" path="res://sprites/static/Television_static.gif_frame_00001.jpg" id="4_sawva"] [ext_resource type="Texture2D" uid="uid://55teduyyhqhs" path="res://sprites/static/Television_static.gif_frame_00002.jpg" id="5_7qn6j"] [ext_resource type="Texture2D" uid="uid://b2x8kmjcv1te" path="res://sprites/static/Television_static.gif_frame_00003.jpg" id="6_2hkew"] [ext_resource type="Texture2D" uid="uid://ce44420oiv8ag" path="res://sprites/static/Television_static.gif_frame_00004.jpg" id="7_5mkxt"] +[ext_resource type="Texture2D" uid="uid://c70rsm4qog0st" path="res://sprites/cross.png" id="8_sawva"] [sub_resource type="ViewportTexture" id="ViewportTexture_iix04"] viewport_path = NodePath("GameViewport") @@ -24,7 +26,7 @@ frame_3/duration = 1.0 frame_4/texture = ExtResource("7_5mkxt") frame_4/duration = 1.0 -[node name="Control" type="Control" node_paths=PackedStringArray("offline_channel_cover", "static_channel_cover", "game_viewport")] +[node name="Control" type="Control" node_paths=PackedStringArray("offline_channel_cover", "static_channel_cover", "game_viewport", "result_cover")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -35,9 +37,12 @@ size_flags_horizontal = 3 size_flags_vertical = 3 script = ExtResource("1_r07ln") channel_name = "Test" +win_result_tex = ExtResource("2_7qn6j") +lose_result_tex = ExtResource("8_sawva") offline_channel_cover = NodePath("OfflineChannelCover") static_channel_cover = NodePath("Static") game_viewport = NodePath("GameViewport") +result_cover = NodePath("GameResult") [node name="GameDisplay" type="TextureRect" parent="."] layout_mode = 1 @@ -73,6 +78,17 @@ grow_vertical = 2 texture = SubResource("AnimatedTexture_8t1w7") expand_mode = 2 +[node name="GameResult" type="TextureRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("8_sawva") +expand_mode = 2 +stretch_mode = 5 + [node name="GameViewport" type="SubViewport" parent="."] handle_input_locally = false canvas_item_default_texture_filter = 0 diff --git a/games/platformer/platformer_channel.gd b/games/platformer/platformer_channel.gd index 1ee1e26..894c158 100644 --- a/games/platformer/platformer_channel.gd +++ b/games/platformer/platformer_channel.gd @@ -13,6 +13,8 @@ func _process(delta: float) -> void: modulate = Color.WHITE else: modulate = Color.DIM_GRAY + result_realness -= delta + result_cover.modulate = Color(1,1,1,result_realness) func start_specific_channel(scene : PackedScene): var new_scene = scene.instantiate() diff --git a/sprites/cross.png b/sprites/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..689e9252b674abc292b3a96db0ac03589ff23180 GIT binary patch literal 5677 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 CRnU9@ literal 0 HcmV?d00001 diff --git a/sprites/cross.png.import b/sprites/cross.png.import new file mode 100644 index 0000000..564f75d --- /dev/null +++ b/sprites/cross.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c70rsm4qog0st" +path="res://.godot/imported/cross.png-7a350973591712bd0fedf6344eb40f07.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/cross.png" +dest_files=["res://.godot/imported/cross.png-7a350973591712bd0fedf6344eb40f07.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/sprites/tick.png b/sprites/tick.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8efc76aa922260b6f341229bb3dacac91b6b66 GIT binary patch literal 6238 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