diff --git a/prefabs/spaces/galaxy.tscn b/prefabs/spaces/galaxy.tscn new file mode 100644 index 0000000..ea79cb1 --- /dev/null +++ b/prefabs/spaces/galaxy.tscn @@ -0,0 +1,187 @@ +[gd_scene format=4 uid="uid://bjvwg8rpogjo2"] + +[ext_resource type="Script" uid="uid://dhxblx0bm60g6" path="res://scripts/spaces/Galaxy.cs" id="1_6wq32"] +[ext_resource type="Texture2D" uid="uid://drj0rof0q81b5" path="res://textures/galaxy_skybox.png" id="2_6wq32"] +[ext_resource type="Texture2D" uid="uid://d4n3duxjt288o" path="res://textures/galaxy_rainbow.png" id="3_tgxn1"] + +[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_rhgfa"] +panorama = ExtResource("2_6wq32") + +[sub_resource type="Sky" id="Sky_1638i"] +sky_material = SubResource("PanoramaSkyMaterial_rhgfa") + +[sub_resource type="Environment" id="Environment_7u5gs"] +background_mode = 2 +sky = SubResource("Sky_1638i") +glow_normalized = true +glow_blend_mode = 0 +fog_enabled = true +fog_mode = 1 +fog_light_color = Color(0, 0, 0, 1) +fog_light_energy = 0.02 +fog_density = 1.0 +fog_sky_affect = 0.25 +fog_height_density = -0.3299 +fog_depth_curve = 0.535885 +fog_depth_begin = 25.0 +fog_depth_end = 141.2 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gx5yi"] +transparency = 1 +shading_mode = 0 +disable_fog = true +albedo_texture = ExtResource("3_tgxn1") + +[sub_resource type="PlaneMesh" id="PlaneMesh_gx5yi"] +material = SubResource("StandardMaterial3D_gx5yi") +size = Vector2(120, 120) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qb5t2"] +emission_enabled = true +emission = Color(0.23245946, 0.4975598, 0.48952162, 1) +emission_energy_multiplier = 0.31 + +[sub_resource type="SphereMesh" id="SphereMesh_gx5yi"] +material = SubResource("StandardMaterial3D_qb5t2") +radial_segments = 12 +rings = 24 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_74ve1"] +emission_enabled = true +emission = Color(0.23137255, 0.49803922, 0.49019608, 1) +emission_energy_multiplier = 0.3 + +[sub_resource type="ArrayMesh" id="ArrayMesh_yncsu"] +resource_name = "pTorus1" +_surfaces = [{ +"aabb": AABB(-0.022716504, -0.0020000045, -0.022716511, 0.045433, 0.0040000062, 0.045433007), +"attribute_data": PackedByteArray("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"), +"format": 34359742487, +"index_count": 2400, +"index_data": PackedByteArray("7wB7AAsAewDvAPAA8AAIAHsAfwAIAPAA8ADxAH8ASAB/APEAfgDxAPAA8QDyAEgA8gDxAH4ASADyAPMA8wAcAEgAgwAcAPMA8wD0AIMAAgCDAPQA9AD1AAIAAgD1APYA9gCHAAIAhgD1APQA9gD1AIYAggD0APMA9ACCAIYA8wCBAIIAgQDzAPIA8gBNAIEAfgBNAPIAgQBNAPcA9wBNAH4AggCBAPgA9wD4AIEA+AD5AIIAhgCCAPkA+AD3AIQA+QD6AIYA+QD4AC8AhAAvAPgALwD7APkAiQD6APkA+QD7AIkAhgD6APwA/AD6AIkATwD7AC8AiQD7AE8ATgAvAIQALwBOAE8AhACFAE4ATwBOAP0A/QBOAIUATwD+AIkA/QD/AE8A/gBPAP8A/wD9AAABiQD+AFAAUAABAYkAiQABAfwAAgFQAP4A/wAxAP4A/gAxAAIBMQD/AKEAAAGhAP8AoQADATEAUQABAVAA/AABAVEAUAA0AFEANABQAAIBUQAEAfwAMQADAZ0AnQACATEAnQADAZ8AnwADAaEAAgGdAAUBHwBRADQABAFRAB8AAgEGATQABQEGAQIBNACPAB8AjwA0AAYBBgEHAY8ABwEGAQUBMgCPAAcBjgAfAI8AjwAyAI4ACAEfAI4AHwAIAQQBjgAJAQgBBAEIAYwAUgCMAAgBCAEJAVIAjACKAAQBCQGOAJAAkACOADIAigCMAAoBCgGMAFIABAGKAIgAiAD8AAQB/ACIAIYAhgCIAPYAiACKAAsBCwH2AIgACgELAYoAhwD2AAsBCwEdAIcAHQALAQoBCgGLAB0AjQCLAAoBCgEMAY0AUgAMAQoBjQAMAQ0BDQEMAVIADQEBAI0AkgABAA0BDQEOAZIAUgCRAA0BDgENAZEAkQBSAAkBBwCSAA4BCQEPAZEAkQBUAA4BVACRAA8BkAAPAQkBDgFUAJQADgEQAQcAlAAQAQ4BBwAQAREBEQGVAAcAEAGUAJcAlwARARABlABUABIBDwESAVQAlQARARMBEwERAZcAEwEZAJUAEgEUAZQAlwCUABQBkwASAQ8BFAESAZMADwGQAJMAGQATARUBFQEWARkAlwCuABMBFQETAa4AFAEXAZcArgCXABcBFwEUAZgAkwCYABQBFwEYAa4AFgEVARkBGQEbABYBrQAbABkBrgBYABUBWACuABgBrAAZARUBFQFYAKwAGQEaAa0AGgEZAawArQAaARsBGwELAK0ACwAbAe8AGwEaAVoArABaABoB7wAbAX0AWgB9ABsBHAFaAKwAfQBaABwBrAAdARwBHQGsAFgAHAEeAX0AWAAfAR0BGAEfAVgAqwAcAR0BHgEcAasAHQEfAaoAqgAfARgBHQFZAKsAqgBZAB0BqwBZACABWQCqAKkAqQAgAVkAGAGvAKoAqgCvAFcAVwCpAKoAGACvABgBGAEXARgAmAAYABcBrwAYALAAsABXAK8AGACYAFUAVQCwABgAVQCYAJMAVwCwACEBIQGwAFUAqQBXACIBIQEiAVcAkwCWAFUAlgCTAJAAVQAjASEBIwFVAJYAkABTAJYAMgBTAJAAlgBTACQBJAFTADIAJAElAZYAlgAlASMBMgAmASQBBwEmATIAJQEkAScBJwEkASYBIwElASAAJwEgACUBIACyACMBIQEjAbIAJgEHASgBBQEoAQcBKAEpASYBJgEpAScBnAAoAQUBKQEoAZwAKgEgACcBsgAgACoBJwEpAZkAnACZACkBmQArAScBJwErASoBKgEsAbIALQErAZkALgEqASsBKwEtAS4BKgEuAS8BLwEsASoBLgEtAQYABgCaAC4BLwEuAZoABgAtATABmQAwAS0BMAGZAJwAMAGbAAYAmgAFAC8BLwEFALEAmwAwATEBnAAxATABMQEzAJsAAAAzADEBMQEyAQAAMgExAZwAngAAADIBsQAzAS8BMwGxAB4AMgE0AZ4AnAA1ATIBNAEyATUBBQE1AZwAAwCeADQBNgE1AQUBNQE2ATQBBQGdADYBnwA2AZ0ANAE2AZ8ANAE3AQMAnwA3ATQBAwA3ATgBOAE3AZ8AOAGgAAMAMACgADgBnwA5ATgBoQA5AZ8AOAE6ATAAOQGhAAABOAE5ATsBAAE7ATkBOwE6ATgBBAAwADoBPAE7AQABOgE7ATwBOgE9AQQAPAE9AToBogAEAD0BPQE8AUsAPQE+AaIASwA+AT0BCgCiAD4BPgE/AQoAPwE+AUsApgAKAD8BSwA8AUwAAAFMADwBPwFAAaYACQCmAEABQAFBAQkASQBAAT8BQQFAAUkASgAJAEEBQgFMAAABAAH9AEIBhQBCAf0ATABCAUMBQwFCAYUAQwFEAUwATABEAUsASwBFAT8BRQFLAEQBPwFFAUkARAFGAEUBSQBFAUYARAFDAUYBRgFGAEQBhQCjAEMBRgFDAaMALQCjAIUAhQCEAC0ALQCEAPcAowCkAEYB9wBHAS0AowAtAIAAgACkAKMAgAAtAEcBfgBHAfcARgGkAKUApQCkAIAApQBIAUYBRgBGAUgBRwF+AHwA8AB8AH4AfADwAO8AfABJAUcBRwFJAYAA7wB6AHwASQF8AHoAfQB6AO8AegB9AB4BegBKAUkBgABJAUoBHgFKAXoASgErAIAAKwBKAR4BgAArAKUAHgFLASsAqwBLAR4BpwClACsAKwBLAacASAGlAKcASwGrACwALACnAEsBIAEsAKsApwBMAUgBTAGnACwATQEsACABLABNAUwBTgFIAUwBSAFOAUYARgBOAUkATAFHAE4BRwBMAU0BTwFJAE4BTgFHAE8BSQBPAUEBTQFQAUcAUQFPAUcAQQFPAVEBRwBQAVEBUQFSAUEBQQFSAUoAGgBKAFIBUwFQAU0BUQFQAVMBUgFUARoAUgFRAVsAWwBUAVIBUwFbAFEBGgBUAVUBVQFUAVsAVQGoABoAHgCoAFUBWwBWAVUBVQFXAR4AHgBXATMBVQFWAVgBWAFXAVUBLgBWAVsAWAFWAS4AWwBTAS4AVgAzAVcBVwFYAVYALwEzAVYAVgAsAS8BsgAsAVYAVgBYAVkBLgBZAVgBVgBaAbIAWQFaAVYAsgBaASEBIgEhAVoBWgFZASIBIgFZAS4ALgBbASIBIgFbAakAXAFbAS4AqQBbAVwBLgBTAVwBXAEgAakATQFcAVMBIAFcAU0BXQG1AA4AEgC1AF0BDgBeAV0BXgEOAGoAXQFfARIAagBgAV4BYAFqACEAYQFdAV4BIQBiAWABYgEhALYAYwFeAWABXgFjAWEBYAGzAGMBswBgAWIBtgBkAWIBZAG2ACMAIwBlAWQBYgFkAW8AbwBkAWUBZQEjALgAbwBmAWIBYgFmAbMAZQFnAW8AuABoAWUBaAG4AAwAaQFnAWUBZQFoAWkBbwBnAWoBagFnAWkBZgFvAGsBagFrAW8AawFtAGYBswBmAW0AawFqAbcAaQElAGoBbQBrAWwBtwBsAWsBbQBtAbMAYwGzAG0BbgG3AGoBagElAG4BbQFvAWMBYQFjAW8BtABvAW0BbwE2AGEBNgBvAbQAtwBuAXABcQFuASUAcAFuAXEBJQByAXEBcwByASUAJQBpAXMAcwBpAWgBaAFzAXMADABzAWgBdAFzAQwAcwBzAXQBDAC5AHQBdAG5ABEAdAF1AXMAdQByAXMAcwB1AXUAcgF1AHYBdgFxAXIBQgB1AHUBdwFxAXYBcQF3AXABeAF2AXUAdQBCAHgBdgF5AXcBeQF2AXgBcgBwAXcBegF1AXQBdQF6AUIAdAF7AXoBEQB7AXQBQgB6AXkAeQB6AXsBfAF7AREAewF8AXkAEQC6AHwBfQF8AboAeQB8AX0BugBBAH0BfQFBABUAFQB+AX0BfgEVAL4AfQF/AXkAvgCAAX4BgAG+ABcAfQF+AYEBgQF/AX0BfgGAAYIBggGBAX4BFwCDAYABhAGCAYABgAGDAYQBhQGDARcAhAGDAYUBFwDBAIUBhgGFAcEAwQA8AIYBhQGHAYQBhwGFAYYBhgE8ABQAFACIAYYBiAEUAMUAhgGJAYcBiQGGAYgBigGEAYcBxQCLAYgBiwHFABIAEgBfAYsBiAGLAVwAXACLAV8BiAGMAYkBXACMAYgBiQGMAY0BXwGOAVwAjgFfAV0BXQFhAY4BjgFhATYAjwGNAYwBjAFcAI8BXACOAZABNgCQAY4BkAGPAVwAwwCNAY8BkQGPAZABjwGRAcMAxgCQATYAkAHGAJEBNgCSAcYAtACSATYAxgCSAZMBkgG0AJQBlAGTAZIBkQHGAJUBkwGVAcYAlQGWAZEBwwCRAZYBOACVAZMBXQCWAZUBlQE4AF0AlgGXAcMAlwGWAV0AkwGUATUAkwFpADgANQBpAJMBOABpADkAOQBpADUAyABdADgAOACYAcgAOQCYATgAXQDIAMcAKgDIAJgBxwDIACoAxwAoAF0AXQAoAJcBKADHAF8AmQGXASgAKgBmAMcAXwDHAGYAmAHTACoA0wCYATkAZgAqANQAKgDTANIA0gDUACoAOQCaAdMA0QDSANMA0wCaAdEA0gDRANAA0AAQANIA1ADSABAAEADVANQA1ADVAGcA0ADRAGgAaADRAJoBaAANANAAZwDWANQA1ADWAGYA1gBnACkAmwFmANYAKQDXANYA1gDXAJsB1wApANgAZgCbAV8A2QCbAdcAXwCbAdkA2ADaANcA1wDaANkA2gDYABYAFgDbANoAYgDZANoA2gDbAGIA3ADbABYAYgDbANwAFgDdANwA2QDEAF8AxADZAGIA3wDcAN0A3QAnAN8A3ADeAGIA3gDcAN8A4ADfACcAJwDhAOAA3wCcAd4AnAHfAOAA4gDgAOEA4QDjAOIA4ABAAJwBQADgAOIA4gDjABMA3gCcAT8APwCcAUAAYgDeAL8APwC/AN4AvwCdAWIAYgCdAcQAPgCdAb8AxACdAT4AvwA/AGUAQADkAD8APwDkACYAJgBlAD8AngHkAEAAeAAmAOQA5ACeAXgAZQAmAJ8BnwEmAHgAZQBjAL8AvwBjAD4AnwGgAWUAYwBlAKABoAGfAb0AoAGhAWMAogE+AGMAYwChAaIBoQGgAaMBvQCjAaABogGhAaQBowGkAaEBPgCiAaUBpAHAAKIBpQGiAcAApQFgAD4APgBgAMQAxABgAD0APQBfAMQAXwA9ACgAKAA9AJkBmQE9AGAAYAClAZkBmQGlAaYBwACmAaUBpgHCAJkBlwGZAcIAwgDDAJcBwgCmAV4AXgCmAcAAwwDCAKcBXgCnAcIApwGNAcMAjQGnAYkBhwGJAacBpwFeAIcBhwFeAIoBwACKAV4AigHAAKQBpAFhAIoBhAGKAWEAYQCkAaMBYQCCAYQBowFkAGEAggFhAGQAZACBAYIBZACjAb0AgQFkAKgBvQCoAWQAqAF/AYEBfwGoAakBqQGoAb0AqQF5AH8BeQCpAUIAQgCpAaoBvQCqAakBqgF4AUIAqwGqAb0AvQCfAasBrAF4AaoBqgGrAawBeACrAZ8BrAGrAXgAeAGsAXkBeAC7AKwBeQGsAbsAdgC7AHgAeACeAXYAuwBDAHkBQwC7AHYAeQFDAHQAdAB3AXkBdwF0AHIAdABDALwAdgC8AEMAcgB0AOsAvADrAHQA6wDsAHIAcAByAOwAcAFyAHAARQDsAOsARADrALwA6wBEAEUA5gC8AHYAvADmAEQAdgCtAeYAdwCtAXYAdgCeAXcAQAB3AJ4B4gB3AEAAdwDiAOUA5QCtAXcAEwDlAOIArQHlAHEAcQDlABMAcQDmAK0BEwDnAHEA5gBxAOgA6ABxAOcA6ABEAOYA5wAPAOgARADoAOkA6QDoAA8ADwDqAOkA6QBFAEQA7gDpAOoARQDpAO4A6gAkAO4AzADuACQAJACuAcwA7gDtAEUAzQDMAK4BrgEiAM0A7gDMAK8BrwHtAO4ArwHMAM0AzQAiAM8A7QCvATsARQDtALABOwCwAe0AsAHsAEUA7ACwAXAAcACwATsAzQBsAK8BOwCvAWwAzwDOAM0AzgDPAA0ADQBoAM4AzQDOADoAOgBsAM0AzgBoAMsAywA6AM4AmgHLAGgAywCaATkAOQDJAMsAOgDLAMkANQDJADkAbAA6AMoAyQDKADoAygCxAWwAbACxATsAawDKAMkAyQA1AGsANwCxAcoAOwCxATcAygBrADcANwBuADsAOwBuAHAAsgE3AGsAbgA3ALIBswFrADUAawCzAbIBNQCUAbMBswGUAbQAtAC0AbMBsgGzAbQBbQG0AbQAtAFtAW0AbQC1AbQBtAG1AbIBbAG1AW0AsgG1AWwBsgG2AW4AbAG2AbIBcABuALYBtwG2AWwBtgG3AXAAbAG3ALcBcAC3AXABcAG3AbcA"), +"lods": [0.0010533712, PackedByteArray("egB7AAsAewB6AAgAfAAIAHoAegALAH0ACAB8AH4AfgB/AAgAgAB8AHoAfgB8AIAATQB/AH4AfwBNAEgASABNABwATQB+AC0AgAAtAH4AgQAcAE0AHACBAIIAggCDABwAgQBNAIQALQCEAE0AhAAvAIEAggCBAC8AhQCEAC0AgwCCAIYAhgACAIMAhwACAIYATgAvAIQAhACFAE4ATwCCAC8ALwBOAE8AhgCIAIcAiQCGAIIAiQCCAE8AiACGAIkAHQCHAIgAiACKAB0AiwAdAIoAUACIAIkATwAxAIkAiQAxAFAAUQCKAIgAUQCIAFAAigCMAIsAigBRAB8AHwCMAIoAUAA0AFEAHwBRADQAiwCMAFIAUgCNAIsAjAAfAI4AjgBSAIwAAQCNAFIAjgAfAI8ANACPAB8AUgCOAJAAUgCRAAEAkACRAFIAVAABAJEAAQBUAJIABwCSAFQAkwBUAJEAkQCQAJMAVACUAAcAlABUAJMABwCUAJUAkACOADIAjwAyAI4AlgCTAJAAlwCVAJQAGQCVAJcAkwCYAJQAlwCUAJgAkwCWAFUAVQCYAJMAkABTAJYAMgBTAJAAUwAgAJYAlgAgAFUAMgCZAFMAjwCZADIAmQAGAFMAUwAGACAAmgAgAAYAmQCbAAYAIACaAAUAmQCPAJwAmwCZAJwAnAAzAJsAnACPADQAAAAzAJwANAAAAJwAnQAAADQAUACdADQAAACdAJ4AnQBQADEAngCdAJ8AnQAxAJ8AnwADAJ4AoAADAJ8AnwAxAKEAnwChAKAAMQBPAKEAoAChADAATgChAE8ATgAwAKEATAAwAE4ATAAEADAAhQBMAE4ABABMAEsASwCiAAQAowBMAIUAowBLAEwALQCjAIUACgCiAEsAowAtAIAASwCjAKQAgACkAKMApABGAEsASwBGAAoApQCkAIAARgCkAKUACgBGAEkApQBJAEYASQCmAAoACQCmAEkAgAArAKUAegArAIAAKwB6AH0ApwClACsASQClAKcAKwB9AKcASQBHAAkApwBHAEkACQBHAEoARwCnACwALACnAH0ARwAsAEoASgAsAFsASgBbABoAGgBbAKgAWwAuAKgAqAAuAB4AWQBbACwAWwCpAC4AWwBZAKkALgBXAB4ALgCpAFcAWQCqAKkAVwCpAKoAWQAsAKsAfQCrACwArABZAKsAqgBZAKwAfQBaAKsAqwBaAKwAWgB9AAsArQBaAAsAGwBaAK0AWgAbAKwArAAbAFgArABYAKoAWAAbABkAWAAZAK4AqgBYAK4AlwCuABkArgCvAKoAqgCvAFcArgCXABgAGACvAK4AmAAYAJcAGACYAFUArwAYALAAsABXAK8AVQCwABgAVwCwAFYAVgAeAFcAVgCxAB4ABQCxAFYAVgCwALIAVgCyAAUAsABVALIABQCyACAAIACyAFUAagCzAA4AswBqACEAtAAOALMADgC0ALUAIQBtALMAswBtADcAbwBtACEAIQC2AG8AbwC2ACMAbQBvAG4ANwBtAG4AbwAjALcAtwBuAG8AtwAjACUAIwC4ACUAbgC3AHAAtwAlAHIAcAC3AHIAcwAlALgAcgAlAHMAuAAMAHMAcwAMALkAOwBuAHAANwBuADsAuQB1AHMAQgB1ALkAEQBCALkAcwB1AEMAQgBDAHUAugBCABEAdABzAEMAcwB0AHIAQgC7AEMAQgC6AHkAeQC6AEEAuwBCAHgAQgB5AHgAQwC7AHYAdgC7AHgAdABDALwAdgC8AEMAQQC9AHkAvQB4AHkAZAC9AEEAQQAVAGQAvQAmAHgAZAAmAL0AYQBkABUAFQC+AGEAFwBhAL4AZABhAGMAJgBkAGUAYwBlAGQAJgBlAD8AZQBjAL8AvwA/AGUAYwBhAD4AvwBjAD4AFwDAAGEAYQDAAD4AwAAXAF4AwQBeABcAXgDBADwAXgBgAMAAYAA+AMAAXgA8AMIAwgBgAF4AwwDCADwAFADDADwAYADCAD0AwwA9AMIAPgBgAMQAxABgAD0AxABiAD4APgBiAL8APQBfAMQAXADDABQAxQBcABQAXADFABIAPQDDACgAXwA9ACgAXABdAMMAXQAoAMMAXAASAMYAXQBcAMYANgDGABIAEgC1ADYAtAA2ALUANgBpAMYAtABpADYAXQDGADgAaQA4AMYAxwAoAF0AKADHAF8AyABdADgAXQDIAMcAOABpADkAaQC0ADUAOQBpADUANQC0AGsAtACzAGsANwBrALMAyQA1AGsANQDJADkAygBrADcAawDKAMkANwBsAMoAOwBsADcAyQDKADoAbAA6AMoAOQDJAMsAOgDLAMkAOwDMAGwAOgBsAM0AzQBsAMwAzQDOADoAywA6AM4AzwDOAM0AzQAiAM8AzQDMACIAzgDPAA0AJAAiAMwADQBoAM4AzgBoAMsAaAANANAA0QDLAGgA0ADRAGgAywDRADkA0gDRANAA0AAQANIAOQDRANMA0QDSANMAOQDTADgAOADTAMgAKgDIANMAKgDTANIAxwDIACoA1ADSABAA0gDUACoAEADVANQA1ADVAGcAKgBmAMcAZgAqANQAXwDHAGYAZwDWANQA1ADWAGYA1gBnACkA1wBmANYAKQDXANYAZgDXAF8A1wApANgAXwDXANkA2QDEAF8A2ADaANcA1wDaANkA2gDYABYAxADZAGIAYgDZANoA2gDbAGIAFgDbANoA3ADbABYAYgDbANwAFgDdANwA3ADeAGIAYgDeAL8A3wDcAN0A3gDcAN8A3QAnAN8APwC/AN4A3gDfAD8A4ADfACcAJwDhAOAAPwDfAEAA4ABAAN8A4gDgAOEAQADgAOIA4QDjAOIA4gDjABMAQADkAD8APwDkACYAeAAmAOQAdwDkAEAA5AB3AHgA4gB3AEAAeAB3AHYAdwDiAOUAdwDlAHYAEwDlAOIAdgDlAOYAcQDlABMAcQDmAOUAEwDnAHEA5gC8AHYA6ABxAOcA5gBxAOgA5wAPAOgAvADmAEQA6ABEAOYA6QDoAA8ARADoAOkADwDqAOkARADrALwAvADrAHQAcgB0AOsA6wBEAEUA6QBFAEQA6wDsAHIARQDsAOsAcAByAOwA7ADtAHAA7QDsAEUAcADtADsA7QDMADsA7gDtAEUAzADtAO4ARQDpAO4A7gDpAOoAzADuACQA6gAkAO4A"), 0.0026915935, PackedByteArray("KwAIAAsAKwBGAAgAKwALAEcACABGAC0ALQBIAAgAKwBJAEYASQArAEcACgBGAEkASQBHAAkASQAJAAoACQBHAEoASwBGAAoASwAtAEYACgAEAEsABABMAEsALQBLAEwATAAEADAATQBIAC0ATABNAC0ASABNABwATAAwAE4ATQBMAE4ATgAwAE8AAwBPADAATgAvAE0ALwAcAE0ALwBOAE8AHAAvAAIAMQAvAE8AAwAxAE8AMQACAC8AUAAxAAMAAABQAAMAUQACADEAUABRADEAHQACAFEAUAAAADQAUAA0AFEANAAAADMAHwBRADQAUQAfAB0AMwAfADQAHQAfAFIAMgAfADMAHwAyAFIABgAyADMAUgABAB0AAQBSADIAMgAGAFMAMgBTAAEAUwAGACAAAQBTACAAIAAGAAUAIABUAAEAAQBUAAcAVAAgAFUABQBVACAAVQAHAFQAVgBVAAUAVgAFAB4AGAAHAFUAVgAYAFUAGAAZAAcAVwAYAFYAGABXABkAVgAeAFcAWAAZAFcAWAAbABkALgBXAB4AVwAuAFgAGgAuAB4AWQAbAFgAWQBYAC4AWgAbAFkAGwBaAAsAWwAuABoAWwBZAC4ASgBbABoAWQAsAFoACwBaACwAWQBbACwASgAsAFsALABHAAsARwAsAEoAXAAUABIAXAAoABQAFAAoADwAXAASADgAXABdACgAXQBcADgAKAA9ADwAXgA8AD0APABeABcAXwA9ACgAPQBgAF4APQBfAGAAPgAXAF4AXgBgAD4AFwA+AGEAFQAXAGEAYABiAD4AYABfAGIAYwBhAD4APgBiAGMAYQBkABUAZABhAGMAQQAVAGQAFgBiAF8AYgA/AGMAPwBiABYAYwBlAGQAYwA/AGUAJgBkAGUAZAAmAEEAJgBlAD8AXwApABYAJwA/ABYAZgApAF8AKABmAF8AKQBmAGcAZgAoAF0AKgBnAGYAXQAqAGYAEABnACoAKgBdADgAKgA5ABAAOAA5ACoAEAA5AGgAaAANABAAOABpADkAaAAiAA0ANgBpADgANgA4ABIAEgAOADYANQBpADYAOQBpADUANQA2AA4ANQBoADkANQAOAGoAaAA1AGsANQBqAGsAawA6AGgANwBrAGoAOgBrADcAbABoADoAIgBoAGwANwBsADoAbAA7ACIAOwBsADcAJAAiADsAagBtADcAIQBtAGoANwBuADsANwBtAG4AbwBtACEAbQBvAG4AbwAhACMAcABuAG8AOwBuAHAAbwAjAHAAOwBFACQARQA7AHAADwAkAEUAcAAjACUAIwAMACUARQBxAA8AEwAPAHEAcAByAEUAcAAlAHIARABFAHIARABxAEUAcgAlAHMAcwAlAAwAcgB0AEQAcQBEAHQAcwB0AHIAcwAMABEAdABDAHEAdABzAEMAcwB1AEMAEQB1AHMAdgBxAEMAcQB2ABMAQgBDAHUAQgB1ABEAQgB2AEMAEwB2AHcAJwATAHcAdgBCAHgAeAB3AHYAQgARAHkAQgB5AHgAeQARAEEAQQAmAHkAJgB4AHkAQAAnAHcAQAB3AHgAeAAmAEAAPwAnAEAAPwBAACYA"), 0.0057668975, PackedByteArray("KwAIAAsAKwAKAAgAKwALAAkAKwAJAAoALAAJAAsACAAKAC0ACQAsABoAGwAsAAsAGwAaACwALQAKAAQALQAcAAgABAAcAC0AGgAbAC4AGwAZAC4AGgAuAB4AGAAuABkALgAYAB4AGAAZAAcAHAAEAC8AHgAYACAAGAAHACAAHAAvAAIABAAwAC8AHgAgAAUAIAAHAAEAIAAGAAUALwAwADEAMQACAC8AAwAxADAAHQACADEAMgAGACAAAQAyACAABgAyADMAAQAfADIAMgAfADMAHwABAB0ANAAxAAMAMwAfADQANAAdADEAHwAdADQANAAAADMAAAA0AAMANQAOACEANQA2AA4AEgAOADYANwA1ACEAIwA3ACEANgA4ABIAFAASADgANQA5ADYANgA5ADgANQANADkAEAA5AA0ANQA6AA0AOgA1ADcAIgANADoAOwA6ADcAOgA7ACIANwAjADsAJAAiADsAKgA5ABAAOAA5ACoAEAApACoAKgAoADgAKAAqACkAKAAUADgAFAAoADwAKQA9ACgAKAA9ADwAPQApABYAPAA9AD4APQAWAD4APgAXADwAPgAWAD8APwAXAD4AJwA/ABYAFQAXAD8APwAnAEAAJgAVAD8APwBAACYAFQAmAEEAJwATAEAAJgBAABMAQgBBACYAEwBCACYAQgARAEEAEQBCAAwAQgATAEMADABCAEMAEwBEAEMAEwAPAEQADABDACUAJQBDAEQAIwAMACUAJQA7ACMARABFACUARQA7ACUARQBEAA8AOwBFACQADwAkAEUA"), 0.011579727, PackedByteArray("GAAZAAcAGAAaABkAGwAZABoACQAbABoAGwAJAAsACwAJAAoACwAKAAgACAAKAAQABAAcAAgAHAAEAAMAAwACABwAHQACAAMAAAAdAAMAGgAYAB4AHwAdAAAAHwABAB0ABgAfAAAAAQAfACAAHwAGACAAHgAYACAAIAAHAAEAGAAHACAAHgAgAAUAIAAGAAUADQAOACEAIgANACEAIwAiACEADQAQAA4AIgAjACQAJQAkACMAIwAMACUADwAkACUADAAPACUADAARAA8AEQATAA8AEwARACYAEQAVACYAJwATACYAJgAVACcAFQAXACcAJwAXABYAFgAXABQAFAAoABYAKAApABYAKAAUACoAKAAqACkAFAASACoAEAApACoADgAqABIADgAQACoA"), 0.04055915, PackedByteArray("AAABAAIAAAACAAMAAgAEAAMAAQAAAAUAAAAGAAUABQAHAAEABAACAAgACQAHAAUACAAKAAQACwAHAAkACwAKAAgACwAJAAoADAANAA4ADQAMAA8ADQAQAA4ADAARAA8ADgAQABIAEQATAA8AFAASABAAEwARABUAFAAQABYAFgATABUAFgAXABQAFQAXABYA")], +"material": SubResource("StandardMaterial3D_74ve1"), +"primitive": 3, +"uv_scale": Vector4(0, 0, 0, 0), +"vertex_count": 440, +"vertex_data": PackedByteArray("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") +}] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yncsu"] +transparency = 1 +cull_mode = 1 +shading_mode = 0 +vertex_color_use_as_albedo = true +albedo_color = Color(0.982745, 0.93919396, 0.92271423, 1) +albedo_texture_msdf = true + +[sub_resource type="SphereMesh" id="SphereMesh_sosg6"] +material = SubResource("StandardMaterial3D_yncsu") +radial_segments = 12 +rings = 24 + +[sub_resource type="Curve" id="Curve_ib30j"] +_limits = [0.0, 1.0, 0.0, 0.01] +_data = [Vector2(0, 0.06741583), 0.0, 0.0, 0, 0, Vector2(0.01, 0.123595595), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_pm3uw"] +cull_mode = 2 +shading_mode = 0 +disable_fog = true + +[sub_resource type="RibbonTrailMesh" id="RibbonTrailMesh_7xsfg"] +material = SubResource("StandardMaterial3D_pm3uw") +curve = SubResource("Curve_ib30j") + +[node name="Galaxy" type="Node3D" unique_id=2134769153] +script = ExtResource("1_6wq32") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=2040393744] +environment = SubResource("Environment_7u5gs") + +[node name="Road" type="MeshInstance3D" parent="." unique_id=2069321719] +transform = Transform3D(-0.14999996, 0, -4.9880896e-07, 0, 0.882, 0, 2.2649365e-08, 0, -3.3034623, 0, -6.8719172, -107.57056) +mesh = SubResource("PlaneMesh_gx5yi") + +[node name="Planet" type="Node3D" parent="." unique_id=440126690] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -7.365048, 0, -67.635414) +visible = false + +[node name="Ball" type="MeshInstance3D" parent="Planet" unique_id=282086177] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, -19.563023, 5.3266654, 29.601173) +transparency = 0.25 +mesh = SubResource("SphereMesh_gx5yi") +skeleton = NodePath("../..") + +[node name="Ring" type="MeshInstance3D" parent="Planet" unique_id=1205231261] +transform = Transform3D(332.52264, 104.53887, -31.627857, -109.21857, 318.275, -96.29295, -2.6077032e-06, 101.3541, 335.0035, -19.437641, 5.6447964, 29.318497) +mesh = SubResource("ArrayMesh_yncsu") +skeleton = NodePath("") + +[node name="Moon" type="MeshInstance3D" parent="Planet" unique_id=768710885] +transform = Transform3D(10, 0, 0, 0, 10, 0, 0, 0, 10, 34.466908, 9.756897, 31.026627) +transparency = 0.05 +mesh = SubResource("SphereMesh_sosg6") +skeleton = NodePath("../../..") + +[node name="ShootingStars" type="Node3D" parent="." unique_id=1955205152] +transform = Transform3D(0.09085334, 0.49641284, -0.90978134, 0.013120199, -0.81762254, -0.5562391, -0.98818284, 0.034784373, -0.09103015, 32.80242, 15.823523, -68.11805) + +[node name="CloseStarsFast" type="CPUParticles3D" parent="ShootingStars" unique_id=1059596997] +transform = Transform3D(0.05459423, -0.9976134, -0.042265173, 0.70739347, 0.008768316, 0.706763, -0.704708, -0.06848424, 0.70618165, -49.181274, -55.56679, 53.555737) +cast_shadow = 0 +amount = 5 +lifetime = 1.54 +speed_scale = 0.37 +explosiveness = 0.36 +randomness = 0.17 +draw_order = 2 +mesh = SubResource("RibbonTrailMesh_7xsfg") +emission_shape = 5 +emission_points = PackedVector3Array() +emission_normals = PackedVector3Array() +particle_flag_align_y = true +spread = 7.57 +gravity = Vector3(13.3, -9.8, 0) +initial_velocity_max = 49.5 +angle_max = 57.0 + +[node name="FarStarsFast" type="CPUParticles3D" parent="ShootingStars" unique_id=1368725010] +transform = Transform3D(0.9970328, 0.07042578, 0.03107389, -0.06703293, 0.5959067, 0.8002506, 0.037841253, -0.7999594, 0.598858, -11.321758, -96.451096, 64.33069) +cast_shadow = 0 +amount = 5 +lifetime = 1.92 +speed_scale = 0.37 +explosiveness = 0.3 +randomness = 0.69 +mesh = SubResource("RibbonTrailMesh_7xsfg") +emission_shape = 5 +emission_points = PackedVector3Array() +emission_normals = PackedVector3Array() +particle_flag_align_y = true +direction = Vector3(0, 0.495, 0.23) +spread = 10.69 +gravity = Vector3(20.385, -9.8, 0) +initial_velocity_min = 59.41 +initial_velocity_max = 59.41 +linear_accel_max = 1.98 +radial_accel_max = 67.32 +angle_max = 720.0 + +[node name="CloseStarsSlow" type="CPUParticles3D" parent="ShootingStars" unique_id=1666330960] +transform = Transform3D(0.98275614, -0.006262228, 0.18480076, -0.11857166, -0.78823566, 0.6038393, 0.14188564, -0.61534137, -0.775379, -62.28839, -52.841705, 51.153683) +cast_shadow = 0 +amount = 1 +lifetime = 2.97 +speed_scale = 0.37 +explosiveness = 0.62 +randomness = 0.35 +mesh = SubResource("RibbonTrailMesh_7xsfg") +emission_shape = 5 +emission_points = PackedVector3Array() +emission_normals = PackedVector3Array() +particle_flag_align_y = true +direction = Vector3(0, 0, 0) +spread = 180.0 +gravity = Vector3(13.3, -9.8, 0) diff --git a/scenes/game.tscn b/scenes/game.tscn index 198a000..084454b 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -23,7 +23,7 @@ [ext_resource type="Texture2D" uid="uid://lfj8i1bi6kfs" path="res://textures/ui/pause.png" id="23_7silw"] [ext_resource type="FontFile" uid="uid://dotb3skhwouha" path="res://fonts/Roboto-Bold.ttf" id="23_wf21h"] [ext_resource type="FontFile" uid="uid://rs2mb33nd3b1" path="res://fonts/Roboto-Italic.ttf" id="24_j6p10"] -[ext_resource type="Script" path="res://scripts/scenes/PauseHud.cs" id="25_pausehud"] +[ext_resource type="Script" uid="uid://qjqjxykl30bm" path="res://scripts/scenes/PauseHud.cs" id="25_pausehud"] [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_sijr0"] bg_color = Color(0.1072, 0.0896, 0.16, 0.25098) @@ -62,6 +62,27 @@ Button/styles/hover = SubResource("StyleBoxFlat_6kbgk") Button/styles/normal = SubResource("StyleBoxEmpty_jlnvv") Button/styles/pressed = SubResource("StyleBoxFlat_y08lf") +[sub_resource type="ViewportTexture" id="ViewportTexture_pausehud"] +viewport_path = NodePath("PauseHud/PauseVP") + +[sub_resource type="LabelSettings" id="LabelSettings_pause_base"] +font = ExtResource("23_wf21h") +font_size = 84 +font_color = Color(0.5, 0.5, 0.5, 1) + +[sub_resource type="LabelSettings" id="LabelSettings_pause_fill"] +font = ExtResource("23_wf21h") +font_size = 84 + +[sub_resource type="LabelSettings" id="LabelSettings_pause_hint"] +font = ExtResource("12_axsek") +font_size = 24 + +[sub_resource type="LabelSettings" id="LabelSettings_r7xjp"] +font = ExtResource("12_axsek") +font_size = 18 +font_color = Color(1, 1, 1, 0.8) + [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_73q55"] transparency = 1 cull_mode = 2 @@ -198,12 +219,17 @@ bg_color = Color(0, 0, 0, 0) font = ExtResource("12_axsek") font_size = 50 +[sub_resource type="LabelSettings" id="LabelSettings_pause_counter_title"] +font = ExtResource("12_axsek") +font_size = 20 + +[sub_resource type="LabelSettings" id="LabelSettings_pause_counter_value"] +font = ExtResource("12_axsek") +font_size = 42 + [sub_resource type="ViewportTexture" id="ViewportTexture_suyxu"] viewport_path = NodePath("PanelRight/PanelRightViewport") -[sub_resource type="ViewportTexture" id="ViewportTexture_pausehud"] -viewport_path = NodePath("PauseHud/PauseVP") - [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ro5ir"] resource_local_to_scene = true transparency = 1 @@ -231,36 +257,6 @@ font_color = Color(1, 1, 1, 0.768627) font = ExtResource("12_axsek") font_size = 50 -[sub_resource type="LabelSettings" id="LabelSettings_r7xjp"] -font = ExtResource("12_axsek") -font_size = 18 -font_color = Color(1, 1, 1, 0.8) - -[sub_resource type="LabelSettings" id="LabelSettings_pause_base"] -font = ExtResource("23_wf21h") -font_size = 84 -font_color = Color(0.50, 0.50, 0.50, 1) - -[sub_resource type="LabelSettings" id="LabelSettings_pause_fill"] -font = ExtResource("23_wf21h") -font_size = 84 -font_color = Color(1, 1, 1, 1) - -[sub_resource type="LabelSettings" id="LabelSettings_pause_hint"] -font = ExtResource("12_axsek") -font_size = 24 -font_color = Color(1, 1, 1, 1) - -[sub_resource type="LabelSettings" id="LabelSettings_pause_counter_title"] -font = ExtResource("12_axsek") -font_size = 20 -font_color = Color(1, 1, 1, 1) - -[sub_resource type="LabelSettings" id="LabelSettings_pause_counter_value"] -font = ExtResource("12_axsek") -font_size = 42 -font_color = Color(1, 1, 1, 1) - [sub_resource type="ShaderMaterial" id="ShaderMaterial_gc8yu"] shader = ExtResource("14_3xchs") @@ -482,27 +478,28 @@ theme = SubResource("Theme_e1j6l") theme_override_font_sizes/font_size = 28 text = "GIVE UP" -[node name="PauseHud" type="Sprite3D" parent="."] +[node name="PauseHud" type="Sprite3D" parent="." unique_id=1594331476] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, -6) -visible = false pixel_size = 0.012 no_depth_test = true render_priority = 104 texture = SubResource("ViewportTexture_pausehud") -[node name="PauseVP" type="SubViewport" parent="PauseHud"] +[node name="PauseVP" type="SubViewport" parent="PauseHud" unique_id=1841571202] disable_3d = true transparent_bg = true canvas_item_default_texture_filter = 2 size = Vector2i(600, 600) render_target_update_mode = 4 -[node name="Control" type="Control" parent="PauseHud/PauseVP"] +[node name="Control" type="Control" parent="PauseHud/PauseVP" unique_id=1700063552] +layout_mode = 3 +anchors_preset = 0 offset_right = 600.0 offset_bottom = 600.0 script = ExtResource("25_pausehud") -[node name="Paused" type="Label" parent="PauseHud/PauseVP/Control"] +[node name="Paused" type="Label" parent="PauseHud/PauseVP/Control" unique_id=1511102743] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -520,13 +517,19 @@ label_settings = SubResource("LabelSettings_pause_base") horizontal_alignment = 1 vertical_alignment = 1 -[node name="ProgressMask" type="Control" parent="PauseHud/PauseVP/Control"] -layout_mode = 1 -offset_right = 0.0 -offset_bottom = 600.0 +[node name="ProgressMask" type="Control" parent="PauseHud/PauseVP/Control" unique_id=1572831027] clip_contents = true +layout_mode = 1 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_top = -300.0 +offset_bottom = 300.0 +grow_horizontal = 2 +grow_vertical = 2 -[node name="FillPaused" type="Label" parent="PauseHud/PauseVP/Control/ProgressMask"] +[node name="FillPaused" type="Label" parent="PauseHud/PauseVP/Control/ProgressMask" unique_id=2138730588] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -544,7 +547,7 @@ label_settings = SubResource("LabelSettings_pause_fill") horizontal_alignment = 1 vertical_alignment = 1 -[node name="HoldR" type="Label" parent="PauseHud/PauseVP/Control"] +[node name="HoldR" type="Label" parent="PauseHud/PauseVP/Control" unique_id=1786763793] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -561,7 +564,7 @@ text = "HOLD R TO EXIT" label_settings = SubResource("LabelSettings_pause_hint") horizontal_alignment = 1 -[node name="QuitOverlay" type="Panel" parent="."] +[node name="QuitOverlay" type="Panel" parent="." unique_id=316579954] visible = false modulate = Color(1, 1, 1, 0) z_index = 2 @@ -573,7 +576,7 @@ grow_vertical = 2 mouse_filter = 2 theme_override_styles/panel = SubResource("StyleBoxEmpty_d5aou") -[node name="Holder" type="VBoxContainer" parent="QuitOverlay"] +[node name="Holder" type="VBoxContainer" parent="QuitOverlay" unique_id=289008022] layout_mode = 1 anchors_preset = 8 anchor_left = 0.5 @@ -588,20 +591,19 @@ grow_horizontal = 2 grow_vertical = 2 alignment = 1 -[node name="Label" type="Label" parent="QuitOverlay/Holder"] +[node name="Label" type="Label" parent="QuitOverlay/Holder" unique_id=1425722822] layout_mode = 2 text = "Hold R to Quit" label_settings = SubResource("LabelSettings_r7xjp") horizontal_alignment = 1 -[node name="ProgressBackground" type="ColorRect" parent="QuitOverlay/Holder"] +[node name="ProgressBackground" type="ColorRect" parent="QuitOverlay/Holder" unique_id=372914467] custom_minimum_size = Vector2(300, 8) layout_mode = 2 color = Color(0.28, 0.28, 0.28, 0.75) -[node name="ProgressBar" type="ColorRect" parent="QuitOverlay/Holder/ProgressBackground"] +[node name="ProgressBar" type="ColorRect" parent="QuitOverlay/Holder/ProgressBackground" unique_id=541280931] layout_mode = 0 -offset_right = 0.0 offset_bottom = 8.0 color = Color(0.54, 0.54, 0.54, 0.82) @@ -783,7 +785,7 @@ text = "1x" label_settings = SubResource("LabelSettings_usmyc") horizontal_alignment = 1 -[node name="PauseTitle" type="Label" parent="PanelLeft/PanelLeftViewport" groups=["pause_text"]] +[node name="PauseTitle" type="Label" parent="PanelLeft/PanelLeftViewport" unique_id=531787894 groups=["pause_text"]] anchors_preset = -1 anchor_left = 0.5 anchor_top = 0.86 @@ -799,7 +801,7 @@ text = "PAUSES" label_settings = SubResource("LabelSettings_pause_counter_title") horizontal_alignment = 1 -[node name="PauseCount" type="Label" parent="PanelLeft/PanelLeftViewport" groups=["pause_text"]] +[node name="PauseCount" type="Label" parent="PanelLeft/PanelLeftViewport" unique_id=1695472366 groups=["pause_text"]] anchors_preset = -1 anchor_left = 0.5 anchor_top = 0.93 diff --git a/scripts/SoundManager.cs b/scripts/SoundManager.cs index e03ac72..bd0cd63 100644 --- a/scripts/SoundManager.cs +++ b/scripts/SoundManager.cs @@ -370,19 +370,19 @@ private static bool isScopedPlayback() public static float ComputeVolumeDb(float volume, float master, float range) { - if (volume <= 0 || master <= 0) return double.NegativeInfinity; - return -80 + range * Math.Pow(volume / 100, 0.1) * Math.Pow(master / 100, 0.1); + if (volume <= 0 || master <= 0) return float.NegativeInfinity; + return (float)(-80 + range * Math.Pow(volume / 100, 0.1) * Math.Pow(master / 100, 0.1)); } public static void UpdateVolume() { var settings = SettingsManager.Instance.Settings; - Song.VolumeDb = ComputeVolumeDb(settings.VolumeMusic.Value, settings.VolumeMaster.Value, 70); - MenuMusic.VolumeDb = ComputeVolumeDb(settings.VolumeMenuMusic.Value, settings.VolumeMaster.Value, 70); - HitSound.VolumeDb = ComputeVolumeDb(settings.VolumeHitSound.Value, settings.VolumeMaster.Value, 80); - MissSound.VolumeDb = ComputeVolumeDb(settings.VolumeMissSound.Value, settings.VolumeMaster.Value, 80); - FailSound.VolumeDb = ComputeVolumeDb(settings.VolumeSFX.Value, settings.VolumeMaster.Value, 80); + Song.VolumeDb = ComputeVolumeDb((float)settings.VolumeMusic.Value, (float)settings.VolumeMaster.Value, 70); + MenuMusic.VolumeDb = ComputeVolumeDb((float)settings.VolumeMenuMusic.Value, (float)settings.VolumeMaster.Value, 70); + HitSound.VolumeDb = ComputeVolumeDb((float)settings.VolumeHitSound.Value, (float)settings.VolumeMaster.Value, 80); + MissSound.VolumeDb = ComputeVolumeDb((float)settings.VolumeMissSound.Value, (float)settings.VolumeMaster.Value, 80); + FailSound.VolumeDb = ComputeVolumeDb((float)settings.VolumeSFX.Value, (float)settings.VolumeMaster.Value, 80); } public static void PlayHitSound() diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index 7bde704..a1bd69e 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -263,19 +263,19 @@ public partial class SettingsProfile /// Audio control for hit sound /// [Order] - public SettingsItem VolumeHitSound { get; private set; } + public SettingsItem VolumeHitSound { get; private set; } /// /// Audio control for miss sound /// [Order] - public SettingsItem VolumeMissSound { get; private set; } + public SettingsItem VolumeMissSound { get; private set; } /// /// Audio control for menu music /// [Order] - public SettingsItem VolumeMenuMusic { get; private set; } + public SettingsItem VolumeMenuMusic { get; private set; } /// /// Toggles hit sound to always play @@ -311,7 +311,7 @@ public partial class SettingsProfile /// Adjusts the local audio offset in milliseconds /// [Order] - public SettingsItem LocalOffset { get; private set; } + public SettingsItem LocalOffset { get; private set; } #endregion @@ -537,7 +537,7 @@ public SettingsProfile() UpdateAction = (_, init) => { if (!init) { SkinManager.Load(); } }, List = new("skin") { - Values = ["skin", "void", "grid", "squircles", "waves"] + Values = ["skin", "void", "grid", "squircles", "waves", "galaxy"] } }; @@ -550,7 +550,7 @@ public SettingsProfile() UpdateAction = (_, init) => { if (!init) { SkinManager.Load(); } }, List = new("skin") { - Values = ["skin", "void", "grid", "squircles", "waves"] + Values = ["skin", "void", "grid", "squircles", "waves", "galaxy"] } }; @@ -775,7 +775,8 @@ public SettingsProfile() UpdateAction = (value, _) => DisplayServer.WindowSetMode( value ? DisplayServer.WindowMode.ExclusiveFullscreen - : DisplayServer.WindowMode.Windowed) + : DisplayServer.WindowMode.Windowed + ) }; LockFPS = new(true) diff --git a/scripts/map/Leaderboard.cs b/scripts/map/Leaderboard.cs index d1b6c60..546d272 100644 --- a/scripts/map/Leaderboard.cs +++ b/scripts/map/Leaderboard.cs @@ -156,11 +156,11 @@ public Score(byte[] buffer) FileParser FileBuffer = new(buffer); int attemptIdLength = (int)FileBuffer.GetUInt32(); - Logger.Log($"[Leaderboard] attemptId length={attemptIdLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); + // Logger.Log($"[Leaderboard] attemptId length={attemptIdLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); AttemptID = FileBuffer.GetString(attemptIdLength); int playerLength = (int)FileBuffer.GetUInt32(); - Logger.Log($"[Leaderboard] player length={playerLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); + // Logger.Log($"[Leaderboard] player length={playerLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); Player = FileBuffer.GetString(playerLength); Qualifies = FileBuffer.GetBool(); @@ -173,7 +173,7 @@ public Score(byte[] buffer) Modifiers = []; int modifiersLength = (int)FileBuffer.GetUInt32(); - Logger.Log($"[Leaderboard] modifiers length={modifiersLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); + // Logger.Log($"[Leaderboard] modifiers length={modifiersLength}, remaining={FileBuffer.Length - FileBuffer.Pointer}"); foreach (KeyValuePair entry in (Godot.Collections.Dictionary)Json.ParseString(FileBuffer.GetString(modifiersLength))) { diff --git a/scripts/scenes/LegacyRunner.cs b/scripts/scenes/LegacyRunner.cs index 1e277fc..6b2f682 100644 --- a/scripts/scenes/LegacyRunner.cs +++ b/scripts/scenes/LegacyRunner.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.IO; using System.Security.Cryptography; @@ -611,11 +611,11 @@ public override void _Ready() replayViewerPause.TextureNormal = GD.Load(Playing ? "res://textures/pause.png" : "res://textures/play.png"); }; - replayViewerSeek.ValueChanged += (double value) => + replayViewerSeek.ValueChanged += value => { replayViewerLabel.Text = $"{Util.String.FormatTime(value * CurrentAttempt.LongestReplayLength / 1000)} / {Util.String.FormatTime(CurrentAttempt.LongestReplayLength / 1000)}"; }; - replayViewerSeek.DragEnded += (bool _) => + replayViewerSeek.DragEnded += _ => { CurrentAttempt.Hits = 0; CurrentAttempt.Misses = 0; @@ -759,7 +759,6 @@ public override void _Ready() cursor.Transparency = cursorTransparency; cursorMaterial?.AlbedoTexture = SkinManager.Instance.Skin.CursorImage; - cursor.Transparency = cursorTransparency; (cursorTrailMultimesh.MaterialOverride as StandardMaterial3D).AlbedoTexture = SkinManager.Instance.Skin.CursorImage; (grid.GetActiveMaterial(0) as StandardMaterial3D).AlbedoTexture = SkinManager.Instance.Skin.GridImage; panelLeft.GetNode("Background").Texture = SkinManager.Instance.Skin.PanelLeftBackgroundImage; @@ -789,6 +788,7 @@ public override void _Ready() { SoundManager.Song.Stream = Util.Audio.LoadStream(CurrentAttempt.Map.AudioBuffer); SoundManager.Song.PitchScale = (float)CurrentAttempt.Speed; + SoundManager.Song.VolumeDb = getTargetMusicVolumeDb(); SoundManager.Song.Stop(); } @@ -872,16 +872,8 @@ public override void _Process(double delta) lastFrame = now; pauseCooldown = Math.Max(0, pauseCooldown - (float)delta); updatePauseHudVisualState(); - //frameCount++; skipLabelAlpha = Mathf.Lerp(skipLabelAlpha, targetSkipLabelAlpha, Math.Min(1, (float)delta * 20)); - //if (lastSecond + 1000000 <= now) - //{ - // fpsCounter.Text = $"{frameCount} FPS"; - // frameCount = 0; - // lastSecond += 1000000; - //} - if (rKeyHeld && !CurrentAttempt.IsReplay) { quitHoldTime += (float)delta; @@ -935,21 +927,23 @@ public override void _Process(double delta) { updatePauseStateEachFrame(delta); } - - if (!Playing || MenuShown) + else { - return; - } + double audioDelay = CurrentAttempt.Progress - 1000 * (SoundManager.Song.GetPlaybackPosition() + AudioServer.GetTimeSinceLastMix()); - double audioDelay = CurrentAttempt.Progress - 1000 * (SoundManager.Song.GetPlaybackPosition() + AudioServer.GetTimeSinceLastMix()); - - if (Math.Abs(audioDelay) > 25 && CurrentAttempt.Progress > 0) - { - SoundManager.Song.PitchScale = Math.Max(Mathf.Epsilon, (float)CurrentAttempt.Speed + (float)audioDelay / 1000); + if (Math.Abs(audioDelay) > 25 && CurrentAttempt.Progress > 0) + { + SoundManager.Song.PitchScale = Math.Max(Mathf.Epsilon, (float)CurrentAttempt.Speed + (float)audioDelay / 1000); + } + else if (Math.Abs(SoundManager.Song.PitchScale - CurrentAttempt.Speed) > Mathf.Epsilon) + { + SoundManager.Song.PitchScale = (float)CurrentAttempt.Speed; + } } - else if (SoundManager.Song.PitchScale - CurrentAttempt.Speed > Mathf.Epsilon) + + if (!Playing || MenuShown) { - SoundManager.Song.PitchScale = (float)CurrentAttempt.Speed; + return; } if (CurrentAttempt.IsReplay) @@ -1047,8 +1041,7 @@ public override void _Process(double delta) CurrentAttempt.Skippable = false; startGameplayMediaAtExpected(isPauseRampActive() ? SoundManager.Song.VolumeDb : getTargetMusicVolumeDb()); - correctAudioDesync(); - + int nextNoteMillisecond = CurrentAttempt.PassedNotes >= CurrentAttempt.Map.Notes.Length ? (int)MapLength + 5000 : CurrentAttempt.Map.Notes[CurrentAttempt.PassedNotes].Millisecond; int lastNoteMillisecond = CurrentAttempt.PassedNotes > 0 ? CurrentAttempt.Map.Notes[CurrentAttempt.PassedNotes - 1].Millisecond : 0; @@ -1223,7 +1216,7 @@ public override void _Input(InputEvent @event) { if (CurrentAttempt.Stopped) return; - if (@event is InputEventMouseMotion eventMouseMotion && (Playing || isPaused() || isPauseRampActive()) && !CurrentAttempt.IsReplay) + if (@event is InputEventMouseMotion eventMouseMotion && !MenuShown && (Playing || isPaused() || isPauseRampActive()) && !CurrentAttempt.IsReplay) { if (!settings.AbsoluteInput) { @@ -1296,18 +1289,10 @@ public override void _Input(InputEvent @event) case Key.Escape: CurrentAttempt.Qualifies = false; - if (pauseShown) - { - HidePause(); - } - else if (SettingsMenu.Instance.Shown) + if (SettingsMenu.Instance.Shown) { SettingsMenu.Instance.HideMenu(); } - else if (isPaused() || isPauseRampActive()) - { - break; - } else { ShowMenu(!MenuShown); @@ -1505,8 +1490,6 @@ public static void Stop(bool results = true) } } - DisplayServer.WindowSetVsyncMode(DisplayServer.VSyncMode.Adaptive); - if (results) { SceneManager.Load("res://scenes/results.tscn"); @@ -1519,7 +1502,7 @@ public static void Stop(bool results = true) private static float getTargetMusicVolumeDb() { - return SoundManager.ComputeVolumeDb(settings.VolumeMusic.Value, settings.VolumeMaster.Value, 70); + return SoundManager.ComputeVolumeDb((float)settings.VolumeMusic.Value, (float)settings.VolumeMaster.Value, 70); } private static double getExpectedAudioTimeMs(bool includeLocalOffset = true) @@ -1549,7 +1532,6 @@ private static void startGameplayMediaAtExpected(float targetVolumeDb, bool incl if (CurrentAttempt.Map.AudioBuffer != null && audioTime >= 0 && CurrentAttempt.Progress < MapLength) { - SoundManager.Song.PitchScale = (float)CurrentAttempt.Speed; SoundManager.Song.VolumeDb = targetVolumeDb; if (!musicStarted || !SoundManager.Song.Playing) @@ -1568,7 +1550,7 @@ private static void startGameplayMediaAtExpected(float targetVolumeDb, bool incl video.StreamPosition = (float)videoTime / 1000; Tween videoInTween = videoQuad.CreateTween(); - videoInTween.TweenProperty(videoQuad, "transparency", (float)settings.VideoDim / 100, 0.5); + videoInTween.TweenProperty(videoQuad, "transparency", settings.VideoDim / 100, 0.5); videoInTween.Play(); } } @@ -1608,7 +1590,6 @@ private static void beginUnpause() pauseHudControl.SetProgress(0); updatePauseHudVisualState(); startGameplayMediaAtExpected(pauseRampStartDb, false); - correctAudioDesync(true); Playing = true; } @@ -1636,8 +1617,7 @@ private static void completeUnpause() pauseHoldTime = 0; pauseCooldown = pauseCooldownDuration; pauseHudControl.SetProgress(1); - SoundManager.Song.VolumeDb = 0f; - correctAudioDesync(true); + SoundManager.Song.VolumeDb = getTargetMusicVolumeDb(); Playing = true; updatePauseHudVisualState(); } @@ -1658,9 +1638,10 @@ private static void updatePauseStateEachFrame(double delta) pauseHoldTime += (float)delta; pauseState = Math.Max(0, pauseState - (float)(delta / pauseHoldDuration)); pauseHudControl.SetProgress(Math.Clamp(1f - pauseState, 0f, 1f)); + if (CurrentAttempt.Map.AudioBuffer != null && musicStarted && SoundManager.Song.Playing) { - SoundManager.Song.VolumeDb = Math.Min(SoundManager.Song.VolumeDb + (float)delta * pauseRampRateDbPerSecond, 0f); + SoundManager.Song.VolumeDb = Mathf.Lerp(getTargetMusicVolumeDb() - 60, getTargetMusicVolumeDb(), 1 - pauseState); } if (pauseState == 0) @@ -1669,32 +1650,6 @@ private static void updatePauseStateEachFrame(double delta) } } - private static void correctAudioDesync(bool force = false) - { - double expectedMs = Math.Max(0, getExpectedAudioTimeMs()); - double thresholdMs = pauseDesyncThresholdMs * Math.Max(CurrentAttempt.Speed, 1.0); - - if (CurrentAttempt.Map.AudioBuffer != null && musicStarted && SoundManager.Song.Playing) - { - double actualMs = SoundManager.Song.GetPlaybackPosition() * 1000; - - if (force || Math.Abs(actualMs - expectedMs) > thresholdMs) - { - SoundManager.Song.Seek((float)expectedMs / 1000); - } - } - - if (CurrentAttempt.Map.VideoBuffer != null && video.IsPlaying()) - { - double actualVideoMs = video.StreamPosition * 1000; - - if (force || Math.Abs(actualVideoMs - expectedMs) > thresholdMs) - { - video.StreamPosition = (float)expectedMs / 1000; - } - } - } - private static void resetPauseUi() { spaceHeld = false; @@ -1776,22 +1731,20 @@ private static void hideQuitOverlay() public static void ShowMenu(bool show = true) { - if (isPaused() || isPauseRampActive()) + if (isPauseRampActive()) { return; } MenuShown = show; - Playing = !MenuShown && !isPaused(); if (MenuShown) { stopGameplayMedia(); } - else + else if (!isPaused()) { startGameplayMediaAtExpected(getTargetMusicVolumeDb()); - correctAudioDesync(true); } MenuCursor.Instance.UpdateVisible(MenuShown && SettingsManager.Instance.Settings.UseCursorInMenus.Value); diff --git a/scripts/scenes/PauseHud.cs b/scripts/scenes/PauseHud.cs index 96fdea1..66f498a 100644 --- a/scripts/scenes/PauseHud.cs +++ b/scripts/scenes/PauseHud.cs @@ -18,8 +18,8 @@ public void SetProgress(float percent) } float clamped = Mathf.Clamp(percent, 0f, 1f); - float width = 600f * clamped; - progressMask.Position = new Vector2(300f - (width / 2f), 0f); - progressMask.Size = new Vector2(width, 600f); + float width = 320f * clamped; + progressMask.OffsetRight = width / 2; + progressMask.OffsetLeft = -width / 2; } } \ No newline at end of file diff --git a/scripts/scenes/Results.cs b/scripts/scenes/Results.cs index 8e2af17..6ebdd50 100644 --- a/scripts/scenes/Results.cs +++ b/scripts/scenes/Results.cs @@ -161,7 +161,7 @@ public override void Load() public void UpdateVolume() { - SoundManager.Song.VolumeDb = (float)SoundManager.ComputeVolumeDb(settings.VolumeMusic.Value, settings.VolumeMaster.Value, 70); + SoundManager.Song.VolumeDb = (float)SoundManager.ComputeVolumeDb((float)settings.VolumeMusic.Value, (float)settings.VolumeMaster.Value, 70); } public void Replay() diff --git a/scripts/spaces/Galaxy.cs b/scripts/spaces/Galaxy.cs new file mode 100644 index 0000000..900a09e --- /dev/null +++ b/scripts/spaces/Galaxy.cs @@ -0,0 +1,42 @@ +using Godot; + +namespace Spaces; + +public partial class Galaxy : BaseSpace +{ + private SettingsProfile settings; + private Environment environment; + // private Node3D planet; + // private Vector3 planetStartPos; + private StandardMaterial3D tileMaterial; + private Color fogReset = new(0, 0, 0); + + public override void _Ready() + { + base._Ready(); + + settings = SettingsManager.Instance.Settings; + environment = WorldEnvironment.Environment; + tileMaterial = (GetNode("Road").Mesh as PlaneMesh).Material as StandardMaterial3D; + + // planet = GetNode("Planet"); + // planetStartPos = planet.Position; + } + + public override void _Process(double delta) + { + base._Process(delta); + + // sky rotation + environment.SkyRotation += (Vector3.Down + Vector3.Right) * (float)delta / 100; + + // tile movement + tileMaterial.Uv1Offset += Vector3.Up * (float)delta / 2; + + // planet floating + //planet.Position = planetStartPos + Vector3.Up * (float)Math.Sin(Time.GetTicksMsec() / 1000f ); + + // fog + environment.FogLightColor = settings.SpaceHitEffects ? NoteHitColor : fogReset; + } +} diff --git a/scripts/spaces/Galaxy.cs.uid b/scripts/spaces/Galaxy.cs.uid new file mode 100644 index 0000000..e28104b --- /dev/null +++ b/scripts/spaces/Galaxy.cs.uid @@ -0,0 +1 @@ +uid://dhxblx0bm60g6 diff --git a/scripts/ui/menu/play/MapInfoContainer.cs b/scripts/ui/menu/play/MapInfoContainer.cs index 7aaa034..6e113f0 100644 --- a/scripts/ui/menu/play/MapInfoContainer.cs +++ b/scripts/ui/menu/play/MapInfoContainer.cs @@ -234,7 +234,12 @@ void applyStartFrom(string input = null, bool seek = true) Lobby.SetStartFrom(value); - if (seek && SoundManager.Map?.Name == Map.Name && SoundManager.Song.Playing) + if (SoundManager.Map?.Name != Map.Name) + { + SoundManager.StartMapSelectionPlayback(Map); + } + + if (seek && SoundManager.Song.Playing) { SoundManager.Song.Seek((float)Lobby.StartFrom / 1000); } diff --git a/textures/galaxy_rainbow.png b/textures/galaxy_rainbow.png new file mode 100644 index 0000000..92ff5ed Binary files /dev/null and b/textures/galaxy_rainbow.png differ diff --git a/textures/galaxy_rainbow.png.import b/textures/galaxy_rainbow.png.import new file mode 100644 index 0000000..14749ac --- /dev/null +++ b/textures/galaxy_rainbow.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d4n3duxjt288o" +path.s3tc="res://.godot/imported/galaxy_rainbow.png-5150f0d13d80cbbaa64705ec8f0a135d.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://textures/galaxy_rainbow.png" +dest_files=["res://.godot/imported/galaxy_rainbow.png-5150f0d13d80cbbaa64705ec8f0a135d.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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=0 diff --git a/textures/galaxy_skybox.png b/textures/galaxy_skybox.png new file mode 100644 index 0000000..8c88d4a Binary files /dev/null and b/textures/galaxy_skybox.png differ diff --git a/textures/galaxy_skybox.png.import b/textures/galaxy_skybox.png.import new file mode 100644 index 0000000..18eeb08 --- /dev/null +++ b/textures/galaxy_skybox.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drj0rof0q81b5" +path.s3tc="res://.godot/imported/galaxy_skybox.png-e42e640ad898a2573fdbfa805414f352.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://textures/galaxy_skybox.png" +dest_files=["res://.godot/imported/galaxy_skybox.png-e42e640ad898a2573fdbfa805414f352.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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=0 diff --git a/user/maps/.gitkeep b/user/maps/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/user/profiles/default/default.json b/user/profiles/default/default.json deleted file mode 100644 index ba5e351..0000000 --- a/user/profiles/default/default.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "AbsoluteInput": false, - "AlwaysPlayHitSound": false, - "ApproachDistance": 20.0, - "ApproachRate": 32.0, - "AutoplayJukebox": true, - "CameraParallax": 0.1, - "CursorDrift": true, - "CursorScale": 1.0, - "CursorTrail": false, - "FPS": 240, - "FadeIn": 15.0, - "FadeOut": true, - "FoV": 70.0, - "Fullscreen": true, - "GameSpace": "skin", - "HUDParallax": 0.0, - "HitPopups": true, - "MenuSpace": "skin", - "MissPopups": true, - "NoteColors": "skin", - "NoteMesh": "skin", - "NoteOpacity": 1.0, - "NoteSize": 0.875, - "Pushback": true, - "RecordReplays": true, - "Sensitivity": 0.5, - "SimpleHUD": true, - "Skin": "default", - "TrailDetail": 1.0, - "TrailTime": 0.05, - "UnlockFPS": true, - "UseCursorInMenus": false, - "VideoDim": 80.0, - "VideoRenderScale": 100.0, - "VolumeMaster": 50.0, - "VolumeMusic": 50.0, - "VolumeSFX": 50.0, - "_Version": 1 -} \ No newline at end of file diff --git a/user/skins/default/miss.mp3 b/user/skins/default/miss.mp3 index 558b27a..22fc9ad 100644 Binary files a/user/skins/default/miss.mp3 and b/user/skins/default/miss.mp3 differ