From 14c3f96e60cc2381638cf056acc8468907e58f3f Mon Sep 17 00:00:00 2001 From: muskit <15199219+muskit@users.noreply.github.com> Date: Wed, 13 Sep 2023 01:33:01 -0700 Subject: [PATCH] bye bye 3D game objects - remove 3D-based backgrounds, which use the terribly inefficient CSG objects - add 2D hit line texture based on Reverse (@Yasu3D) --- Scenes/Play.tscn | 115 ++++++++++- Scripts/Things/TunnelObjects/Background.cs | 156 +++++++-------- .../2D/Background/Background.tscn | 3 - .../2D/Background/BackgroundSegment.tscn | 3 - .../3D/Background/BGSegment.tscn | 55 ------ .../3D/Background/Background.tscn | 186 ------------------ _Assets/Textures/BGLine.png | Bin 0 -> 13754 bytes _Assets/Textures/BGLine.png.import | 34 ++++ 8 files changed, 219 insertions(+), 333 deletions(-) delete mode 100644 Things/TunnelObjects/2D/Background/Background.tscn delete mode 100644 Things/TunnelObjects/2D/Background/BackgroundSegment.tscn delete mode 100644 Things/TunnelObjects/3D/Background/BGSegment.tscn delete mode 100644 Things/TunnelObjects/3D/Background/Background.tscn create mode 100644 _Assets/Textures/BGLine.png create mode 100644 _Assets/Textures/BGLine.png.import diff --git a/Scenes/Play.tscn b/Scenes/Play.tscn index 745466e..121f18c 100644 --- a/Scenes/Play.tscn +++ b/Scenes/Play.tscn @@ -1,6 +1,6 @@ -[gd_scene load_steps=7 format=3 uid="uid://bqh00ot0csqmk"] +[gd_scene load_steps=11 format=3 uid="uid://bqh00ot0csqmk"] -[ext_resource type="PackedScene" uid="uid://bbvduvnoesla5" path="res://Things/TunnelObjects/3D/Background/Background.tscn" id="1_2wv7o"] +[ext_resource type="Texture2D" uid="uid://dkohutwp0yujj" path="res://_Assets/Textures/BGLine.png" id="2_lkl1c"] [sub_resource type="Environment" id="Environment_nefjb"] ambient_light_source = 1 @@ -44,9 +44,25 @@ _surfaces = [{ blend_shape_mode = 0 shadow_mesh = SubResource("ArrayMesh_40gjx") +[sub_resource type="ViewportTexture" id="ViewportTexture_ln6xl"] +viewport_path = NodePath("2D Viewport") + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_3rv8i"] +resource_local_to_scene = true transparency = 1 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="GradientTexture1D" id="GradientTexture1D_vv2ac"] +gradient = SubResource("Gradient_djnn4") +width = 2048 + +[sub_resource type="LabelSettings" id="LabelSettings_dj3ei"] +font_size = 271 [node name="Play" type="Node"] @@ -57,22 +73,105 @@ environment = SubResource("Environment_nefjb") [node name="Camera3D" type="Camera3D" parent="Node3D"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.095) +current = true fov = 60.0 near = 0.001 -far = 10.0 +far = 20.0 [node name="Cone" type="Node3D" parent="Node3D"] -visible = false +transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) [node name="RootNode" type="Node3D" parent="Node3D/Cone"] [node name="Cylinder" type="MeshInstance3D" parent="Node3D/Cone/RootNode"] -transform = Transform3D(100, 0, 0, 0, -1.19209e-05, 100, 0, -100, -1.19209e-05, 0, 0, 0) +transform = Transform3D(100, 0, 0, 0, -4.37114e-06, 100, 0, -100, -4.37114e-06, 0, 0, 0) mesh = SubResource("ArrayMesh_qc82q") skeleton = NodePath("") surface_material_override/0 = SubResource("StandardMaterial3D_3rv8i") -[node name="Background" parent="Node3D" instance=ExtResource("1_2wv7o")] -transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 0, 0) +[node name="2D Viewport" type="SubViewport" parent="."] +disable_3d = true +own_world_3d = true +transparent_bg = true +handle_input_locally = false +msaa_2d = 1 +size = Vector2i(1920, 1920) +render_target_update_mode = 4 -[node name="Node2D" type="Node2D" parent="."] +[node name="Base" type="Control" parent="2D Viewport"] +clip_contents = true +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="Camera2D" type="Camera2D" parent="2D Viewport/Base"] +position = Vector2(0, -1920) +anchor_mode = 0 +enabled = false + +[node name="Shadow" type="TextureRect" parent="2D Viewport/Base"] +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="Line" type="TextureRect" parent="2D Viewport/Base"] +layout_mode = 1 +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 = -25.0 +offset_bottom = -8.01501 +grow_horizontal = 2 +grow_vertical = 0 +texture = ExtResource("2_lkl1c") +expand_mode = 1 + +[node name="Line2" type="TextureRect" parent="2D Viewport/Base"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_top = -25.0 +offset_right = 960.0 +offset_bottom = -8.01501 +grow_horizontal = 2 +grow_vertical = 0 +texture = ExtResource("2_lkl1c") +expand_mode = 1 + +[node name="Label" type="Label" parent="2D Viewport/Base"] +layout_mode = 1 +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -970.0 +offset_right = 1885.0 +offset_bottom = -4.99927 +grow_vertical = 0 +size_flags_vertical = 3 +text = "1 2 3 4 5 6 7 10" +label_settings = SubResource("LabelSettings_dj3ei") +horizontal_alignment = 1 +vertical_alignment = 2 + +[node name="SubViewportContainer" type="SubViewportContainer" parent="."] +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -3000.0 +offset_right = 1920.0 +offset_bottom = -1080.0 +grow_vertical = 0 +stretch = true diff --git a/Scripts/Things/TunnelObjects/Background.cs b/Scripts/Things/TunnelObjects/Background.cs index d542464..1cf1f65 100644 --- a/Scripts/Things/TunnelObjects/Background.cs +++ b/Scripts/Things/TunnelObjects/Background.cs @@ -12,89 +12,89 @@ using System.Collections.Generic; namespace WacK.Things.TunnelObjects { - public enum DrawDirection { - CounterClockwise, Clockwise, Center - } - public partial class Background : Node - { - private bool isReady = false; - private float _drawLength; - private List segments = new List(); - private StandardMaterial3D bgMaterial; - [Export] - public float DrawLength - { - set - { - _drawLength = value; - if (!isReady) return; + public enum DrawDirection { + CounterClockwise, Clockwise, Center + } + public partial class Background : Node + { + private bool isReady = false; + private float _drawLength; + private List segments = new List(); + private StandardMaterial3D bgMaterial; + [Export] + public float DrawLength + { + set + { + _drawLength = value; + if (!isReady) return; - bgMaterial.DistanceFadeMinDistance = _drawLength; - bgMaterial.DistanceFadeMaxDistance = 0; - foreach (Node segment in segments) - { - segment.GetChild(1).Scale = new Vector3(1, _drawLength, 1); - } - } - get { return _drawLength; } - } + bgMaterial.DistanceFadeMinDistance = _drawLength; + bgMaterial.DistanceFadeMaxDistance = 0; + foreach (Node segment in segments) + { + segment.GetChild(1).Scale = new Vector3(1, _drawLength, 1); + } + } + get { return _drawLength; } + } - // Called when the node enters the scene tree for the first time. - public override void _Ready() - { - foreach (Node3D segment in GetChildren()) - { - segments.Add(segment); - } - bgMaterial = (StandardMaterial3D) segments[0].GetChild(1).Material; + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + foreach (Node3D segment in GetChildren()) + { + segments.Add(segment); + } + bgMaterial = (StandardMaterial3D) segments[0].GetChild(1).Material; - isReady = true; - // DrawLength = DrawLength; - } + isReady = true; + // DrawLength = DrawLength; + } - // draw in 6/60 frames (0.1s) - // TODO: figure out how WACCA handles animation speed - public async void SetSegments(int pos, int size, bool state, DrawDirection direction) - { - // GD.Print($"{direction} = {state}. Even? {size % 2 == 0}"); + // draw in 6/60 frames (0.1s) + // TODO: figure out how WACCA handles animation speed + public async void SetSegments(int pos, int size, bool state, DrawDirection direction) + { + // GD.Print($"{direction} = {state}. Even? {size % 2 == 0}"); - double timer = 0; - double time = 0.1f; + double timer = 0; + double time = 0.1f; - int centerSeg = pos + size/2; - while (timer < 0.1f) - { - timer = Mathf.Clamp(timer + GetProcessDeltaTime(), 0, time); - var timerRatio = (float)(timer / time); - int steps = Mathf.CeilToInt(size*timerRatio); + int centerSeg = pos + size/2; + while (timer < 0.1f) + { + timer = Mathf.Clamp(timer + GetProcessDeltaTime(), 0, time); + var timerRatio = (float)(timer / time); + int steps = Mathf.CeilToInt(size*timerRatio); - switch(direction) - { - case DrawDirection.CounterClockwise: - for (int i = 0; i < steps; ++i) - { - segments[(i + pos)%60].Visible = state; - } - break; - case DrawDirection.Center: // add: center to edge. rem: edge to center. - for (int i = centerSeg; i < Util.InterpInt(centerSeg, pos+size, timerRatio); ++i) - { - segments[i % 60].Visible = state; - } - for (int i = centerSeg; i >= Util.InterpInt(centerSeg, pos, timerRatio); --i) - { - segments[i % 60].Visible = state; - } - break; - case DrawDirection.Clockwise: - for (int i = 0; i < steps; ++i) - { - segments[(pos + size - i - 1)%60].Visible = state; - } - break; - } - await ToSignal(GetTree(), "idle_frame"); - } - } - } + switch(direction) + { + case DrawDirection.CounterClockwise: + for (int i = 0; i < steps; ++i) + { + segments[(i + pos)%60].Visible = state; + } + break; + case DrawDirection.Center: // add: center to edge. rem: edge to center. + for (int i = centerSeg; i < Util.InterpInt(centerSeg, pos+size, timerRatio); ++i) + { + segments[i % 60].Visible = state; + } + for (int i = centerSeg; i >= Util.InterpInt(centerSeg, pos, timerRatio); --i) + { + segments[i % 60].Visible = state; + } + break; + case DrawDirection.Clockwise: + for (int i = 0; i < steps; ++i) + { + segments[(pos + size - i - 1)%60].Visible = state; + } + break; + } + await ToSignal(GetTree(), "idle_frame"); + } + } + } } diff --git a/Things/TunnelObjects/2D/Background/Background.tscn b/Things/TunnelObjects/2D/Background/Background.tscn deleted file mode 100644 index 68d6a51..0000000 --- a/Things/TunnelObjects/2D/Background/Background.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=3 uid="uid://b7dhdsryff4rn"] - -[node name="TunnelObjects" type="Node2D"] diff --git a/Things/TunnelObjects/2D/Background/BackgroundSegment.tscn b/Things/TunnelObjects/2D/Background/BackgroundSegment.tscn deleted file mode 100644 index 69792e2..0000000 --- a/Things/TunnelObjects/2D/Background/BackgroundSegment.tscn +++ /dev/null @@ -1,3 +0,0 @@ -[gd_scene format=3 uid="uid://cvxp0w0urvyhj"] - -[node name="BackgroundSegment" type="Node2D"] diff --git a/Things/TunnelObjects/3D/Background/BGSegment.tscn b/Things/TunnelObjects/3D/Background/BGSegment.tscn deleted file mode 100644 index 4d2a8db..0000000 --- a/Things/TunnelObjects/3D/Background/BGSegment.tscn +++ /dev/null @@ -1,55 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://bgvm8k2dygr3k"] - -[sub_resource type="StandardMaterial3D" id="1"] -shading_mode = 0 -albedo_color = Color(0.733333, 0.14902, 1, 1) - -[sub_resource type="StandardMaterial3D" id="2"] -transparency = 1 -shading_mode = 0 -albedo_color = Color(0, 0, 0, 1) -distance_fade_mode = 1 -distance_fade_min_distance = 6.0 -distance_fade_max_distance = 0.5 - -[sub_resource type="StandardMaterial3D" id="3"] -transparency = 1 -shading_mode = 0 -albedo_color = Color(0.501961, 0.501961, 0.501961, 1) -distance_fade_mode = 1 -distance_fade_min_distance = 8.85 -distance_fade_max_distance = 3.85 - -[node name="0" type="Node3D"] - -[node name="Strikeline" type="CSGPolygon3D" parent="."] -transform = Transform3D(-1, -8.74228e-08, 3.82137e-15, 0, -4.37114e-08, -1, 8.74228e-08, -1, 4.37114e-08, 0, 0, 0) -layers = 2 -polygon = PackedVector2Array(0.575, 0, 0.575, -0.01, 0.62, -0.01, 0.62, 0) -mode = 1 -spin_degrees = 6.0 -spin_sides = 8 -material = SubResource("1") - -[node name="Tunnel" type="CSGPolygon3D" parent="."] -transform = Transform3D(-1, -7.54979e-07, 6.60024e-15, 0, -2.18557e-07, -1, 1.50996e-07, -5, 4.37114e-08, 0, 0, 0.00968594) -layers = 4 -polygon = PackedVector2Array(0.575, 0, 0.575, -1, 0.595, -1, 0.595, 0) -mode = 1 -spin_degrees = 6.0 -spin_sides = 8 -material = SubResource("2") - -[node name="TunnelLineBase" type="CSGPolygon3D" parent="Tunnel"] -transform = Transform3D(1, -0.00119184, 8.84279e-06, -1.77751e-06, -0.000107933, 0.2, -0.000238366, -5, -0.000107936, 0, 0, 0) -visible = false -polygon = PackedVector2Array(0.57, 0, 0.57, -0.002, 0.58, -0.002, 0.58, 0) -depth = 5.0 -material = SubResource("3") - -[node name="TunnelLineTip" type="CSGPolygon3D" parent="Tunnel"] -transform = Transform3D(0.994522, -0.522642, -9.13817e-10, 0, -2.18557e-07, 0.2, -0.104528, -4.97261, -8.69439e-09, 0, 0, 0) -visible = false -polygon = PackedVector2Array(0.57, -0.002, 0.57, 0, 0.58, 0, 0.58, -0.002) -depth = 5.0 -material = SubResource("3") diff --git a/Things/TunnelObjects/3D/Background/Background.tscn b/Things/TunnelObjects/3D/Background/Background.tscn deleted file mode 100644 index f1a6f14..0000000 --- a/Things/TunnelObjects/3D/Background/Background.tscn +++ /dev/null @@ -1,186 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://bbvduvnoesla5"] - -[ext_resource type="PackedScene" uid="uid://bgvm8k2dygr3k" path="res://Things/TunnelObjects/3D/Background/BGSegment.tscn" id="1"] -[ext_resource type="Script" path="res://Scripts/Things/TunnelObjects/Background.cs" id="1_7hv1b"] - -[node name="Background" type="Node3D"] -script = ExtResource("1_7hv1b") - -[node name="0" parent="." instance=ExtResource("1")] - -[node name="1" parent="." instance=ExtResource("1")] -transform = Transform3D(0.994522, 0.104528, 0, -0.104528, 0.994522, 0, 0, 0, 1, 0, 0, 0) - -[node name="2" parent="." instance=ExtResource("1")] -transform = Transform3D(0.978148, 0.207912, 0, -0.207912, 0.978148, 0, 0, 0, 1, 0, 0, 0) - -[node name="3" parent="." instance=ExtResource("1")] -transform = Transform3D(0.951057, 0.309017, 0, -0.309017, 0.951057, 0, 0, 0, 1, 0, 0, 0) - -[node name="4" parent="." instance=ExtResource("1")] -transform = Transform3D(0.913545, 0.406737, 0, -0.406737, 0.913545, 0, 0, 0, 1, 0, 0, 0) - -[node name="5" parent="." instance=ExtResource("1")] -transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, 0, 0, 0) - -[node name="6" parent="." instance=ExtResource("1")] -transform = Transform3D(0.809017, 0.587785, 0, -0.587785, 0.809017, 0, 0, 0, 1, 0, 0, 0) - -[node name="7" parent="." instance=ExtResource("1")] -transform = Transform3D(0.743145, 0.669131, 0, -0.669131, 0.743145, 0, 0, 0, 1, 0, 0, 0) - -[node name="8" parent="." instance=ExtResource("1")] -transform = Transform3D(0.669131, 0.743145, 0, -0.743145, 0.669131, 0, 0, 0, 1, 0, 0, 0) - -[node name="9" parent="." instance=ExtResource("1")] -transform = Transform3D(0.587785, 0.809017, 0, -0.809017, 0.587785, 0, 0, 0, 1, 0, 0, 0) - -[node name="10" parent="." instance=ExtResource("1")] -transform = Transform3D(0.5, 0.866025, 0, -0.866025, 0.5, 0, 0, 0, 1, 0, 0, 0) - -[node name="11" parent="." instance=ExtResource("1")] -transform = Transform3D(0.406737, 0.913545, 0, -0.913545, 0.406737, 0, 0, 0, 1, 0, 0, 0) - -[node name="12" parent="." instance=ExtResource("1")] -transform = Transform3D(0.309017, 0.951057, 0, -0.951057, 0.309017, 0, 0, 0, 1, 0, 0, 0) - -[node name="13" parent="." instance=ExtResource("1")] -transform = Transform3D(0.207912, 0.978148, 0, -0.978148, 0.207912, 0, 0, 0, 1, 0, 0, 0) - -[node name="14" parent="." instance=ExtResource("1")] -transform = Transform3D(0.104528, 0.994522, 0, -0.994522, 0.104528, 0, 0, 0, 1, 0, 0, 0) - -[node name="15" parent="." instance=ExtResource("1")] -transform = Transform3D(-4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) - -[node name="16" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.104529, 0.994522, 0, -0.994522, -0.104529, 0, 0, 0, 1, 0, 0, 0) - -[node name="17" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.207912, 0.978148, 0, -0.978148, -0.207912, 0, 0, 0, 1, 0, 0, 0) - -[node name="18" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.309017, 0.951056, 0, -0.951056, -0.309017, 0, 0, 0, 1, 0, 0, 0) - -[node name="19" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.406737, 0.913545, 0, -0.913545, -0.406737, 0, 0, 0, 1, 0, 0, 0) - -[node name="20" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.5, 0.866025, 0, -0.866025, -0.5, 0, 0, 0, 1, 0, 0, 0) - -[node name="21" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.587785, 0.809017, 0, -0.809017, -0.587785, 0, 0, 0, 1, 0, 0, 0) - -[node name="22" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.669131, 0.743145, 0, -0.743145, -0.669131, 0, 0, 0, 1, 0, 0, 0) - -[node name="23" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.743145, 0.669131, 0, -0.669131, -0.743145, 0, 0, 0, 1, 0, 0, 0) - -[node name="24" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.809017, 0.587785, 0, -0.587785, -0.809017, 0, 0, 0, 1, 0, 0, 0) - -[node name="25" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.866025, 0.5, 0, -0.5, -0.866025, 0, 0, 0, 1, 0, 0, 0) - -[node name="26" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.913545, 0.406737, 0, -0.406737, -0.913545, 0, 0, 0, 1, 0, 0, 0) - -[node name="27" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.951056, 0.309017, 0, -0.309017, -0.951056, 0, 0, 0, 1, 0, 0, 0) - -[node name="28" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.978147, 0.207912, 0, -0.207912, -0.978147, 0, 0, 0, 1, 0, 0, 0) - -[node name="29" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.994522, 0.104528, 0, -0.104528, -0.994522, 0, 0, 0, 1, 0, 0, 0) - -[node name="30" parent="." instance=ExtResource("1")] -transform = Transform3D(-1, -8.74228e-08, 0, 8.74228e-08, -1, 0, 0, 0, 1, 0, 0, 0) - -[node name="31" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.994522, -0.104528, 0, 0.104528, -0.994522, 0, 0, 0, 1, 0, 0, 0) - -[node name="32" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.978147, -0.207912, 0, 0.207912, -0.978147, 0, 0, 0, 1, 0, 0, 0) - -[node name="33" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.951056, -0.309017, 0, 0.309017, -0.951056, 0, 0, 0, 1, 0, 0, 0) - -[node name="34" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.913545, -0.406736, 0, 0.406736, -0.913545, 0, 0, 0, 1, 0, 0, 0) - -[node name="35" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.866025, -0.5, 0, 0.5, -0.866025, 0, 0, 0, 1, 0, 0, 0) - -[node name="36" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.809017, -0.587785, 0, 0.587785, -0.809017, 0, 0, 0, 1, 0, 0, 0) - -[node name="37" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.743145, -0.66913, 0, 0.66913, -0.743145, 0, 0, 0, 1, 0, 0, 0) - -[node name="38" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.669131, -0.743145, 0, 0.743145, -0.669131, 0, 0, 0, 1, 0, 0, 0) - -[node name="39" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.587785, -0.809017, 0, 0.809017, -0.587785, 0, 0, 0, 1, 0, 0, 0) - -[node name="40" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.5, -0.866025, 0, 0.866025, -0.5, 0, 0, 0, 1, 0, 0, 0) - -[node name="41" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.406737, -0.913545, 0, 0.913545, -0.406737, 0, 0, 0, 1, 0, 0, 0) - -[node name="42" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.309017, -0.951056, 0, 0.951056, -0.309017, 0, 0, 0, 1, 0, 0, 0) - -[node name="43" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.207912, -0.978147, 0, 0.978147, -0.207912, 0, 0, 0, 1, 0, 0, 0) - -[node name="44" parent="." instance=ExtResource("1")] -transform = Transform3D(-0.104528, -0.994522, 0, 0.994522, -0.104528, 0, 0, 0, 1, 0, 0, 0) - -[node name="45" parent="." instance=ExtResource("1")] -transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 0, 0) - -[node name="46" parent="." instance=ExtResource("1")] -transform = Transform3D(0.104528, -0.994522, 0, 0.994522, 0.104528, 0, 0, 0, 1, 0, 0, 0) - -[node name="47" parent="." instance=ExtResource("1")] -transform = Transform3D(0.207912, -0.978147, 0, 0.978147, 0.207912, 0, 0, 0, 1, 0, 0, 0) - -[node name="48" parent="." instance=ExtResource("1")] -transform = Transform3D(0.309017, -0.951056, 0, 0.951056, 0.309017, 0, 0, 0, 1, 0, 0, 0) - -[node name="49" parent="." instance=ExtResource("1")] -transform = Transform3D(0.406736, -0.913545, 0, 0.913545, 0.406736, 0, 0, 0, 1, 0, 0, 0) - -[node name="50" parent="." instance=ExtResource("1")] -transform = Transform3D(0.5, -0.866025, 0, 0.866025, 0.5, 0, 0, 0, 1, 0, 0, 0) - -[node name="51" parent="." instance=ExtResource("1")] -transform = Transform3D(0.587785, -0.809017, 0, 0.809017, 0.587785, 0, 0, 0, 1, 0, 0, 0) - -[node name="52" parent="." instance=ExtResource("1")] -transform = Transform3D(0.66913, -0.743145, 0, 0.743145, 0.66913, 0, 0, 0, 1, 0, 0, 0) - -[node name="53" parent="." instance=ExtResource("1")] -transform = Transform3D(0.743145, -0.669131, 0, 0.669131, 0.743145, 0, 0, 0, 1, 0, 0, 0) - -[node name="54" parent="." instance=ExtResource("1")] -transform = Transform3D(0.809017, -0.587785, 0, 0.587785, 0.809017, 0, 0, 0, 1, 0, 0, 0) - -[node name="55" parent="." instance=ExtResource("1")] -transform = Transform3D(0.866025, -0.5, 0, 0.5, 0.866025, 0, 0, 0, 1, 0, 0, 0) - -[node name="56" parent="." instance=ExtResource("1")] -transform = Transform3D(0.913545, -0.406737, 0, 0.406737, 0.913545, 0, 0, 0, 1, 0, 0, 0) - -[node name="57" parent="." instance=ExtResource("1")] -transform = Transform3D(0.951056, -0.309017, 0, 0.309017, 0.951056, 0, 0, 0, 1, 0, 0, 0) - -[node name="58" parent="." instance=ExtResource("1")] -transform = Transform3D(0.978147, -0.207912, 0, 0.207912, 0.978147, 0, 0, 0, 1, 0, 0, 0) - -[node name="59" parent="." instance=ExtResource("1")] -transform = Transform3D(0.994522, -0.104528, 0, 0.104528, 0.994522, 0, 0, 0, 1, 0, 0, 0) diff --git a/_Assets/Textures/BGLine.png b/_Assets/Textures/BGLine.png new file mode 100644 index 0000000000000000000000000000000000000000..890194ed390f96b164738c43ff5c91a443f1343d GIT binary patch literal 13754 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