Global refactor

This commit is contained in:
Rendo 2025-12-09 11:53:52 +05:00
commit 0589ca4e23
180 changed files with 249 additions and 401 deletions

View file

@ -0,0 +1,51 @@
extends Interactible
class_name ActiveBomb
var plant: StringName
@onready var defuse_timer: Timer = $DefuseTimer
@export var bomb_audio: MultiplayerAudio3D
@export var tick_curve : Curve
var tick_time: float
var tick_stop: bool
func _ready() -> void:
super()
if multiplayer.is_server():
Session.bomb_timer.timeout.connect(on_timeout)
Session.begin_bomb_stage()
func _process(delta: float) -> void:
if tick_stop:
return
if multiplayer.is_server():
tick_time += delta
if tick_time >= tick_curve.sample(1-Session.bomb_timer.time_left/Session.bomb_timer.wait_time):
bomb_audio.multiplayer_play()
tick_time = 0
func on_timeout():
if multiplayer.is_server() == false:
return
tick_stop = true
$BoomAudio.play()
Session.kill_site(plant)
func on_defuse_timeout():
Session.defuse_win()
tick_stop = true
func interaction_start(player_id: int):
if tick_stop or Session.player_nodes[player_id].team != Session.TEAMS.DEFENCE:
return
super(player_id)
defuse_timer.start()
$DefuseAudio.multiplayer_play()
Session.player_nodes[player_id].passive()
func interaction_end():
Session.player_nodes[interacted_id].depassive()
super()
defuse_timer.stop()

View file

@ -0,0 +1 @@
uid://boftqgpgqf56g

View file

