diff --git a/data/pawn_base_data.gd b/data/pawn_base_data.gd index 3929350..0479eaa 100644 --- a/data/pawn_base_data.gd +++ b/data/pawn_base_data.gd @@ -19,5 +19,7 @@ class_name PawnBaseData extends Resource var model @export var portrait : Texture2D @export var nameplate : Texture2D +@export var name_audio : AudioStream +@export var pawn_body : PackedScene @export var starting_hacks : Array[HackSet] = [null, null, null] diff --git a/data/pawns/abdoll_relin.tres b/data/pawns/abdoll_relin.tres index 6a97838..6e566eb 100644 --- a/data/pawns/abdoll_relin.tres +++ b/data/pawns/abdoll_relin.tres @@ -1,8 +1,10 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://yosnkcj4ci4v"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://yosnkcj4ci4v"] [ext_resource type="Texture2D" uid="uid://3dj2p3xerc45" path="res://visuals/images/temp_portraits/tg-abdoll-relin.jpg" id="1_4g7al"] +[ext_resource type="AudioStream" uid="uid://dhlg3pk3tbirp" path="res://external/sample audio/a.wav" id="1_32lt6"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_4g7al"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_8dqhi"] +[ext_resource type="PackedScene" uid="uid://c3s6gqy0s5kus" path="res://templates/pawns/glitch.tscn" id="2_ptqwn"] [sub_resource type="Resource" id="Resource_4g7al"] script = ExtResource("2_4g7al") @@ -36,5 +38,7 @@ range_time = 1.0 melee_time = 1.25 reload_time = 1.75 portrait = ExtResource("1_4g7al") +name_audio = ExtResource("1_32lt6") +pawn_body = ExtResource("2_ptqwn") starting_hacks = Array[ExtResource("2_4g7al")]([SubResource("Resource_4g7al"), SubResource("Resource_8dqhi"), SubResource("Resource_32lt6")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/data/pawns/john_bishous.tres b/data/pawns/john_bishous.tres index 89c50a8..463852a 100644 --- a/data/pawns/john_bishous.tres +++ b/data/pawns/john_bishous.tres @@ -1,6 +1,8 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://df4gqi1us2dwu"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://df4gqi1us2dwu"] +[ext_resource type="AudioStream" uid="uid://7dsv6kcptvar" path="res://external/sample audio/b.wav" id="1_idp5c"] [ext_resource type="Texture2D" uid="uid://2qoouiv1cf0i" path="res://visuals/images/temp_portraits/tg-john-bishous.jpg" id="1_sb8f5"] +[ext_resource type="PackedScene" uid="uid://bum67b50tn8ye" path="res://templates/pawns/veil.tscn" id="2_rv56g"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_sb8f5"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_tu5w7"] @@ -35,5 +37,7 @@ range_time = 0.75 melee_time = 1.0 reload_time = 1.75 portrait = ExtResource("1_sb8f5") +name_audio = ExtResource("1_idp5c") +pawn_body = ExtResource("2_rv56g") starting_hacks = Array[ExtResource("2_sb8f5")]([SubResource("Resource_sb8f5"), SubResource("Resource_tu5w7"), SubResource("Resource_idp5c")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/data/pawns/lou_riche.tres b/data/pawns/lou_riche.tres index 31acffc..484a6fd 100644 --- a/data/pawns/lou_riche.tres +++ b/data/pawns/lou_riche.tres @@ -1,7 +1,9 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://dnty6gi4s2vdl"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://dnty6gi4s2vdl"] +[ext_resource type="AudioStream" uid="uid://dr3jq3tnvtwu" path="res://external/sample audio/c.wav" id="1_6f6nq"] [ext_resource type="Texture2D" uid="uid://db0n6kjwucthf" path="res://visuals/images/temp_portraits/tg-lou-riche.jpg" id="1_onotk"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_7kyxn"] +[ext_resource type="PackedScene" uid="uid://c6hojd4o764oc" path="res://templates/pawns/miko.tscn" id="2_54xui"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_onotk"] [sub_resource type="Resource" id="Resource_onotk"] @@ -34,5 +36,7 @@ range_damage = 4 range_time = 0.4 melee_time = 1.25 portrait = ExtResource("1_onotk") +name_audio = ExtResource("1_6f6nq") +pawn_body = ExtResource("2_54xui") starting_hacks = Array[ExtResource("2_onotk")]([SubResource("Resource_onotk"), SubResource("Resource_7kyxn"), SubResource("Resource_6f6nq")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/data/pawns/tenrou_ugetsu.tres b/data/pawns/tenrou_ugetsu.tres index 04f19de..c36c7bb 100644 --- a/data/pawns/tenrou_ugetsu.tres +++ b/data/pawns/tenrou_ugetsu.tres @@ -1,7 +1,9 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://bpb2nok3rqm1g"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://bpb2nok3rqm1g"] [ext_resource type="Texture2D" uid="uid://ci86bksme5114" path="res://visuals/images/temp_portraits/tg-tenrou-ugetsu.jpg" id="1_fm4bf"] +[ext_resource type="AudioStream" uid="uid://dsikjobcle18a" path="res://external/sample audio/d.wav" id="1_vnwdb"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_0fl5x"] +[ext_resource type="PackedScene" uid="uid://bqg51qfb0cj8y" path="res://templates/pawns/mr_tingles.tscn" id="2_4mj1t"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="3_fm4bf"] [sub_resource type="Resource" id="Resource_0fl5x"] @@ -27,7 +29,6 @@ script = ExtResource("2_0fl5x") name = "Tenrou Ugetsu" move_speed = 3.5 life = 100 -max_life = null ammo = 7 max_ammo = 7 melee_damage = 15 @@ -36,5 +37,7 @@ range_time = 0.3 melee_time = 1.25 reload_time = 0.6 portrait = ExtResource("1_fm4bf") +name_audio = ExtResource("1_vnwdb") +pawn_body = ExtResource("2_4mj1t") starting_hacks = Array[ExtResource("3_fm4bf")]([SubResource("Resource_0fl5x"), SubResource("Resource_vnwdb"), SubResource("Resource_4mj1t")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/data/pawns/tico.tres b/data/pawns/tico.tres index 7bba173..44cd3eb 100644 --- a/data/pawns/tico.tres +++ b/data/pawns/tico.tres @@ -1,8 +1,10 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://casciqabe0wgo"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://casciqabe0wgo"] [ext_resource type="Texture2D" uid="uid://bsug1ur2gifkh" path="res://visuals/images/temp_portraits/tg-tico.jpg" id="1_o3qj5"] +[ext_resource type="AudioStream" uid="uid://dornjmfg37bv0" path="res://external/sample audio/e.wav" id="1_o75pd"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_cxp03"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_o3qj5"] +[ext_resource type="PackedScene" uid="uid://bb6a6wu2kc3fr" path="res://templates/pawns/pawn_body.tscn" id="2_wsuu3"] [sub_resource type="Resource" id="Resource_o3qj5"] script = ExtResource("2_o3qj5") @@ -36,5 +38,7 @@ range_time = 1.0 melee_time = 1.25 reload_time = 2.0 portrait = ExtResource("1_o3qj5") +name_audio = ExtResource("1_o75pd") +pawn_body = ExtResource("2_wsuu3") starting_hacks = Array[ExtResource("2_o3qj5")]([SubResource("Resource_o3qj5"), SubResource("Resource_cxp03"), SubResource("Resource_o75pd")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/data/pawns/van_reily.tres b/data/pawns/van_reily.tres index ae6862a..72bc367 100644 --- a/data/pawns/van_reily.tres +++ b/data/pawns/van_reily.tres @@ -1,6 +1,8 @@ -[gd_resource type="Resource" script_class="PawnBaseData" load_steps=7 format=3 uid="uid://6s8tqfssrt5i"] +[gd_resource type="Resource" script_class="PawnBaseData" load_steps=9 format=3 uid="uid://6s8tqfssrt5i"] +[ext_resource type="AudioStream" uid="uid://bqu2otr8b1oj6" path="res://external/sample audio/f.wav" id="1_2pr8m"] [ext_resource type="Texture2D" uid="uid://bp6wc55s2t4si" path="res://visuals/images/temp_portraits/tg-van-raily.jpg" id="1_crpmc"] +[ext_resource type="PackedScene" uid="uid://cwrxbjgwbiv81" path="res://templates/pawns/zero.tscn" id="2_1yw33"] [ext_resource type="Script" uid="uid://b0b1107c0d807" path="res://data/hackset.gd" id="2_crpmc"] [ext_resource type="Script" uid="uid://c53ohdio1ksp1" path="res://data/pawn_base_data.gd" id="2_nf0ju"] @@ -32,5 +34,7 @@ range_damage = 5 range_time = 0.5 melee_time = 1.0 portrait = ExtResource("1_crpmc") +name_audio = ExtResource("1_2pr8m") +pawn_body = ExtResource("2_1yw33") starting_hacks = Array[ExtResource("2_crpmc")]([SubResource("Resource_crpmc"), SubResource("Resource_nf0ju"), SubResource("Resource_2pr8m")]) metadata/_custom_type_script = "uid://c53ohdio1ksp1" diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..5428049 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,27 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://ck35ska6sr17h"] + +[resource] +bus/1/name = &"Voice" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 4.4334908 +bus/1/send = &"Master" +bus/2/name = &"Music" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = -8.793672 +bus/2/send = &"Master" +bus/3/name = &"SFX" +bus/3/solo = false +bus/3/mute = false +bus/3/bypass_fx = false +bus/3/volume_db = 0.0 +bus/3/send = &"Master" +bus/4/name = &"UI" +bus/4/solo = false +bus/4/mute = false +bus/4/bypass_fx = false +bus/4/volume_db = 0.0 +bus/4/send = &"Master" diff --git a/external/sample audio/a.wav b/external/sample audio/a.wav new file mode 100644 index 0000000..d0aa5b4 Binary files /dev/null and b/external/sample audio/a.wav differ diff --git a/external/sample audio/a.wav.import b/external/sample audio/a.wav.import new file mode 100644 index 0000000..5b09c41 --- /dev/null +++ b/external/sample audio/a.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dhlg3pk3tbirp" +path="res://.godot/imported/a.wav-512eaf7f1be1e1dbb02db32d769d1e7c.sample" + +[deps] + +source_file="res://external/sample audio/a.wav" +dest_files=["res://.godot/imported/a.wav-512eaf7f1be1e1dbb02db32d769d1e7c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/external/sample audio/b.wav b/external/sample audio/b.wav new file mode 100644 index 0000000..7510e5b Binary files /dev/null and b/external/sample audio/b.wav differ diff --git a/external/sample audio/b.wav.import b/external/sample audio/b.wav.import new file mode 100644 index 0000000..aa3c637 --- /dev/null +++ b/external/sample audio/b.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://7dsv6kcptvar" +path="res://.godot/imported/b.wav-c59cd0574c9eda65844ca10622a04f6a.sample" + +[deps] + +source_file="res://external/sample audio/b.wav" +dest_files=["res://.godot/imported/b.wav-c59cd0574c9eda65844ca10622a04f6a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/external/sample audio/c.wav b/external/sample audio/c.wav new file mode 100644 index 0000000..454fdd3 Binary files /dev/null and b/external/sample audio/c.wav differ diff --git a/external/sample audio/c.wav.import b/external/sample audio/c.wav.import new file mode 100644 index 0000000..82a779f --- /dev/null +++ b/external/sample audio/c.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dr3jq3tnvtwu" +path="res://.godot/imported/c.wav-95e1dea73d2cd00bc271f8a5505d51d0.sample" + +[deps] + +source_file="res://external/sample audio/c.wav" +dest_files=["res://.godot/imported/c.wav-95e1dea73d2cd00bc271f8a5505d51d0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/external/sample audio/d.wav b/external/sample audio/d.wav new file mode 100644 index 0000000..9e44bbb Binary files /dev/null and b/external/sample audio/d.wav differ diff --git a/external/sample audio/d.wav.import b/external/sample audio/d.wav.import new file mode 100644 index 0000000..7adb676 --- /dev/null +++ b/external/sample audio/d.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dsikjobcle18a" +path="res://.godot/imported/d.wav-85e5f5f34f2501a9d76f76f4be908185.sample" + +[deps] + +source_file="res://external/sample audio/d.wav" +dest_files=["res://.godot/imported/d.wav-85e5f5f34f2501a9d76f76f4be908185.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/external/sample audio/e.wav b/external/sample audio/e.wav new file mode 100644 index 0000000..7c5888c Binary files /dev/null and b/external/sample audio/e.wav differ diff --git a/external/sample audio/e.wav.import b/external/sample audio/e.wav.import new file mode 100644 index 0000000..b69b445 --- /dev/null +++ b/external/sample audio/e.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dornjmfg37bv0" +path="res://.godot/imported/e.wav-33e3ff5e179b6933a12f0965dbee05eb.sample" + +[deps] + +source_file="res://external/sample audio/e.wav" +dest_files=["res://.godot/imported/e.wav-33e3ff5e179b6933a12f0965dbee05eb.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/external/sample audio/f.wav b/external/sample audio/f.wav new file mode 100644 index 0000000..faad8a7 Binary files /dev/null and b/external/sample audio/f.wav differ diff --git a/external/sample audio/f.wav.import b/external/sample audio/f.wav.import new file mode 100644 index 0000000..6731191 --- /dev/null +++ b/external/sample audio/f.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bqu2otr8b1oj6" +path="res://.godot/imported/f.wav-e8b08693b137a9f5e83ffd51a7709a8e.sample" + +[deps] + +source_file="res://external/sample audio/f.wav" +dest_files=["res://.godot/imported/f.wav-e8b08693b137a9f5e83ffd51a7709a8e.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/scenes/character_select.tscn b/scenes/character_select.tscn index 4ea5577..449a8b5 100644 --- a/scenes/character_select.tscn +++ b/scenes/character_select.tscn @@ -485,18 +485,25 @@ theme_override_font_sizes/font_size = 40 text = "CHARACTER SELECT" horizontal_alignment = 1 -[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +[node name="Music" type="AudioStreamPlayer" parent="."] stream = ExtResource("3_bow2h") volume_db = -5.0 autoplay = true +bus = &"Music" [node name="SelectSound" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true stream = ExtResource("7_bqp8h") +[node name="Announcer" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true +volume_db = 12.381 +bus = &"Voice" + [node name="SwitchSound" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true stream = ExtResource("8_5cdo8") +bus = &"SFX" [connection signal="spawned" from="SelectorSpawner" to="." method="_on_selector_spawner_spawned"] [connection signal="child_entered_tree" from="Panel2/SelectorStart" to="." method="_on_selector_start_child_entered_tree"] diff --git a/scripts/character_select.gd b/scripts/character_select.gd index a88d1b1..a4f668f 100644 --- a/scripts/character_select.gd +++ b/scripts/character_select.gd @@ -26,6 +26,9 @@ var selector_wait : float = 0 var selected : int = -1 var selectors : Dictionary[int,PawnSelector] = {} var displays : Dictionary[int, PawnDisplay] = {} + +var announce_tween : Tween = null +@onready var announcer : AudioStreamPlayer = %Announcer @onready var selector_start : Control = %SelectorStart @onready var switch_sound : AudioStreamPlayer = %SwitchSound @onready var select_sound : AudioStreamPlayer = %SelectSound @@ -105,6 +108,14 @@ func move_selector(peer_id : int, selection : int) -> void: var v = Vector2(175 * selector.selection, 0) selector.position = Vector2(175 * selector.selection, 0) switch_sound.play() + if announce_tween != null and announce_tween.is_running(): + announce_tween.stop() + if announcer.playing: + announcer.stop() + announce_tween = create_tween() + announce_tween.tween_interval(.25) + announcer.stream = pawns[selection].name_audio + announce_tween.tween_callback(announcer.play) @rpc("any_peer","call_local","reliable") func lock_selector(peer_id : int) -> void: diff --git a/scripts/hack.gd b/scripts/hack.gd index 55930e5..7bc648c 100644 --- a/scripts/hack.gd +++ b/scripts/hack.gd @@ -9,13 +9,13 @@ enum Type{ CONTAIN } -const range_shapes : Dictionary = { - Hack.Type.DESTROY : Vector3(4.25,3,4.25), - Hack.Type.INFECT : Vector3(1,1,1), - Hack.Type.CONTAIN : Vector3(1,1,1), - Hack.Type.REDIRECT : Vector3(1,1,1), - Hack.Type.TRIGGER : Vector3(3,1,3), - Hack.Type.PURGE : Vector3(4.25,3,4.25), +const range_radius : Dictionary = { + Hack.Type.DESTROY : 2, + Hack.Type.INFECT : .5, + Hack.Type.CONTAIN : .5, + Hack.Type.REDIRECT : .5, + Hack.Type.TRIGGER : 1, + Hack.Type.PURGE : 1.5, } const hack_icons : Dictionary = { Hack.Type.DESTROY : preload("res://external/destroy-icon.png"), @@ -34,7 +34,7 @@ const infect_emitter_template = preload("res://templates/gas_emitter.tscn") const force_activate_sound = preload("res://audio/sounds/TomWinandySFX_UI_ScifiTech_Start_06.wav") @onready var range_area : Area3D = %RangeArea -@onready var range_shape : BoxShape3D = %RangeShape.shape +@onready var range_shape : SphereShape3D = %RangeShape.shape @onready var model : MeshInstance3D = %Model @onready var icon : Sprite3D = %Icon @onready var force_strip : Sprite3D = %ForceStrip @@ -113,7 +113,7 @@ func _ready() -> void: icon.texture = hack_icons[type] model.visible = owns_hack icon.visible = owns_hack - range_shape.size = range_shapes[type] + range_shape.radius = range_radius[type] match(type): Type.DESTROY: damage = 15 diff --git a/scripts/pawn_controller.gd b/scripts/pawn_controller.gd index f2136a5..00edcb1 100644 --- a/scripts/pawn_controller.gd +++ b/scripts/pawn_controller.gd @@ -180,7 +180,8 @@ func _physics_process(delta: float) -> void: if detecting: update_detect_region.rpc(true) - + if range_sphere: + update_range_sphere() #Deal with the rest of the buttons if !input_locked: if modal: @@ -241,19 +242,30 @@ func update_actions() -> void: if range_sphere != null: range_sphere.queue_free() range_sphere = range_sphere_template.instantiate() + Game.level.add_child(range_sphere) #Set the range sphere size based upon the current hack update_range_sphere() if input.is_action_just_released("install"): installing = false + range_sphere.queue_free() + range_sphere = null try_install_hack() elif input.is_action_pressed("attack"): attack() elif input.is_action_just_released("install"): installing = false + range_sphere.queue_free() + range_sphere = null try_install_hack() func update_range_sphere() -> void: - pass + var new_pos = (global_position - Vector3.ONE * .5).round() + Vector3(0.5, 0, 0.5) + if range_sphere.global_position != new_pos: + range_sphere.global_position = new_pos + var type = data.hacks[data.active_hack].type + if range_sphere.type != type: + range_sphere.set_range(Hack.range_radius[data.hacks[data.active_hack].type]) + range_sphere.type = type func update_struggle(delta : float) -> bool: if struggle_timer > 0: @@ -351,12 +363,13 @@ func try_install_hack() -> void: action_tween = create_tween() input_locked = true - body.travel_animation("Install") + #body.travel_animation("Install") action_tween.tween_interval(.2) action_tween.tween_callback(Callable(install_hack).bind(square, data.active_hack)) action_tween.tween_interval(.25) action_tween.tween_callback(clear_action) - + + func install_hack(square : Vector3i, idx : int) -> void: var type : Hack.Type = data.hacks[idx].type var hack = hack_template.instantiate() diff --git a/scripts/range_sphere.gd b/scripts/range_sphere.gd index de15963..c12757d 100644 --- a/scripts/range_sphere.gd +++ b/scripts/range_sphere.gd @@ -1,5 +1,22 @@ -class_name RangeSphere extends CSGSphere3D +@tool +class_name RangeSphere extends Node3D +var _radius : float = 1 +var type : Hack.Type = -1 +@onready var rim_sphere : CSGSphere3D = $RimSphere +@onready var intersect_sphere : CSGSphere3D = $IntersectSphere -func set_range(range : int) -> void: +@export_range(0.1, 10.0, 0.1) var radius : float : + get: + return _radius + set(value): + _radius = value + if rim_sphere != null: + rim_sphere.radius = _radius + if intersect_sphere != null: + intersect_sphere.radius = _radius + + + +func set_range(range : float) -> void: radius = range diff --git a/templates/hack.tscn b/templates/hack.tscn index 80b766d..11ea02d 100644 --- a/templates/hack.tscn +++ b/templates/hack.tscn @@ -10,8 +10,7 @@ [sub_resource type="BoxShape3D" id="BoxShape3D_dw7u0"] size = Vector3(0.8, 1, 0.8) -[sub_resource type="BoxShape3D" id="BoxShape3D_6h4aj"] -resource_local_to_scene = true +[sub_resource type="SphereShape3D" id="SphereShape3D_oyohn"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_odo83"] resource_local_to_scene = true @@ -109,7 +108,7 @@ collision_mask = 6 [node name="RangeShape" type="CollisionShape3D" parent="RangeArea"] unique_name_in_owner = true transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0) -shape = SubResource("BoxShape3D_6h4aj") +shape = SubResource("SphereShape3D_oyohn") [node name="ActivationTimer" type="Timer" parent="."] unique_name_in_owner = true diff --git a/templates/range_sphere.tscn b/templates/range_sphere.tscn index 2fa8347..9b22b56 100644 --- a/templates/range_sphere.tscn +++ b/templates/range_sphere.tscn @@ -5,27 +5,35 @@ [ext_resource type="Texture2D" uid="uid://c4r0yuw28xqrc" path="res://visuals/textures/explosive_noise.tres" id="3_2bjjq"] [ext_resource type="Script" uid="uid://w801e8ko5s5d" path="res://scripts/range_sphere.gd" id="4_mfswp"] +[sub_resource type="ShaderMaterial" id="ShaderMaterial_besml"] +render_priority = 0 +shader = ExtResource("2_oohvj") +shader_parameter/amount = 3.295 +shader_parameter/intensity = 3.775 +shader_parameter/fresnel_color = Color(0.73333335, 0.4745098, 0, 1) +shader_parameter/noise_texture = ExtResource("3_2bjjq") + [sub_resource type="ShaderMaterial" id="ShaderMaterial_0nmat"] render_priority = 0 shader = ExtResource("1_besml") shader_parameter/intersection_color = Color(1, 1, 0, 1) -shader_parameter/intersection_thickness = 0.05 +shader_parameter/intersection_thickness = 0.08 shader_parameter/intensity = 5.0 -shader_parameter/dots_per_radian = 10.0 +shader_parameter/dots_per_radian = 50.0 -[sub_resource type="ShaderMaterial" id="ShaderMaterial_0fg7r"] -render_priority = 0 -next_pass = SubResource("ShaderMaterial_0nmat") -shader = ExtResource("2_oohvj") -shader_parameter/amount = 2.335 -shader_parameter/intensity = 4.54 -shader_parameter/fresnel_color = Color(0.73333335, 0.4745098, 0, 1) -shader_parameter/noise_texture = ExtResource("3_2bjjq") +[node name="RangeSphere" type="Node3D"] +script = ExtResource("4_mfswp") +radius = 8.0 -[node name="RangeSphere" type="CSGSphere3D"] +[node name="RimSphere" type="CSGSphere3D" parent="."] radius = 1.5 radial_segments = 36 rings = 36 smooth_faces = false -material = SubResource("ShaderMaterial_0fg7r") -script = ExtResource("4_mfswp") +material = SubResource("ShaderMaterial_besml") + +[node name="IntersectSphere" type="CSGSphere3D" parent="."] +radius = 1.5 +radial_segments = 36 +rings = 36 +material = SubResource("ShaderMaterial_0nmat") diff --git a/visuals/shaders/intersection.gdshader b/visuals/shaders/intersection.gdshader index 115d909..29e6162 100644 --- a/visuals/shaders/intersection.gdshader +++ b/visuals/shaders/intersection.gdshader @@ -38,16 +38,18 @@ void fragment() { ALPHA = max(.05, intersect * intersection_color.a * strength); float angle = atan(v_normal.z, v_normal.x); - float dot_step = (2.0f * PI) / dots_per_radian; + float dot_step = PI / dots_per_radian; angle = round(angle / dot_step + 0.5f); - if(mod(angle,2.0) == 0.0){ - ALPHA = 0.0; - } + if(ALPHA == .05){ ALBEDO = intersection_color.rgb; + ALPHA = 0.01; }else{ ALBEDO = intersection_color.rgb * strength; EMISSION = intersection_color.rgb * intensity * strength; // Glow effect + if(mod(angle,2.0) == 0.0){ + ALPHA = 0.0; + } } } \ No newline at end of file