From 02aa6f3e8b9e99f657640b6f204301b80bc3b0df Mon Sep 17 00:00:00 2001 From: msk <15199219+muskit@users.noreply.github.com> Date: Sat, 16 Sep 2023 18:54:35 -0700 Subject: [PATCH] note instantiating fixes, hold note rendering experimentation --- Scenes/Play.tscn | 148 +++++++++++---------- Scripts/Data/Chart/Chart.cs | 14 +- Scripts/Scenes/Play.cs | 26 ++-- Scripts/Things/TunnelObjects/THNoteHold.cs | 2 + Things/HitLine.tscn | 71 ++++++++++ Things/TunnelObjects/Notes/NoteHold.tscn | 24 ++++ 6 files changed, 198 insertions(+), 87 deletions(-) create mode 100644 Things/HitLine.tscn create mode 100644 Things/TunnelObjects/Notes/NoteHold.tscn diff --git a/Scenes/Play.tscn b/Scenes/Play.tscn index dc917f8..1bf9bb1 100644 --- a/Scenes/Play.tscn +++ b/Scenes/Play.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=13 format=3 uid="uid://bqh00ot0csqmk"] +[gd_scene load_steps=15 format=3 uid="uid://bqh00ot0csqmk"] [ext_resource type="Script" path="res://Scripts/Scenes/Play.cs" id="1_d6iv3"] -[ext_resource type="Texture2D" uid="uid://dkohutwp0yujj" path="res://_Assets/Textures/HitLine/BGLine.png" id="2_kpt0a"] -[ext_resource type="PackedScene" uid="uid://cyopljug0duaa" path="res://Things/TunnelObjects/Notes/NoteTouch.tscn" id="3_qp71m"] +[ext_resource type="PackedScene" uid="uid://cyetvgmwnoy8l" path="res://Things/HitLine.tscn" id="2_8g6gv"] [sub_resource type="Environment" id="Environment_nefjb"] ambient_light_source = 1 @@ -47,7 +46,7 @@ blend_shape_mode = 0 shadow_mesh = SubResource("ArrayMesh_40gjx") [sub_resource type="ViewportTexture" id="ViewportTexture_ln6xl"] -viewport_path = NodePath("SubViewportContainer/2D Viewport") +viewport_path = NodePath("ViewportView/2D Viewport") [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3rv8i"] resource_local_to_scene = true @@ -56,19 +55,31 @@ shading_mode = 0 albedo_texture = SubResource("ViewportTexture_ln6xl") uv1_scale = Vector3(-1, 1, 1) -[sub_resource type="Gradient" id="Gradient_djnn4"] -colors = PackedColorArray(0, 0, 0, 1, 0, 0, 0, 0) +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_1ouek"] +blend_mode = 3 -[sub_resource type="GradientTexture1D" id="GradientTexture1D_vv2ac"] -gradient = SubResource("Gradient_djnn4") -width = 2048 +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_5ymar"] +blend_mode = 3 +light_mode = 1 + +[sub_resource type="Gradient" id="Gradient_ahp1v"] +offsets = PackedFloat32Array(0, 0.548295, 1) +colors = PackedColorArray(0.794938, 0.436061, 3.46541e-06, 1, 1, 0.972549, 0.262745, 1, 1, 1, 0.607843, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_pha5y"] +gradient = SubResource("Gradient_ahp1v") +width = 1920 + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_27qpl"] +blend_mode = 1 [sub_resource type="LabelSettings" id="LabelSettings_dj3ei"] font_size = 271 -[node name="Play" type="Node" node_paths=PackedStringArray("noteDisplay")] +[node name="Play" type="Node" node_paths=PackedStringArray("noteDisplay", "scrollDisplay")] script = ExtResource("1_d6iv3") -noteDisplay = NodePath("SubViewportContainer/2D Viewport/Viewport Control/Notes") +noteDisplay = NodePath("ViewportView/2D Viewport/Viewport Control/Notes Scroll") +scrollDisplay = NodePath("ViewportView/2D Viewport/Viewport Control/Holds ViewportView/SubViewport/Holds Scroll") [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_nefjb") @@ -95,7 +106,7 @@ mesh = SubResource("ArrayMesh_qc82q") skeleton = NodePath("") surface_material_override/0 = SubResource("StandardMaterial3D_3rv8i") -[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +[node name="ViewportView" type="SubViewportContainer" parent="."] anchors_preset = 2 anchor_top = 1.0 anchor_bottom = 1.0 @@ -105,7 +116,7 @@ offset_bottom = -1080.0 grow_vertical = 0 stretch = true -[node name="2D Viewport" type="SubViewport" parent="SubViewportContainer"] +[node name="2D Viewport" type="SubViewport" parent="ViewportView"] disable_3d = true own_world_3d = true transparent_bg = true @@ -114,7 +125,7 @@ msaa_2d = 1 size = Vector2i(1920, 1920) render_target_update_mode = 4 -[node name="Viewport Control" type="Control" parent="SubViewportContainer/2D Viewport"] +[node name="Viewport Control" type="Control" parent="ViewportView/2D Viewport"] clip_contents = true layout_mode = 3 anchors_preset = 15 @@ -123,52 +134,63 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -[node name="Camera2D" type="Camera2D" parent="SubViewportContainer/2D Viewport/Viewport Control"] +[node name="Camera2D" type="Camera2D" parent="ViewportView/2D Viewport/Viewport Control"] position = Vector2(0, -1920) anchor_mode = 0 enabled = false -[node name="Shadow" type="TextureRect" parent="SubViewportContainer/2D Viewport/Viewport Control"] -layout_mode = 2 -offset_top = 1920.0 -offset_right = 100.0 -offset_bottom = 3840.0 -rotation = -1.5708 -texture = SubResource("GradientTexture1D_vv2ac") -expand_mode = 1 +[node name="Background" parent="ViewportView/2D Viewport/Viewport Control" instance=ExtResource("2_8g6gv")] +layout_mode = 1 -[node name="HitLine_Reverse" type="Node2D" parent="SubViewportContainer/2D Viewport/Viewport Control"] - -[node name="Line" type="TextureRect" parent="SubViewportContainer/2D Viewport/Viewport Control/HitLine_Reverse"] -anchors_preset = 7 -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 -anchor_bottom = 1.0 -offset_top = 1875.0 -offset_right = 960.0 -offset_bottom = 1907.0 -grow_horizontal = 2 -grow_vertical = 0 -texture = ExtResource("2_kpt0a") -expand_mode = 1 - -[node name="Line2" type="TextureRect" parent="SubViewportContainer/2D Viewport/Viewport Control/HitLine_Reverse"] -anchors_preset = 7 -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 -anchor_bottom = 1.0 -offset_left = 960.0 -offset_top = 1875.0 +[node name="Holds ViewportView" type="SubViewportContainer" parent="ViewportView/2D Viewport/Viewport Control"] +layout_mode = 0 offset_right = 1920.0 -offset_bottom = 1907.0 -grow_horizontal = 2 -grow_vertical = 0 -texture = ExtResource("2_kpt0a") -expand_mode = 1 +offset_bottom = 1920.0 -[node name="Label" type="Label" parent="SubViewportContainer/2D Viewport/Viewport Control"] +[node name="SubViewport" type="SubViewport" parent="ViewportView/2D Viewport/Viewport Control/Holds ViewportView"] +transparent_bg = true +handle_input_locally = false +size = Vector2i(1920, 1920) +render_target_update_mode = 4 + +[node name="Holds Scroll" type="Control" parent="ViewportView/2D Viewport/Viewport Control/Holds ViewportView/SubViewport"] +material = SubResource("CanvasItemMaterial_1ouek") +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = 1920.0 +offset_bottom = 1920.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="HoldTest" type="Polygon2D" parent="ViewportView/2D Viewport/Viewport Control/Holds ViewportView/SubViewport/Holds Scroll"] +color = Color(1, 1, 1, 0.921569) +polygon = PackedVector2Array(0, 0, 300, 0, 1100, -1920, 800, -1920) + +[node name="Holds Filter" type="TextureRect" parent="ViewportView/2D Viewport/Viewport Control/Holds ViewportView/SubViewport"] +material = SubResource("CanvasItemMaterial_5ymar") +custom_minimum_size = Vector2(1920, 1920) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 1920.0 +offset_right = 3840.0 +offset_bottom = 1920.0 +grow_horizontal = 2 +grow_vertical = 2 +rotation = 1.5708 +texture = SubResource("GradientTexture1D_pha5y") + +[node name="Notes Scroll" type="Control" parent="ViewportView/2D Viewport/Viewport Control"] +material = SubResource("CanvasItemMaterial_27qpl") +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +grow_vertical = 0 + +[node name="Label" type="Label" parent="ViewportView/2D Viewport/Viewport Control"] visible = false layout_mode = 1 anchors_preset = 2 @@ -188,23 +210,3 @@ text = "1 2 3 4 5 6 7 10 label_settings = SubResource("LabelSettings_dj3ei") horizontal_alignment = 1 vertical_alignment = 2 - -[node name="Notes" type="Control" parent="SubViewportContainer/2D Viewport/Viewport Control"] -layout_mode = 1 -anchors_preset = 2 -anchor_top = 1.0 -anchor_bottom = 1.0 -grow_vertical = 0 - -[node name="NoteTouch" parent="SubViewportContainer/2D Viewport/Viewport Control/Notes" instance=ExtResource("3_qp71m")] -visible = false -layout_mode = 1 -offset_left = 400.0 -offset_top = -120.0 -offset_right = 1100.0 -offset_bottom = -96.0 - -[node name="HoldTest" type="Polygon2D" parent="SubViewportContainer/2D Viewport/Viewport Control/Notes"] -visible = false -color = Color(1, 0.917647, 0.2, 0.890196) -polygon = PackedVector2Array(0, 0, 300, 0, 1100, -1920, 800, -1920) diff --git a/Scripts/Data/Chart/Chart.cs b/Scripts/Data/Chart/Chart.cs index 33ca94b..de097d7 100644 --- a/Scripts/Data/Chart/Chart.cs +++ b/Scripts/Data/Chart/Chart.cs @@ -13,7 +13,7 @@ namespace WacK.Data.Chart /// public class Chart { - // Key of dictionaries are in milliseconds + // Key of dictionaries are in seconds // List is for chords public SortedList> playNotes { get; private set; } public SortedList> timeSigChgs { get; private set; } @@ -241,13 +241,15 @@ namespace WacK.Data.Chart { curHoldNote[np.holdIdx].points[curTime] = np; } - - // add note - if (!playNotes.ContainsKey(curTime)) + else { - playNotes[curTime] = new List(); + // only add notes that aren't part of the hold + if (!playNotes.ContainsKey(curTime)) + { + playNotes[curTime] = new List(); + } + playNotes[curTime].Add(np); } - playNotes[curTime].Add(np); } // NoteEvent -- tempo changes diff --git a/Scripts/Scenes/Play.cs b/Scripts/Scenes/Play.cs index 0825e9a..d921331 100644 --- a/Scripts/Scenes/Play.cs +++ b/Scripts/Scenes/Play.cs @@ -27,13 +27,19 @@ namespace WacK.Scenes public static PlayParameters playParams; // TunnelObjects we can instantiate - public static PackedScene notePlay = GD.Load("res://Things/TunnelObjects/Notes/NoteTouch.tscn"); + public static PackedScene noteTouch = GD.Load("res://Things/TunnelObjects/Notes/NoteTouch.tscn"); + public static PackedScene noteHold = GD.Load("res://Things/TunnelObjects/Notes/NoteHold.tscn"); [Export] public Control noteDisplay; + [Export] + public Control scrollDisplay; private Chart chart; + // scroll speed + private const float PIXELS_PER_SECOND = 2000; + public override void _Ready() { // parse mer and create chart for current play @@ -42,25 +48,29 @@ namespace WacK.Scenes } /// - /// Instantiates necessary notes onto the noteDisplay for the player to see. + /// Instantiates necessary notes onto noteDisplay for the player to see. /// private void RealizeChart() { foreach (var msNote in chart.playNotes) { - GD.Print(msNote.Key); foreach (var note in msNote.Value) { THNotePlay nNote; - switch (note) + switch (note.type) { - default: // tap note - nNote = notePlay.Instantiate(); + case NotePlayType.HoldStart: + nNote = noteHold.Instantiate(); break; + case NotePlayType.Touch: + nNote = noteTouch.Instantiate(); + break; + default: + continue; } nNote.Init(note); var nPos = nNote.Position; - nPos.Y = msNote.Key * -1000; + nPos.Y = msNote.Key * -PIXELS_PER_SECOND; nNote.Position = nPos; noteDisplay.AddChild(nNote); } @@ -70,7 +80,7 @@ namespace WacK.Scenes public override void _Process(double delta) { var nPos = noteDisplay.Position; - nPos.Y += (float)delta * 1000; + nPos.Y += (float)delta * PIXELS_PER_SECOND; noteDisplay.Position = nPos; } diff --git a/Scripts/Things/TunnelObjects/THNoteHold.cs b/Scripts/Things/TunnelObjects/THNoteHold.cs index 995adba..ec928f4 100644 --- a/Scripts/Things/TunnelObjects/THNoteHold.cs +++ b/Scripts/Things/TunnelObjects/THNoteHold.cs @@ -11,6 +11,8 @@ namespace WacK.Things.TunnelObjects { base.Init(noteData); this.noteData = noteData; + + // TODO: setup other Nodes to render hold note properly } } } \ No newline at end of file diff --git a/Things/HitLine.tscn b/Things/HitLine.tscn new file mode 100644 index 0000000..f3ddadf --- /dev/null +++ b/Things/HitLine.tscn @@ -0,0 +1,71 @@ +[gd_scene load_steps=4 format=3 uid="uid://cyetvgmwnoy8l"] + +[ext_resource type="Texture2D" uid="uid://dkohutwp0yujj" path="res://_Assets/Textures/HitLine/BGLine.png" id="1_w0gbp"] + +[sub_resource type="Gradient" id="Gradient_djnn4"] +offsets = PackedFloat32Array(0, 0.380682, 1) +colors = PackedColorArray(0, 0, 0, 0.368627, 0, 0, 0, 0.368627, 0, 0, 0, 0.0980392) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_kn5i7"] +gradient = SubResource("Gradient_djnn4") +width = 2048 + +[node name="Background" type="Control"] +custom_minimum_size = Vector2(1920, 1920) +layout_mode = 3 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -32.0 +grow_vertical = 0 + +[node name="Shadow" type="TextureRect" parent="."] +custom_minimum_size = Vector2(1920, 1920) +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_right = 1920.0 +offset_bottom = 1920.0 +grow_vertical = 0 +rotation = -1.5708 +texture = SubResource("GradientTexture1D_kn5i7") +expand_mode = 1 + +[node name="HitLine" type="Control" parent="."] +custom_minimum_size = Vector2(1920, 32) +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -32.0 +offset_right = 1920.0 +grow_vertical = 0 + +[node name="Reverse" type="Control" parent="HitLine"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Line" type="TextureRect" parent="HitLine/Reverse"] +layout_mode = 1 +anchors_preset = -1 +anchor_right = 0.5 +anchor_bottom = 1.0 +grow_vertical = 2 +texture = ExtResource("1_w0gbp") +expand_mode = 1 + +[node name="Line2" type="TextureRect" parent="HitLine/Reverse"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.5 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 0 +texture = ExtResource("1_w0gbp") +expand_mode = 1 diff --git a/Things/TunnelObjects/Notes/NoteHold.tscn b/Things/TunnelObjects/Notes/NoteHold.tscn new file mode 100644 index 0000000..169a90a --- /dev/null +++ b/Things/TunnelObjects/Notes/NoteHold.tscn @@ -0,0 +1,24 @@ +[gd_scene load_steps=3 format=3 uid="uid://dp2rjmu8wptsn"] + +[ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/THNoteHold.cs" id="1_kd6u4"] +[ext_resource type="Texture2D" uid="uid://xmb5ybj1oor4" path="res://_Assets/Textures/Notes/Hold.png" id="2_ovp6m"] + +[node name="NoteHold" type="Control"] +layout_mode = 3 +anchors_preset = 0 +offset_right = 200.0 +offset_bottom = 24.0 +script = ExtResource("1_kd6u4") + +[node name="NinePatchRect" type="NinePatchRect" parent="."] +layout_mode = 1 +anchors_preset = -1 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_top = -36.0 +offset_bottom = -24.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_ovp6m") +patch_margin_left = 12 +patch_margin_right = 12