Refactor out single-mode silliness

Gotta lay out the scene tree such that Radial and Dance modes can be loaded in and out.
Godot's GUI nodes are pretty good we should use them more :)
This commit is contained in:
Luke Hubmayer-Werner 2021-01-24 02:49:08 +10:30
parent b4e10d3eb5
commit f90543660f
12 changed files with 317 additions and 270 deletions

189
RadialGame.tscn Normal file
View File

@ -0,0 +1,189 @@
[gd_scene load_steps=20 format=2]
[ext_resource path="res://scripts/InputHandler.gd" type="Script" id=1]
[ext_resource path="res://assets/text-4k.png" type="Texture" id=2]
[ext_resource path="res://scripts/video.gd" type="Script" id=3]
[ext_resource path="res://scripts/ScreenFilter.gd" type="Script" id=4]
[ext_resource path="res://scripts/NoteViewport.gd" type="Script" id=5]
[ext_resource path="res://scripts/NotePainter.gd" type="Script" id=6]
[ext_resource path="res://scripts/NoteHandler.gd" type="Script" id=8]
[ext_resource path="res://scripts/Receptors.gd" type="Script" id=9]
[ext_resource path="res://shaders/notelines.shader" type="Shader" id=10]
[ext_resource path="res://shaders/notemesh.shader" type="Shader" id=11]
[ext_resource path="res://shaders/receptors.shader" type="Shader" id=12]
[ext_resource path="res://scripts/Bezel.gd" type="Script" id=13]
[ext_resource path="res://Menu.tscn" type="PackedScene" id=15]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 12 )
shader_param/num_receptors = 8
shader_param/receptor_offset = 0.392699
shader_param/line_color = Color( 0, 0, 1, 1 )
shader_param/dot_color = Color( 0, 0, 1, 1 )
shader_param/shadow_color = Color( 0, 0, 0, 0.57 )
shader_param/line_thickness = 0.00434783
shader_param/dot_radius = 0.026087
shader_param/shadow_thickness = 0.0173913
shader_param/px = 0.00108696
shader_param/px2 = 0.00217391
shader_param/alpha = 1.0
[sub_resource type="ArrayMesh" id=2]
surfaces/0 = {
"aabb": AABB( -481.834, -481.834, 0, 963.667, 963.667, 0 ),
"array_data": PoolByteArray( 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0, 95, 168, 216, 67, 118, 207, 152, 66, 137, 59, 80, 49, 183, 65, 237, 67, 202, 86, 167, 66, 32, 60, 210, 49, 125, 187, 206, 67, 38, 125, 22, 67, 48, 59, 60, 53, 64, 99, 226, 67, 249, 203, 36, 67, 223, 59, 187, 53, 141, 134, 190, 67, 0, 0, 92, 67, 160, 58, 166, 55, 217, 163, 208, 67, 177, 234, 112, 67, 65, 59, 48, 56, 159, 135, 168, 67, 204, 105, 141, 67, 220, 57, 235, 56, 142, 141, 184, 67, 186, 219, 154, 67, 107, 58, 98, 57, 204, 105, 141, 67, 159, 135, 168, 67, 235, 56, 220, 57, 186, 219, 154, 67, 142, 141, 184, 67, 98, 57, 107, 58, 0, 0, 92, 67, 141, 134, 190, 67, 166, 55, 160, 58, 177, 234, 112, 67, 217, 163, 208, 67, 48, 56, 65, 59, 38, 125, 22, 67, 125, 187, 206, 67, 60, 53, 48, 59, 249, 203, 36, 67, 64, 99, 226, 67, 187, 53, 223, 59, 118, 207, 152, 66, 95, 168, 216, 67, 80, 49, 137, 59, 202, 86, 167, 66, 183, 65, 237, 67, 210, 49, 32, 60, 141, 172, 242, 40, 0, 0, 220, 67, 0, 0, 166, 59, 143, 223, 4, 41, 177, 234, 240, 67, 0, 0, 48, 60, 118, 207, 152, 194, 95, 168, 216, 67, 80, 177, 137, 59, 202, 86, 167, 194, 183, 65, 237, 67, 210, 177, 32, 60, 38, 125, 22, 195, 125, 187, 206, 67, 60, 181, 48, 59, 249, 203, 36, 195, 64, 99, 226, 67, 187, 181, 223, 59, 0, 0, 92, 195, 141, 134, 190, 67, 166, 183, 160, 58, 177, 234, 112, 195, 217, 163, 208, 67, 48, 184, 65, 59, 204, 105, 141, 195, 159, 135, 168, 67, 235, 184, 220, 57, 186, 219, 154, 195, 142, 141, 184, 67, 98, 185, 107, 58, 159, 135, 168, 195, 204, 105, 141, 67, 220, 185, 235, 56, 142, 141, 184, 195, 186, 219, 154, 67, 107, 186, 98, 57, 141, 134, 190, 195, 0, 0, 92, 67, 160, 186, 166, 55, 217, 163, 208, 195, 177, 234, 112, 67, 65, 187, 48, 56, 125, 187, 206, 195, 38, 125, 22, 67, 48, 187, 60, 53, 64, 99, 226, 195, 249, 203, 36, 67, 223, 187, 187, 53, 95, 168, 216, 195, 118, 207, 152, 66, 137, 187, 80, 49, 183, 65, 237, 195, 202, 86, 167, 66, 32, 188, 210, 49, 0, 0, 220, 195, 141, 172, 114, 41, 166, 187, 0, 0, 177, 234, 240, 195, 143, 223, 132, 41, 48, 188, 0, 0, 95, 168, 216, 195, 118, 207, 152, 194, 137, 187, 80, 177, 183, 65, 237, 195, 202, 86, 167, 194, 32, 188, 210, 177, 125, 187, 206, 195, 38, 125, 22, 195, 48, 187, 60, 181, 64, 99, 226, 195, 249, 203, 36, 195, 223, 187, 187, 181, 141, 134, 190, 195, 0, 0, 92, 195, 160, 186, 166, 183, 217, 163, 208, 195, 177, 234, 112, 195, 65, 187, 48, 184, 159, 135, 168, 195, 204, 105, 141, 195, 220, 185, 235, 184, 142, 141, 184, 195, 186, 219, 154, 195, 107, 186, 98, 185, 204, 105, 141, 195, 159, 135, 168, 195, 235, 184, 220, 185, 186, 219, 154, 195, 142, 141, 184, 195, 98, 185, 107, 186, 0, 0, 92, 195, 141, 134, 190, 195, 166, 183, 160, 186, 177, 234, 112, 195, 217, 163, 208, 195, 48, 184, 65, 187, 38, 125, 22, 195, 125, 187, 206, 195, 60, 181, 48, 187, 249, 203, 36, 195, 64, 99, 226, 195, 187, 181, 223, 187, 118, 207, 152, 194, 95, 168, 216, 195, 80, 177, 137, 187, 202, 86, 167, 194, 183, 65, 237, 195, 210, 177, 32, 188, 106, 1, 182, 169, 0, 0, 220, 195, 0, 0, 166, 187, 87, 79, 199, 169, 177, 234, 240, 195, 0, 0, 48, 188, 118, 207, 152, 66, 95, 168, 216, 195, 80, 49, 137, 187, 202, 86, 167, 66, 183, 65, 237, 195, 210, 49, 32, 188, 38, 125, 22, 67, 125, 187, 206, 195, 60, 53, 48, 187, 249, 203, 36, 67, 64, 99, 226, 195, 187, 53, 223, 187, 0, 0, 92, 67, 141, 134, 190, 195, 166, 55, 160, 186, 177, 234, 112, 67, 217, 163, 208, 195, 48, 56, 65, 187, 204, 105, 141, 67, 159, 135, 168, 195, 235, 56, 220, 185, 186, 219, 154, 67, 142, 141, 184, 195, 98, 57, 107, 186, 159, 135, 168, 67, 204, 105, 141, 195, 220, 57, 235, 184, 142, 141, 184, 67, 186, 219, 154, 195, 107, 58, 98, 185, 141, 134, 190, 67, 0, 0, 92, 195, 160, 58, 166, 183, 217, 163, 208, 67, 177, 234, 112, 195, 65, 59, 48, 184, 125, 187, 206, 67, 38, 125, 22, 195, 48, 59, 60, 181, 64, 99, 226, 67, 249, 203, 36, 195, 223, 59, 187, 181, 95, 168, 216, 67, 118, 207, 152, 194, 137, 59, 80, 177, 183, 65, 237, 67, 202, 86, 167, 194, 32, 60, 210, 177, 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0 ),
"array_index_data": PoolByteArray( ),
"blend_shape_data": [ ],
"format": 359441,
"index_count": 0,
"primitive": 5,
"skeleton_aabb": [ ],
"vertex_count": 74
}
[sub_resource type="ShaderMaterial" id=3]
shader = ExtResource( 11 )
shader_param/bps = null
shader_param/star_color = null
shader_param/held_color = null
shader_param/screen_size = null
[sub_resource type="ShaderMaterial" id=4]
shader = ExtResource( 10 )
shader_param/line_color = Color( 0.8, 0.8, 1, 0.8 )
shader_param/line_color_double = Color( 1, 1, 0.6, 0.9 )
shader_param/dot_color = Color( 1, 1, 1, 0.8 )
shader_param/bps = 1.0
shader_param/line_thickness = 0.012
shader_param/line_thickness_min = 0.0
shader_param/dot_thickness = 0.033
shader_param/dot_fullbright_thickness = 0.013
shader_param/max_angle = 1.0708
shader_param/max_dist = 1.25
shader_param/array_postmul = Vector3( 1, 1, 1 )
shader_param/array_sidelen = 16
shader_param/array_size = 256
[sub_resource type="CanvasItemMaterial" id=5]
blend_mode = 4
[sub_resource type="Curve" id=6]
min_value = -1.0
_data = [ Vector2( -1, -1 ), 0.0, 0.0, 0, 0, Vector2( 0, 0 ), 2.0, 2.0, 1, 1, Vector2( 1, 1 ), 0.0, 0.0, 0, 0 ]
[node name="RadialGame" type="Control"]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -540.0
margin_top = -540.0
margin_right = 540.0
margin_bottom = 540.0
__meta__ = {
"_edit_use_anchors_": false
}
[node name="music" type="AudioStreamPlayer" parent="."]
bus = "Music"
[node name="video" type="VideoPlayer" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
margin_left = -540.0
margin_top = -540.0
margin_right = 540.0
margin_bottom = 540.0
grow_horizontal = 2
grow_vertical = 2
rect_pivot_offset = Vector2( 540, 540 )
mouse_filter = 2
volume_db = -80.0
bus = "Music"
script = ExtResource( 3 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ScreenFilter" type="ColorRect" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
color = Color( 0, 0, 0, 1 )
script = ExtResource( 4 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Center" type="Control" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Receptors" type="MeshInstance2D" parent="Center"]
material = SubResource( 1 )
mesh = SubResource( 2 )
script = ExtResource( 9 )
[node name="Tween" type="Tween" parent="Center/Receptors"]
[node name="NoteHandler" type="Node2D" parent="Center"]
script = ExtResource( 8 )
[node name="Viewport" type="Viewport" parent="Center/NoteHandler"]
size = Vector2( 1080, 1080 )
transparent_bg = true
usage = 1
render_target_v_flip = true
script = ExtResource( 5 )
[node name="Center" type="Node2D" parent="Center/NoteHandler/Viewport"]
position = Vector2( 540, 540 )
[node name="SlideTrailHandler" type="Node2D" parent="Center/NoteHandler/Viewport/Center"]
[node name="JudgeText" type="MeshInstance2D" parent="Center/NoteHandler/Viewport/Center"]
texture = ExtResource( 2 )
[node name="meshinstance" type="MeshInstance2D" parent="Center/NoteHandler/Viewport/Center"]
material = SubResource( 3 )
[node name="notelines" type="MeshInstance2D" parent="Center/NoteHandler/Viewport/Center"]
material = SubResource( 4 )
[node name="Painter" type="Node2D" parent="Center/NoteHandler"]
material = SubResource( 5 )
script = ExtResource( 6 )
[node name="Menu" parent="." instance=ExtResource( 15 )]
anchor_right = 1.0
anchor_bottom = 1.0
margin_left = 0.0
margin_top = 0.0
margin_right = 0.0
margin_bottom = 0.0
NoteHandlerPath = NodePath("../Center/NoteHandler")
ease_curve = SubResource( 6 )
[node name="Bezel" type="Control" parent="."]
anchor_left = 0.5
anchor_top = 0.5
anchor_right = 0.5
anchor_bottom = 0.5
script = ExtResource( 13 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="InputHandler" type="Control" parent="."]
anchor_right = 1.0
anchor_bottom = 1.0
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}

155
main.tscn
View File

@ -1,152 +1,25 @@
[gd_scene load_steps=21 format=2]
[gd_scene load_steps=4 format=2]
[ext_resource path="res://scripts/main.gd" type="Script" id=1]
[ext_resource path="res://scripts/video.gd" type="Script" id=2]
[ext_resource path="res://scripts/ScreenFilter.gd" type="Script" id=3]
[ext_resource path="res://shaders/receptors.shader" type="Shader" id=4]
[ext_resource path="res://scripts/Receptors.gd" type="Script" id=5]
[ext_resource path="res://scripts/NoteHandler.gd" type="Script" id=6]
[ext_resource path="res://scripts/NoteViewport.gd" type="Script" id=7]
[ext_resource path="res://assets/text-4k.png" type="Texture" id=8]
[ext_resource path="res://shaders/notemesh.shader" type="Shader" id=9]
[ext_resource path="res://shaders/notelines.shader" type="Shader" id=10]
[ext_resource path="res://scripts/NotePainter.gd" type="Script" id=11]
[ext_resource path="res://Menu.tscn" type="PackedScene" id=12]
[ext_resource path="res://RadialGame.tscn" type="PackedScene" id=1]
[ext_resource path="res://scripts/TouchInput.gd" type="Script" id=2]
[ext_resource path="res://OptionPanel.tscn" type="PackedScene" id=13]
[ext_resource path="res://scripts/Bezel.gd" type="Script" id=15]
[ext_resource path="res://scripts/InputHandler.gd" type="Script" id=17]
[sub_resource type="ShaderMaterial" id=1]
shader = ExtResource( 4 )
shader_param/num_receptors = 8
shader_param/receptor_offset = 0.392699
shader_param/line_color = Color( 0, 0, 1, 1 )
shader_param/dot_color = Color( 0, 0, 1, 1 )
shader_param/shadow_color = Color( 0, 0, 0, 0.57 )
shader_param/line_thickness = 0.00434783
shader_param/dot_radius = 0.026087
shader_param/shadow_thickness = 0.0173913
shader_param/px = 0.00108696
shader_param/px2 = 0.00217391
shader_param/alpha = 1.0
[sub_resource type="ArrayMesh" id=6]
surfaces/0 = {
"aabb": AABB( -481.834, -481.834, 0, 963.667, 963.667, 0 ),
"array_data": PoolByteArray( 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0, 95, 168, 216, 67, 118, 207, 152, 66, 137, 59, 80, 49, 183, 65, 237, 67, 202, 86, 167, 66, 32, 60, 210, 49, 125, 187, 206, 67, 38, 125, 22, 67, 48, 59, 60, 53, 64, 99, 226, 67, 249, 203, 36, 67, 223, 59, 187, 53, 141, 134, 190, 67, 0, 0, 92, 67, 160, 58, 166, 55, 217, 163, 208, 67, 177, 234, 112, 67, 65, 59, 48, 56, 159, 135, 168, 67, 204, 105, 141, 67, 220, 57, 235, 56, 142, 141, 184, 67, 186, 219, 154, 67, 107, 58, 98, 57, 204, 105, 141, 67, 159, 135, 168, 67, 235, 56, 220, 57, 186, 219, 154, 67, 142, 141, 184, 67, 98, 57, 107, 58, 0, 0, 92, 67, 141, 134, 190, 67, 166, 55, 160, 58, 177, 234, 112, 67, 217, 163, 208, 67, 48, 56, 65, 59, 38, 125, 22, 67, 125, 187, 206, 67, 60, 53, 48, 59, 249, 203, 36, 67, 64, 99, 226, 67, 187, 53, 223, 59, 118, 207, 152, 66, 95, 168, 216, 67, 80, 49, 137, 59, 202, 86, 167, 66, 183, 65, 237, 67, 210, 49, 32, 60, 141, 172, 242, 40, 0, 0, 220, 67, 0, 0, 166, 59, 143, 223, 4, 41, 177, 234, 240, 67, 0, 0, 48, 60, 118, 207, 152, 194, 95, 168, 216, 67, 80, 177, 137, 59, 202, 86, 167, 194, 183, 65, 237, 67, 210, 177, 32, 60, 38, 125, 22, 195, 125, 187, 206, 67, 60, 181, 48, 59, 249, 203, 36, 195, 64, 99, 226, 67, 187, 181, 223, 59, 0, 0, 92, 195, 141, 134, 190, 67, 166, 183, 160, 58, 177, 234, 112, 195, 217, 163, 208, 67, 48, 184, 65, 59, 204, 105, 141, 195, 159, 135, 168, 67, 235, 184, 220, 57, 186, 219, 154, 195, 142, 141, 184, 67, 98, 185, 107, 58, 159, 135, 168, 195, 204, 105, 141, 67, 220, 185, 235, 56, 142, 141, 184, 195, 186, 219, 154, 67, 107, 186, 98, 57, 141, 134, 190, 195, 0, 0, 92, 67, 160, 186, 166, 55, 217, 163, 208, 195, 177, 234, 112, 67, 65, 187, 48, 56, 125, 187, 206, 195, 38, 125, 22, 67, 48, 187, 60, 53, 64, 99, 226, 195, 249, 203, 36, 67, 223, 187, 187, 53, 95, 168, 216, 195, 118, 207, 152, 66, 137, 187, 80, 49, 183, 65, 237, 195, 202, 86, 167, 66, 32, 188, 210, 49, 0, 0, 220, 195, 141, 172, 114, 41, 166, 187, 0, 0, 177, 234, 240, 195, 143, 223, 132, 41, 48, 188, 0, 0, 95, 168, 216, 195, 118, 207, 152, 194, 137, 187, 80, 177, 183, 65, 237, 195, 202, 86, 167, 194, 32, 188, 210, 177, 125, 187, 206, 195, 38, 125, 22, 195, 48, 187, 60, 181, 64, 99, 226, 195, 249, 203, 36, 195, 223, 187, 187, 181, 141, 134, 190, 195, 0, 0, 92, 195, 160, 186, 166, 183, 217, 163, 208, 195, 177, 234, 112, 195, 65, 187, 48, 184, 159, 135, 168, 195, 204, 105, 141, 195, 220, 185, 235, 184, 142, 141, 184, 195, 186, 219, 154, 195, 107, 186, 98, 185, 204, 105, 141, 195, 159, 135, 168, 195, 235, 184, 220, 185, 186, 219, 154, 195, 142, 141, 184, 195, 98, 185, 107, 186, 0, 0, 92, 195, 141, 134, 190, 195, 166, 183, 160, 186, 177, 234, 112, 195, 217, 163, 208, 195, 48, 184, 65, 187, 38, 125, 22, 195, 125, 187, 206, 195, 60, 181, 48, 187, 249, 203, 36, 195, 64, 99, 226, 195, 187, 181, 223, 187, 118, 207, 152, 194, 95, 168, 216, 195, 80, 177, 137, 187, 202, 86, 167, 194, 183, 65, 237, 195, 210, 177, 32, 188, 106, 1, 182, 169, 0, 0, 220, 195, 0, 0, 166, 187, 87, 79, 199, 169, 177, 234, 240, 195, 0, 0, 48, 188, 118, 207, 152, 66, 95, 168, 216, 195, 80, 49, 137, 187, 202, 86, 167, 66, 183, 65, 237, 195, 210, 49, 32, 188, 38, 125, 22, 67, 125, 187, 206, 195, 60, 53, 48, 187, 249, 203, 36, 67, 64, 99, 226, 195, 187, 53, 223, 187, 0, 0, 92, 67, 141, 134, 190, 195, 166, 55, 160, 186, 177, 234, 112, 67, 217, 163, 208, 195, 48, 56, 65, 187, 204, 105, 141, 67, 159, 135, 168, 195, 235, 56, 220, 185, 186, 219, 154, 67, 142, 141, 184, 195, 98, 57, 107, 186, 159, 135, 168, 67, 204, 105, 141, 195, 220, 57, 235, 184, 142, 141, 184, 67, 186, 219, 154, 195, 107, 58, 98, 185, 141, 134, 190, 67, 0, 0, 92, 195, 160, 58, 166, 183, 217, 163, 208, 67, 177, 234, 112, 195, 65, 59, 48, 184, 125, 187, 206, 67, 38, 125, 22, 195, 48, 59, 60, 181, 64, 99, 226, 67, 249, 203, 36, 195, 223, 59, 187, 181, 95, 168, 216, 67, 118, 207, 152, 194, 137, 59, 80, 177, 183, 65, 237, 67, 202, 86, 167, 194, 32, 60, 210, 177, 0, 0, 220, 67, 0, 0, 0, 0, 166, 59, 0, 0, 177, 234, 240, 67, 0, 0, 0, 0, 48, 60, 0, 0 ),
"array_index_data": PoolByteArray( ),
"blend_shape_data": [ ],
"format": 359441,
"index_count": 0,
"primitive": 5,
"skeleton_aabb": [ ],
"vertex_count": 74
}
[sub_resource type="ShaderMaterial" id=3]
shader = ExtResource( 9 )
shader_param/bps = null
shader_param/star_color = null
shader_param/held_color = null
shader_param/screen_size = null
[sub_resource type="ShaderMaterial" id=4]
shader = ExtResource( 10 )
shader_param/line_color = Color( 0.8, 0.8, 1, 0.8 )
shader_param/line_color_double = Color( 1, 1, 0.6, 0.9 )
shader_param/dot_color = Color( 1, 1, 1, 0.8 )
shader_param/bps = 1.0
shader_param/line_thickness = 0.012
shader_param/line_thickness_min = 0.0
shader_param/dot_thickness = 0.033
shader_param/dot_fullbright_thickness = 0.013
shader_param/max_angle = 1.0708
shader_param/max_dist = 1.25
shader_param/array_postmul = Vector3( 1, 1, 1 )
shader_param/array_sidelen = 16
shader_param/array_size = 256
[sub_resource type="CanvasItemMaterial" id=5]
blend_mode = 4
[node name="main" type="Node2D"]
position = Vector2( 540, 540 )
script = ExtResource( 1 )
[node name="main" type="Control"]
anchor_right = 1.0
anchor_bottom = 1.0
__meta__ = {
"_edit_horizontal_guides_": [ ],
"_edit_vertical_guides_": [ ]
"_edit_use_anchors_": false
}
[node name="music" type="AudioStreamPlayer" parent="."]
bus = "Music"
[node name="RadialGame" parent="." instance=ExtResource( 1 )]
[node name="video" type="VideoPlayer" parent="."]
margin_left = -540.0
margin_top = -540.0
margin_right = 540.0
margin_bottom = 540.0
grow_horizontal = 2
grow_vertical = 2
rect_pivot_offset = Vector2( 540, 540 )
mouse_filter = 2
volume_db = -80.0
bus = "Music"
[node name="OptionPanel" parent="." instance=ExtResource( 13 )]
[node name="TouchInput" type="Control" parent="."]
margin_right = 40.0
margin_bottom = 40.0
mouse_filter = 1
script = ExtResource( 2 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="ScreenFilter" type="Node2D" parent="."]
script = ExtResource( 3 )
[node name="Receptors" type="MeshInstance2D" parent="."]
material = SubResource( 1 )
mesh = SubResource( 6 )
script = ExtResource( 5 )
[node name="Tween" type="Tween" parent="Receptors"]
[node name="NoteHandler" type="Node2D" parent="."]
script = ExtResource( 6 )
[node name="Viewport" type="Viewport" parent="NoteHandler"]
size = Vector2( 1080, 1080 )
transparent_bg = true
usage = 1
render_target_v_flip = true
script = ExtResource( 7 )
[node name="Center" type="Node2D" parent="NoteHandler/Viewport"]
position = Vector2( 540, 540 )
[node name="SlideTrailHandler" type="Node2D" parent="NoteHandler/Viewport/Center"]
[node name="JudgeText" type="MeshInstance2D" parent="NoteHandler/Viewport/Center"]
texture = ExtResource( 8 )
[node name="meshinstance" type="MeshInstance2D" parent="NoteHandler/Viewport/Center"]
material = SubResource( 3 )
[node name="notelines" type="MeshInstance2D" parent="NoteHandler/Viewport/Center"]
material = SubResource( 4 )
[node name="Painter" type="Node2D" parent="NoteHandler"]
material = SubResource( 5 )
script = ExtResource( 11 )
[node name="Menu" parent="." instance=ExtResource( 12 )]
[node name="Bezel" type="Node2D" parent="."]
script = ExtResource( 15 )
[node name="InputHandler" type="Control" parent="."]
margin_left = -540.0
margin_top = -540.0
margin_right = 540.0
margin_bottom = 540.0
script = ExtResource( 17 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="OptionPanel" parent="." instance=ExtResource( 13 )]

View File

@ -49,7 +49,7 @@ window/size/height=1080
window/size/fullscreen=true
window/handheld/orientation="sensor"
window/stretch/mode="2d"
window/stretch/aspect="keep_height"
window/stretch/aspect="expand"
[gdnative]

View File

@ -1,5 +1,5 @@
tool
extends Node2D
extends Control
# Draw the bezel for radial gamemode
var center := Vector2(0.0, 0.0)

View File

@ -1,11 +1,5 @@
extends Control
var touch_points = {} # dict containing all points touched on the screen
var touch_positions = [] # array of above
var fingers = 0 setget set_fingers # setter for show fingers number on screen
var txt_ball = preload('res://assets/ball.png') # preload our ball texture
var default_font = preload('res://assets/NotoSans.tres')
var buttons_pressed := PoolByteArray()
var touchbuttons_pressed := PoolByteArray()
signal button_pressed(index) # Add int type to these once Godot supports typed signals
@ -17,12 +11,8 @@ const TOUCHBUTTON_MAX_DIST := 1.075
const BUTTON_MIN_DIST := 0.925
const BUTTON_MAX_DIST := 1.25
var swipe_momentum := Vector2.ZERO
func resize():
var screen_size = $'/root'.get_visible_rect().size
rect_position = -screen_size*0.5
rect_size = screen_size
func _ready():
$'/root/main/TouchInput'.connect('touch_positions_updated', self, '_check_buttons')
func _init():
buttons_pressed.resize(Rules.COLS)
@ -31,51 +21,19 @@ func _init():
buttons_pressed[i] = 0
touchbuttons_pressed[i] = 0
func _ready():
Input.set_use_accumulated_input(false) # Gotta go fast
set_process_unhandled_input(true) # process user input
set_fingers(0)
# connect('button_pressed', self, 'print_pressed')
resize()
func print_pressed(col: int):
print('Pressed %d'%col)
func _draw(): # draw fingers points on screen
# var swipe_origin = Vector2(300, 540)
# draw_line(swipe_origin, swipe_origin+swipe_momentum, Color.red)
# draw points
for i in touch_points:
var point = touch_points[i]
# if point.pressed:
# DRAW POINTS ################################################
draw_texture(txt_ball, point.position - Vector2(24, 24))
# draw_string(default_font, point.position - Vector2(24, 24), str(i))
# draw_string(default_font, point.position + Vector2(-24, 48), str(point.position))
# if len(touch_positions) > 1:
# for i in range(len(touch_positions)-1):
# # Draw line
# draw_line(touch_positions[i], touch_positions[i+1], Color(1,1,1,1))
func _process(delta):
swipe_momentum *= max(1.0 - 5.0*delta, 0)
if swipe_momentum.length_squared() < 1.0:
swipe_momentum = Vector2.ZERO
update()
func update_data():
touch_positions.clear()
for i in touch_points:
touch_positions.push_back(touch_points[i].position - rect_size/2)
func _check_buttons(touch_positions):
var buttons_pressed_temp := []
var touchbuttons_pressed_temp := []
for i in Rules.COLS:
buttons_pressed_temp.append(false)
touchbuttons_pressed_temp.append(false)
var global_center = rect_global_position + rect_size*0.5
for pos in touch_positions:
pos -= global_center
var pol = cartesian2polar(pos.x, pos.y)
var dist = pol.x/GameTheme.receptor_ring_radius
var angle = rad2deg(pol.y)
@ -93,36 +51,6 @@ func update_data():
set_button_state(i, buttons_pressed_temp[i])
set_touchbutton_state(i, touchbuttons_pressed_temp[i])
set_fingers(len(touch_positions))
update()
##########################################################################
func _input(event):
# Unfortunately event.device does NOT differentiate touchscreen inputs on X11, Godot v3.1.1
# As such, we'll need to do some fancy mapping for multiple inputs
if (event is InputEventScreenDrag):
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
touch_points[event.index] = {pressed = true, position = event.position}
swipe_momentum = event.speed
elif (event is InputEventScreenTouch):
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
if event.pressed:
if not touch_points.has(event.index):
touch_points[event.index] = {}
touch_points[event.index].position = event.position # update position
# touch_points[event.index].pressed = event.pressed # update "pressed" flag
else:
if touch_points.has(event.index):
touch_points.erase(event.index)
elif (event is InputEventMouse):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
update_data()
##########################################################################
# write how many fingers are tapping the screen
func set_fingers(value):
fingers = max(value, 0)
func set_button_state(index: int, state: bool):
var new_state = int(state)
match new_state - buttons_pressed[index]:

View File

@ -2,8 +2,10 @@
#extends Node2D
extends Control
export var NoteHandlerPath := @'/root/main/NoteHandler'
export var NoteHandlerPath := @'../Center/NoteHandler'
export var ReceptorsPath := @'../Center/Receptors'
onready var NoteHandler := get_node(NoteHandlerPath)
onready var Receptors := get_node(ReceptorsPath)
onready var ScoreText := $ScoreText
onready var PVMusic := $PVMusic
@ -435,7 +437,7 @@ func _draw():
ScoreText.show()
func set_menu_mode(mode):
$'../Receptors'.fade(mode == MenuMode.GAMEPLAY)
Receptors.fade(mode == MenuMode.GAMEPLAY)
if mode == MenuMode.GAMEPLAY:
PVMusic.stop()
rect_clip_content = false
@ -501,7 +503,8 @@ func finished_song(song_key, score_data):
func _input(event):
if !visible:
return
if (event is InputEventScreenTouch) or (event is InputEventMouseButton):
if (event is InputEventMouseButton): # Add this if we ever manage to be rid of the curse of Touch->Mouse emulation: (event is InputEventScreenTouch)
print(event)
if event.pressed:
var pos = event.position - get_global_transform_with_canvas().get_origin()
match menu_mode:

View File

@ -7,9 +7,9 @@ signal finished_song(song_key, score_data)
var running := false
var song_key = ''
export var MusicPlayerPath := @'/root/main/music'
export var VideoPlayerPath := @'/root/main/video'
export var InputHandlerPath := @'/root/main/InputHandler'
export var MusicPlayerPath := @'../../music'
export var VideoPlayerPath := @'../../video'
export var InputHandlerPath := @'../../InputHandler'
onready var MusicPlayer := get_node(MusicPlayerPath)
onready var VideoPlayer := get_node(VideoPlayerPath)
onready var InputHandler := get_node(InputHandlerPath)

View File

@ -1,14 +1,8 @@
extends VBoxContainer
func resize():
var screen_size = $'/root'.get_visible_rect().size
rect_position = -screen_size*0.5
# rect_size = screen_size
export var btn_language: NodePath = @"hbox_language/btn_language"
onready var BtnLanguage = get_node(btn_language)
func _ready() -> void:
$'/root'.connect('size_changed', self, 'resize')
$HBoxContainer/btn_vsync.connect('toggled', OS, 'set_use_vsync')
$HBoxContainer/btn_wakelock.connect('toggled', OS, 'set_keep_screen_on') # This is waiting on godotengine/godot#35536 to be merged to do anything in Linux :(
$sl_screenfilter.connect('value_changed', self, 'update_filter')
@ -19,7 +13,6 @@ func _ready() -> void:
BtnLanguage.add_item('Romaji')
BtnLanguage.add_item('English')
BtnLanguage.connect('item_selected', self, 'update_display_language')
resize()
func update_filter(alpha: float):

View File

@ -1,11 +1,6 @@
extends Node2D
extends ColorRect
onready var root := $'/root'
func _draw():
var screen_size = root.get_visible_rect().size
var screen_height = max(screen_size.x, screen_size.y)
draw_rect(Rect2(-screen_height/2, -screen_height/2, screen_height, screen_height), GameTheme.screen_filter)
func _ready():
GameTheme.connect('screen_filter_changed', self, 'update')
GameTheme.connect('screen_filter_changed', self, 'set_frame_color')

76
scripts/TouchInput.gd Normal file
View File

@ -0,0 +1,76 @@
extends Control
var touch_points = {} # dict containing all points touched on the screen
var touch_positions = [] # array of above
signal touch_positions_updated(positions)
var fingers = 0 setget set_fingers # setter for show fingers number on screen
var txt_ball = preload('res://assets/ball.png') # preload our ball texture
var default_font = preload('res://assets/NotoSans.tres')
var swipe_momentum := Vector2.ZERO
func _ready():
Input.set_use_accumulated_input(false) # Gotta go fast
set_process_unhandled_input(true) # process user input
set_fingers(0)
# connect('button_pressed', self, 'print_pressed')
func print_pressed(col: int):
print('Pressed %d'%col)
func _draw(): # draw fingers points on screen
# var swipe_origin = Vector2(300, 540)
# draw_line(swipe_origin, swipe_origin+swipe_momentum, Color.red)
# draw points
for i in touch_points:
var point = touch_points[i]
# if point.pressed:
# DRAW POINTS ################################################
draw_texture(txt_ball, point.position - Vector2(24, 24))
# draw_string(default_font, point.position - Vector2(24, 24), str(i))
# draw_string(default_font, point.position + Vector2(-24, 48), str(point.position))
# if len(touch_positions) > 1:
# for i in range(len(touch_positions)-1):
# # Draw line
# draw_line(touch_positions[i], touch_positions[i+1], Color(1,1,1,1))
func _process(delta):
swipe_momentum *= max(1.0 - 5.0*delta, 0)
if swipe_momentum.length_squared() < 1.0:
swipe_momentum = Vector2.ZERO
update()
func update_data():
touch_positions.clear()
for i in touch_points:
touch_positions.push_back(touch_points[i].position) # - rect_size/2)
emit_signal('touch_positions_updated', touch_positions)
set_fingers(len(touch_positions))
update()
##########################################################################
func _input(event):
# Unfortunately event.device does NOT differentiate touchscreen inputs on X11, Godot v3.1.1
# As such, we'll need to do some fancy mapping for multiple inputs
if (event is InputEventScreenDrag):
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
touch_points[event.index] = {pressed = true, position = event.position}
swipe_momentum = event.speed
elif (event is InputEventScreenTouch):
Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN)
if event.pressed:
if not touch_points.has(event.index):
touch_points[event.index] = {}
touch_points[event.index].position = event.position # update position
# touch_points[event.index].pressed = event.pressed # update "pressed" flag
else:
if touch_points.has(event.index):
touch_points.erase(event.index)
elif (event is InputEventMouse):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
update_data()
func set_fingers(value):
fingers = max(value, 0)