@ -0,0 +1,68 @@
[gd_scene load_steps=10 format=3 uid="uid://dtbpyfdawb02b"]
[ext_resource type="Script" uid="uid://boftqgpgqf56g" path="res://weapons/bomb/active_bomb.gd" id="1_avh0g"]
[ext_resource type="PackedScene" uid="uid://dftij0fdq3lbr" path="res://models/weapons/Bomb.glb" id="1_yh58y"]
[ext_resource type="AudioStream" uid="uid://blqgr0uweyg38" path="res://audio/bomb_beep.ogg" id="3_0eiu1"]
[ext_resource type="Script" uid="uid://da0xv360va3b3" path="res://audio/audio_system/multiplayer_audio_3d.gd" id="4_rcpur"]
[ext_resource type="AudioStream" uid="uid://dlvwyj5erlhss" path="res://audio/defuse.ogg" id="5_rcpur"]
[ext_resource type="AudioStream" uid="uid://lmmqcovqat1u" path="res://audio/explosion.ogg" id="6_uibus"]
[sub_resource type="Curve" id="Curve_0eiu1"]
_limits = [0.0, 3.0, 0.0, 1.0]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.667, 1), 0.0, 0.0, 0, 0, Vector2(0.667, 0.5), 0.0, 0.0, 0, 0, Vector2(0.888, 0.5), 0.0, 0.0, 0, 0, Vector2(0.889, 0.333), 0.0, 0.0, 0, 0, Vector2(1, 0.10352564), 0.0, 0.0, 0, 0]
point_count = 6
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_yh58y"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 2
[sub_resource type="BoxShape3D" id="BoxShape3D_avh0g"]
size = Vector3(1, 0.23214722, 0.8808594)
[node name="ActiveBomb" type="CharacterBody3D" node_paths=PackedStringArray("bomb_audio")]
collision_layer = 64
collision_mask = 0
script = ExtResource("1_avh0g")
bomb_audio = NodePath("BeepAudio")
tick_curve = SubResource("Curve_0eiu1")
[node name="Bomb" parent="." instance=ExtResource("1_yh58y")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1307683, 0)
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_yh58y")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1431427, 0.06738281)
shape = SubResource("BoxShape3D_avh0g")
[node name="DefuseTimer" type="Timer" parent="."]
wait_time = 10.0
one_shot = true
[node name="BeepAudio" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("3_0eiu1")
attenuation_model = 1
max_distance = 200.0
bus = &"GameplayMain"
attenuation_filter_cutoff_hz = 10000.0
script = ExtResource("4_rcpur")
metadata/_custom_type_script = "uid://da0xv360va3b3"
[node name="DefuseAudio" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("5_rcpur")
max_distance = 100.0
bus = &"GameplayMain"
script = ExtResource("4_rcpur")
metadata/_custom_type_script = "uid://da0xv360va3b3"
[node name="BoomAudio" type="AudioStreamPlayer3D" parent="."]
stream = ExtResource("6_uibus")
attenuation_model = 3
max_distance = 500.0
bus = &"GameplayMisc"
script = ExtResource("4_rcpur")
metadata/_custom_type_script = "uid://da0xv360va3b3"
[connection signal="timeout" from="DefuseTimer" to="." method="on_defuse_timeout"]

32
weapons/bomb/bomb.tscn Normal file
View file

@ -0,0 +1,32 @@
[gd_scene load_steps=6 format=3 uid="uid://bxdatd1ilfgmc"]
[ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://systems/weapon_system/weapon_substate_machine.gd" id="1_krsgt"]
[ext_resource type="Script" uid="uid://rx78vdadldm7" path="res://weapons/bomb/bomb_main_state.gd" id="2_870cc"]
[ext_resource type="Script" uid="uid://cx7j3kr1laq3s" path="res://weapons/bomb/bomb_idle_state.gd" id="3_1x0so"]
[ext_resource type="Script" uid="uid://dmyir46aricwi" path="res://weapons/bomb/bomb_intro_state.gd" id="4_fv3ha"]
[ext_resource type="Script" uid="uid://b5eapvgoni1pj" path="res://weapons/bomb/bomb_dropper.gd" id="5_fv3ha"]
[node name="Bomb" type="Node" node_paths=PackedStringArray("enter_state")]
script = ExtResource("1_krsgt")
animation_prefix = &"baked_bomb_"
registry_entry = &"bomb"
visibility_target = &"bomb"
max_ammo = 1
ammo_mags = 0
can_be_previous = false
destroy_when_empty = true
slot = &"bomb"
enter_state = NodePath("Intro")
metadata/_custom_type_script = "uid://e6lqknfl4ngt"
[node name="Plant" type="Node" parent="."]
script = ExtResource("2_870cc")
[node name="Idle" type="Node" parent="."]
script = ExtResource("3_1x0so")
[node name="Intro" type="Node" parent="."]
script = ExtResource("4_fv3ha")
[node name="Dropper" type="Node" parent="."]
script = ExtResource("5_fv3ha")

View file

@ -0,0 +1,9 @@
extends Node
func _ready() -> void:
if get_parent().player == null: return
get_parent().player.died.connect(on_death)
func on_death() -> void:
get_parent().system.drop_slot("bomb")

View file

@ -0,0 +1 @@
uid://b5eapvgoni1pj

View file

@ -0,0 +1,12 @@
extends WeaponState
func enter() -> void:
machine.animation_player.play(machine.animation_prefix+"idle")
func exit() -> void:
pass
func use_begin() -> void:
if Session.is_on_site(machine.player.player_id):
transition.emit("Plant")

View file

@ -0,0 +1 @@
uid://cx7j3kr1laq3s

View file

@ -0,0 +1,12 @@
extends WeaponState
func enter() -> void:
machine.animation_player.play(machine.animation_prefix+"intro")
machine.animation_player.animation_finished.connect(on_animation_finished)
func exit() -> void:
machine.animation_player.animation_finished.disconnect(on_animation_finished)
func on_animation_finished(animation: StringName):
if animation == machine.animation_prefix + "intro":
transition.emit("Idle")

View file

@ -0,0 +1 @@
uid://dmyir46aricwi

View file

@ -0,0 +1,33 @@
extends WeaponState
@export var bomb_scene: PackedScene
func enter():
machine.animation_player.play(machine.animation_prefix+"plant")
machine.animation_player.animation_finished.connect(on_animation_finished)
if is_multiplayer_authority():
machine.speed_modifier = 0.0
machine.player.get_node("PlantAudio").multiplayer_play()
func exit():
machine.animation_player.animation_finished.disconnect(on_animation_finished)
machine.speed_modifier = 1.0
func on_animation_finished(animation: StringName):
if is_multiplayer_authority() == false:
return
if animation == machine.animation_prefix + "plant":
var bomb: ActiveBomb = bomb_scene.instantiate()
Session.dynamic_objects_parent.add_child(bomb)
bomb.global_position = machine.player.global_position
bomb.plant = Session.get_site(machine.player.player_id).name
machine.ammo -= 1
return_to_previous.emit()
func use_end() -> void:
if is_multiplayer_authority() == false:
return
transition.emit("Idle")
machine.player.get_node("PlantAudio").multiplayer_stop()

View file

@ -0,0 +1 @@
uid://rx78vdadldm7

View file

@ -0,0 +1,39 @@
[gd_scene load_steps=6 format=3 uid="uid://cxdgk74ln5xpn"]
[ext_resource type="Script" uid="uid://cskgqgkr7pmb0" path="res://systems/weapon_system/dropped_weapon.gd" id="1_hsebh"]
[ext_resource type="PackedScene" uid="uid://dftij0fdq3lbr" path="res://models/weapons/Bomb.glb" id="1_pcfvq"]
[ext_resource type="PackedScene" uid="uid://bxdatd1ilfgmc" path="res://weapons/bomb/bomb.tscn" id="2_ucc3u"]
[sub_resource type="BoxShape3D" id="BoxShape3D_hsebh"]
size = Vector3(1, 0.25274658, 0.7492676)
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_ddvbd"]
properties/0/path = NodePath(".:position")
properties/0/spawn = true
properties/0/replication_mode = 1
properties/1/path = NodePath(".:rotation")
properties/1/spawn = true
properties/1/replication_mode = 1
[node name="DroppableBomb" type="RigidBody3D" node_paths=PackedStringArray("weapon")]
collision_layer = 8
collision_mask = 9
script = ExtResource("1_hsebh")
slot = &"bomb"
weapon = NodePath("BombWeapon")
team = 1
[node name="BombWeapon" parent="." instance=ExtResource("2_ucc3u")]
[node name="Bomb" parent="." instance=ExtResource("1_pcfvq")]
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -3.0517578e-05, 0.0010986328)
shape = SubResource("BoxShape3D_hsebh")
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
replication_config = SubResource("SceneReplicationConfig_ddvbd")
[node name="MultiplayerSpawner" type="MultiplayerSpawner" parent="."]
_spawnable_scenes = PackedStringArray("uid://bxdatd1ilfgmc")
spawn_path = NodePath("..")