View File

@ -1,21 +0,0 @@
extends Node2D
# member variables
var screen_height := 1080
var x_margin := 0.0
var y_margin := 0.0
var screen_center := Vector2(1920/2, screen_height/2)
func resize():
var screen_size = $"/root".get_visible_rect().size
screen_center = screen_size*0.5
position = screen_center
screen_height = screen_size.y
x_margin = max((screen_size.x - screen_size.y)/2.0, 0.0)
y_margin = max((screen_size.y - screen_size.x)/2.0, 0.0)
func _ready():
$"/root".connect("size_changed", self, "resize")
resize()

View File

@ -1,6 +1,8 @@
tool
extends Node
signal screen_filter_changed(color)
var tex_notes := preload('res://assets/spritesheet-2048.png')
var tex_judgement_text := preload('res://assets/text-4k.png')
var tex_slide_arrow := tex_notes
@ -147,9 +149,25 @@ const NORMAL_ARRAY_8 := PoolVector3Array([
var display_language = 'n'
var screen_filter_min_alpha := 0.2
var screen_filter_min_alpha := 0.2 setget set_screen_filter_min_alpha
var screen_filter_alpha_scale := 1.0 setget set_screen_filter_alpha
var screen_filter := Color(0.0, 0.0, 0.0, screen_filter_min_alpha)
signal screen_filter_changed()
func set_screen_filter_min_alpha(alpha: float):
# if alpha == screen_filter_min_alpha:
# return
screen_filter_min_alpha = alpha
set_screen_filter_alpha(screen_filter_alpha_scale)
func set_screen_filter_alpha(alpha: float):
# if alpha == screen_filter_alpha_scale:
# return
# Scale to minimum alpha
var new_alpha = lerp(screen_filter_min_alpha, 1.0, alpha)
if new_alpha != screen_filter.a:
screen_filter = Color(screen_filter.r, screen_filter.g, screen_filter.b, new_alpha)
emit_signal("screen_filter_changed", screen_filter)
var receptor_color := Color.blue
var bezel_color := Color.black if not Engine.editor_hint else Color.red
@ -158,13 +176,6 @@ var slide_trail_alpha := 0.88
var RADIAL_COL_ANGLES := PoolRealArray() # ideally const
var RADIAL_UNIT_VECTORS := PoolVector2Array() # ideally const
func set_screen_filter_alpha(alpha: float):
# Scale to minimum alpha
var new_alpha = lerp(screen_filter_min_alpha, 1.0, alpha)
if new_alpha != screen_filter.a:
screen_filter = Color(screen_filter.r, screen_filter.g, screen_filter.b, new_alpha)
emit_signal("screen_filter_changed")
var radial_values_initialized := false
func init_radial_values():
for i in range(Rules.COLS):