fix tests and move scripts

This commit is contained in:
anyreso 2026-03-16 03:44:38 -04:00
parent 3ca9d4ec59
commit a99473a35d
24 changed files with 128 additions and 128 deletions

View file

@ -49,10 +49,6 @@ gdscript/warnings/function_used_as_property=2
window/stretch/mode="canvas_items"
[editor]
run/main_run_args="-t --resolution 480x300"
[editor_plugins]
enabled=PackedStringArray("res://addons/sky_3d/plugin.cfg", "res://addons/terrain_3d/plugin.cfg")
@ -177,6 +173,7 @@ inventory_slot_0={
3d_render/layer_2="Sky"
3d_render/layer_3="Player"
3d_physics/layer_1="World"
3d_physics/layer_2="Players"
3d_physics/layer_3="Damage"
3d_physics/layer_4="Objective"
3d_physics/layer_32="WalkableSurface"
@ -185,7 +182,4 @@ inventory_slot_0={
3d/run_on_separate_thread=true
3d/physics_engine="Jolt Physics"
jolt_physics_3d/simulation/speculative_contact_distance=0.0
jolt_physics_3d/queries/use_enhanced_internal_edge_removal=true
3d/default_gravity=19.6
3d/solver/contact_max_allowed_penetration=0.02

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=5 format=3 uid="uid://ciwnbmkjqyf4d"]
[gd_scene format=3 uid="uid://ciwnbmkjqyf4d"]
[ext_resource type="Script" uid="uid://cefq7u2fatx2e" path="res://scenes/entities/components/scripts/flag_holder.gd" id="1_3kspm"]
[ext_resource type="Script" uid="uid://cefq7u2fatx2e" path="res://scripts/entities/components/flag_holder.gd" id="1_3kspm"]
[ext_resource type="PackedScene" uid="uid://d3l7fvbdg6m5g" path="res://scenes/entities/flag/assets/flag.glb" id="2_p6h8o"]
[ext_resource type="Texture2D" uid="uid://1mwcg0cd0msw" path="res://scenes/interfaces/hud/throw_force_texture.svg" id="3_l5ucd"]
@ -9,14 +9,14 @@ properties/0/path = NodePath(".:visible")
properties/0/spawn = true
properties/0/replication_mode = 2
[node name="FlagHolder" type="Node3D"]
[node name="FlagHolder" type="Node3D" unique_id=379943701]
visible = false
script = ExtResource("1_3kspm")
[node name="ThrowTimer" type="Timer" parent="."]
[node name="ThrowTimer" type="Timer" parent="." unique_id=1484924086]
one_shot = true
[node name="ThrowForce" type="TextureProgressBar" parent="."]
[node name="ThrowForce" type="TextureProgressBar" parent="." unique_id=1819816062]
visible = false
anchors_preset = 8
anchor_left = 0.5
@ -35,7 +35,7 @@ radial_initial_angle = 293.0
radial_fill_degrees = 135.0
texture_progress = ExtResource("3_l5ucd")
[node name="Mesh" parent="." instance=ExtResource("2_p6h8o")]
[node name="Mesh" parent="." unique_id=1497174958 instance=ExtResource("2_p6h8o")]
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="."]
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=508705761]
replication_config = SubResource("SceneReplicationConfig_sh8bn")

View file

@ -1,6 +1,6 @@
[gd_scene load_steps=4 format=3 uid="uid://53egh2236e1u"]
[gd_scene format=3 uid="uid://53egh2236e1u"]
[ext_resource type="Script" uid="uid://bih0550c0aj65" path="res://scenes/entities/components/scripts/inventory.gd" id="1_u5gxb"]
[ext_resource type="Script" uid="uid://bih0550c0aj65" path="res://scripts/entities/components/inventory.gd" id="1_u5gxb"]
[ext_resource type="PackedScene" uid="uid://c8co0qa2omjmh" path="res://scenes/entities/weapons/space_gun/space_gun.tscn" id="2_3ti0l"]
[ext_resource type="PackedScene" uid="uid://cstl7yxc75572" path="res://scenes/entities/weapons/grenade_launcher/grenade_launcher.tscn" id="3_qgqo0"]

View file

@ -14,8 +14,8 @@
# along with this program. If not, see <https://www.gnu.org/licenses/>.
class_name Flag extends RigidBody3D
signal grabbed(by_peer:int)
signal dropped(by_peer:int)
signal grabbed(by:Node)
signal dropped(by:Node)
const scene:PackedScene = preload("res://scenes/entities/flag/flag.tscn")
@ -32,13 +32,15 @@ enum FlagState {
}
@export var state:FlagState = FlagState.ON_STAND
@export var last_carrier:int
@export var last_carrier:Node
@onready var area:Area3D = $GripArea
@onready var mesh:Node3D = $Mesh
@onready var waypoint:Waypoint3D = $Waypoint
# @TODO: move this variable to a server.cfg
var dropped_max_duration := 30.
## This timer is responsible for returning the flag when it is dropped for more than [member dropped_max_duration].
var respawn_timer := Timer.new()
@ -57,33 +59,36 @@ func _process(_delta:float) -> void:
else:
waypoint.text = ""
func _physics_process(delta:float) -> void:
var root = get_tree().current_scene
var distance_to_camera = global_position.distance_to(get_viewport().get_camera_3d().global_position)
# Determine if terrain collision is active (or too far from camera when using dynamic terrain colliton mode)
var using_fake_ground = distance_to_camera > root.map.collision_radius
if using_fake_ground:
global_position.y = root.map.data.get_height(global_position) # ground_height
linear_velocity.y = 0
# @NOTE: simple way to deal with dynamic collision for distant objects
#func _physics_process(delta:float) -> void:
#var root := get_tree().current_scene
#var distance_to_camera := global_position.distance_to(get_viewport().get_camera_3d().global_position)
## Determine if terrain collision is active (or too far from camera when using dynamic terrain colliton mode)
#var using_fake_ground:bool = distance_to_camera > root.map.collision_radius
#if using_fake_ground:
#global_position.y = root.map.data.get_height(global_position) # ground_height
#linear_velocity.y = 0
func _on_body_entered(body: Node) -> void:
if body is Player:
assert(body.flag_holder)
if state < FlagState.TAKEN:
body.flag_holder.grab(self)
hide()
body.flag_holder.grab(self)
func _on_grabbed(peer_id:int) -> void:
## This method is called immediatly after the flag is grabbed
func _on_grabbed(by:Node) -> void:
assert(state < FlagState.TAKEN)
hide()
state = FlagState.TAKEN
sleeping = true
freeze = true
area.set_deferred("monitoring", false)
last_carrier = peer_id
last_carrier = by
hide()
func _on_dropped(_peer_id:int) -> void:
func _on_dropped(by:Node) -> void:
assert(state == FlagState.TAKEN)
sleeping = false
area.set_deferred("monitoring", true)
state = FlagState.DROPPED
freeze = false
# enable monitoring back after some delay
var _timer := get_tree().create_timer(1.)
_timer.timeout.connect(func() -> void: area.monitoring = true)
last_carrier = by
show()

View file

@ -57,12 +57,15 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = ExtResource("2_ig160")
[node name="GripArea" type="Area3D" parent="." unique_id=1556910033]
collision_layer = 8
collision_mask = 11
[node name="CollisionShape3D" type="CollisionShape3D" parent="GripArea" unique_id=512420425]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
shape = ExtResource("2_ig160")
[node name="Mesh" parent="." unique_id=1972686775 instance=ExtResource("2_i78em")]
transform = Transform3D(-1, 0, -8.742278e-08, 0, 1, 0, 8.742278e-08, 0, -1, 0, 0, 0)
[node name="MultiplayerSynchronizer" type="MultiplayerSynchronizer" parent="." unique_id=1011418792]
replication_config = SubResource("SceneReplicationConfig_lpijf")

View file

@ -17,7 +17,6 @@ class_name InputSynchronizer extends MultiplayerSynchronizer
# synchronized properties
@export var jetting:bool = false
@export var skiing:bool = false
# @NOTE: make this direction a ready to use Vector3 instead
@export var direction:Vector3
@export var rotation:Vector3
@ -71,10 +70,9 @@ func _unhandled_input(event:InputEvent) -> void:
_primary.rpc(event.pressed)
elif event.is_action_pressed("secondary"):
_jump.rpc()
elif event.is_action_pressed("throw"):
elif event.is_action("throw") and not event.is_echo():
_throw.rpc(event.pressed)
elif event.is_action_pressed("wheel_up"):
# @TODO: add settings for cycle direction
_cycle.rpc(1)
elif event.is_action_pressed("wheel_down"):
_cycle.rpc(-1)

View file

@ -49,8 +49,6 @@ static func instantiate() -> Player:
@onready var spring_arm:SpringArm3D = $Pivot/SpringArm3D
@onready var tp_head_remote_transform:RemoteTransform3D = $Pivot/Mesh/Node/Skeleton3D/Head/RT_Head
@export var travel_acceleration_curve:Curve
@export_category("Components")
## The is player [IFF] (Indicator Friend or Foe) component.
@export var iff:IFF

View file

@ -4,10 +4,10 @@
[ext_resource type="PackedScene" uid="uid://bbeecp3jusppn" path="res://scenes/interfaces/hud/iffs/IFF.tscn" id="2_s5wgp"]
[ext_resource type="PackedScene" uid="uid://bcv81ku26xo" path="res://scenes/interfaces/hud/hud.tscn" id="3_ccety"]
[ext_resource type="Shape3D" uid="uid://cb8esdlnottdn" path="res://scenes/entities/player/assets/collider.tres" id="4_8kvcy"]
[ext_resource type="Script" uid="uid://c2df3oj23o0wa" path="res://scenes/entities/components/scripts/health.gd" id="4_18p7g"]
[ext_resource type="Script" uid="uid://c2df3oj23o0wa" path="res://scripts/entities/components/health.gd" id="4_18p7g"]
[ext_resource type="Script" uid="uid://c0v6nfmjxp045" path="res://scenes/entities/player/scripts/energy.gd" id="5_18p7g"]
[ext_resource type="Script" uid="uid://bih0550c0aj65" path="res://scenes/entities/components/scripts/inventory.gd" id="6_pcd0u"]
[ext_resource type="Script" uid="uid://bh5mmolmfwj7h" path="res://scenes/entities/components/scripts/loadout.gd" id="7_pcd0u"]
[ext_resource type="Script" uid="uid://bih0550c0aj65" path="res://scripts/entities/components/inventory.gd" id="6_pcd0u"]
[ext_resource type="Script" uid="uid://bh5mmolmfwj7h" path="res://scripts/entities/components/loadout.gd" id="7_pcd0u"]
[ext_resource type="PackedScene" uid="uid://c8co0qa2omjmh" path="res://scenes/entities/weapons/space_gun/space_gun.tscn" id="7_yywfu"]
[ext_resource type="Texture2D" uid="uid://ct1v5iadtpadm" path="res://scenes/entities/player/assets/jetpackfx/smoke_01.png" id="9_4pant"]
[ext_resource type="PackedScene" uid="uid://cstl7yxc75572" path="res://scenes/entities/weapons/grenade_launcher/grenade_launcher.tscn" id="9_knby6"]
@ -27,10 +27,6 @@ resource_local_to_scene = true
bounce = 1.0
absorbent = true
[sub_resource type="Curve" id="Curve_7dqom"]
_data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
point_count = 2
[sub_resource type="SceneReplicationConfig" id="SceneReplicationConfig_18p7g"]
properties/0/path = NodePath(".:value")
properties/0/spawn = true
@ -4124,7 +4120,6 @@ continuous_cd = true
script = ExtResource("1_y2i7h")
input = NodePath("InputSynchronizer")
dominant_laterality = 0
travel_acceleration_curve = SubResource("Curve_7dqom")
iff = NodePath("IFF")
health = NodePath("Health")
energy = NodePath("Energy")
@ -4172,19 +4167,20 @@ replication_config = SubResource("SceneReplicationConfig_go8vc")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.75, 0)
[node name="FlagHolder" parent="Pivot" unique_id=2064483558 instance=ExtResource("9_yqrof")]
transform = Transform3D(-0.6674206, -0.0039073885, 0.8743766, 0.069051005, 1.0963181, 0.057606522, -0.87165445, 0.08984035, -0.6649414, -0.18662778, -0.45797598, 0.15343875)
transform = Transform3D(-0.65634036, -0.034888066, 0.88204324, 0.059532925, 1.0948886, 0.08760617, -0.88072306, 0.100009166, -0.6514024, -0.18194272, -0.45592213, 0.14700356)
[node name="SpringArm3D" type="SpringArm3D" parent="Pivot" unique_id=1512107091]
spring_length = 0.0
[node name="Camera3D" type="Camera3D" parent="Pivot/SpringArm3D" unique_id=378827417]
transform = Transform3D(1, 0, 2.98023e-07, 0, 1, 0, -2.98023e-07, 0, 1, 0.014624884, -0.01053226, 0.015016291)
transform = Transform3D(1, 0, 2.98023e-07, 0, 1, 0, -2.98023e-07, 0, 1, 0.008185344, -0.0012946129, 0.02404015)
cull_mask = 1048571
fov = 90.0
far = 2048.0
script = SubResource("GDScript_yywfu")
[node name="Inventory" type="Node3D" parent="Pivot/SpringArm3D" unique_id=1438258666]
transform = Transform3D(0.999975, 1.78819e-07, 0, -1.78814e-07, 0.999992, 0, 1.78814e-07, 1.13687e-13, 1.00001, 0.26154926, -0.46331096, -0.09845946)
transform = Transform3D(0.999975, 1.78819e-07, 0, -1.78814e-07, 0.999992, 0, 1.78814e-07, 1.13687e-13, 1.00001, 0.26200315, -0.45637846, -0.102321304)
script = ExtResource("6_pcd0u")
loadout = SubResource("Resource_yywfu")
@ -4197,7 +4193,7 @@ spawn_limit = 3
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.1, 0.075, -0.175)
[node name="Mesh" type="Node3D" parent="Pivot" unique_id=1158972654]
transform = Transform3D(-1.1, 0, -1.66095e-07, 0, 1.1, 0, 1.66095e-07, 0, -1.1, 0, -1.75, 0)
transform = Transform3D(-1.1, 0, -1.6609539e-07, 0, 1.1, 0, 1.6609539e-07, 0, -1.1, 0, -1.75, 0)
script = ExtResource("12_we0b7")
[node name="Node" type="Node3D" parent="Pivot/Mesh" unique_id=919762305]
@ -4208,8 +4204,8 @@ bones/0/name = "mixamorigHips"
bones/0/parent = -1
bones/0/rest = Transform3D(0.840322, -0.0112564, -0.54197, 0.100302, 0.98575, 0.135045, 0.532727, -0.167842, 0.829476, -0.108641, 1.00646, 0.128315)
bones/0/enabled = true
bones/0/position = Vector3(-0.002052404, 0.98129636, 0.0006635934)
bones/0/rotation = Quaternion(-0.07004869, -0.46052682, -0.015985264, 0.8847332)
bones/0/position = Vector3(-0.0063307732, 0.98749405, 0.0039958134)
bones/0/rotation = Quaternion(-0.059231613, -0.46074396, -0.010282587, 0.8854947)
bones/0/scale = Vector3(1, 1, 1)
bones/0/bone_meta/extras = {
"transformData": {
@ -4234,7 +4230,7 @@ bones/2/parent = 0
bones/2/rest = Transform3D(0.99997, -0.00719291, 0.00291518, 0.0071261, 0.999726, 0.022313, -0.00307487, -0.0222916, 0.999747, -0.000381054, 0.0949051, -0.0139206)
bones/2/enabled = true
bones/2/position = Vector3(-0.000381054, 0.0949051, -0.0139206)
bones/2/rotation = Quaternion(-0.007896309, 0.00722248, 0.004365788, 0.99993324)
bones/2/rotation = Quaternion(-0.02499322, 0.0036796855, 0.0059157913, 0.99966335)
bones/2/scale = Vector3(1, 1, 1)
bones/2/bone_meta/extras = {
"transformData": {
@ -4259,7 +4255,7 @@ bones/4/parent = 2
bones/4/rest = Transform3D(0.999772, -0.00744334, 0.0200044, 0.00913675, 0.996258, -0.08594, -0.0192899, 0.0861032, 0.996099, 2.10942e-17, 0.111908, -2.27018e-14)
bones/4/enabled = true
bones/4/position = Vector3(2.10942e-17, 0.111908, -2.27018e-14)
bones/4/rotation = Quaternion(0.052176304, 0.011090109, 0.011241058, 0.99851304)
bones/4/rotation = Quaternion(0.043055557, 0.008567377, 0.0046201134, 0.9990253)
bones/4/scale = Vector3(1, 1, 1)
bones/4/bone_meta/extras = {
"transformData": {
@ -4284,7 +4280,7 @@ bones/6/parent = 4
bones/6/rest = Transform3D(0.999829, 0.00457417, 0.0179285, 0.000811383, 0.95719, -0.28946, -0.0184851, 0.289425, 0.957022, -1.12617e-11, 0.127895, 1.62274e-09)
bones/6/enabled = true
bones/6/position = Vector3(-1.12617e-11, 0.127895, 1.62274e-09)
bones/6/rotation = Quaternion(0.16492026, 0.014548209, -0.0058699953, 0.98618215)
bones/6/rotation = Quaternion(0.1443437, 0.0076817703, 0.00019370053, 0.9894978)
bones/6/scale = Vector3(1, 1, 1)
bones/6/bone_meta/extras = {
"transformData": {
@ -4309,7 +4305,7 @@ bones/8/parent = 6
bones/8/rest = Transform3D(0.166448, -0.959107, 0.228929, -0.251609, -0.265794, -0.930616, 0.953409, 0.097299, -0.285561, -0.0672877, 0.117567, -0.0205846)
bones/8/enabled = true
bones/8/position = Vector3(-0.0672877, 0.117567, -0.0205846)
bones/8/rotation = Quaternion(0.6725654, -0.4258957, 0.41416818, 0.4412861)
bones/8/rotation = Quaternion(0.677974, -0.39901322, 0.40137878, 0.46907872)
bones/8/scale = Vector3(1, 1, 1)
bones/8/bone_meta/extras = {
"transformData": {
@ -4334,7 +4330,7 @@ bones/10/parent = 8
bones/10/rest = Transform3D(0.738572, 0.406156, -0.538097, -0.657443, 0.610624, -0.441482, 0.149265, 0.679834, 0.718015, 0, 0.144488, 2.84217e-16)
bones/10/enabled = true
bones/10/position = Vector3(0, 0.144488, 2.84217e-16)
bones/10/rotation = Quaternion(0.28060567, -0.13303672, -0.27172375, 0.91089404)
bones/10/rotation = Quaternion(0.29777864, -0.17430125, -0.23311573, 0.90917766)
bones/10/scale = Vector3(1, 0.999999, 1)
bones/10/bone_meta/extras = {
"transformData": {
@ -4359,7 +4355,7 @@ bones/12/parent = 10
bones/12/rest = Transform3D(-0.162568, 0.970006, 0.180723, -0.881527, -0.0605007, -0.468241, -0.443263, -0.235434, 0.864921, -8.53685e-10, 0.231603, 0)
bones/12/enabled = true
bones/12/position = Vector3(-8.53685e-10, 0.231603, 0)
bones/12/rotation = Quaternion(0.08545353, 0.24508853, -0.7250717, 0.6378875)
bones/12/rotation = Quaternion(0.073658906, 0.23617035, -0.7251226, 0.642647)
bones/12/scale = Vector3(1, 1, 0.999999)
bones/12/bone_meta/extras = {
"transformData": {
@ -4384,7 +4380,7 @@ bones/14/parent = 12
bones/14/rest = Transform3D(0.968394, 0.2492, 0.0105764, -0.249182, 0.964715, 0.0850511, 0.0109915, -0.0849985, 0.99632, 3.93518e-09, 0.240717, 5.26683e-12)
bones/14/enabled = true
bones/14/position = Vector3(3.93518e-09, 0.240717, 5.26683e-12)
bones/14/rotation = Quaternion(0.10928703, 0.04473894, -0.18593398, 0.97544014)
bones/14/rotation = Quaternion(0.09711099, 0.067824416, -0.19662778, 0.9732969)
bones/14/scale = Vector3(1, 1, 1)
bones/14/bone_meta/extras = {
"transformData": {
@ -4906,7 +4902,7 @@ bones/56/parent = 6
bones/56/rest = Transform3D(0.999949, -0.00320252, 0.00960124, 0.000671414, 0.96752, 0.252792, -0.010099, -0.252773, 0.967473, -0.000568679, 0.142358, -0.0208809)
bones/56/enabled = true
bones/56/position = Vector3(-0.000568679, 0.142358, -0.0208809)
bones/56/rotation = Quaternion(0.017421698, 0.050302185, -0.00430328, 0.9985728)
bones/56/rotation = Quaternion(0.02282005, 0.04879616, 0.00013798969, 0.99854803)
bones/56/scale = Vector3(1, 1, 1)
bones/56/bone_meta/extras = {
"transformData": {
@ -4930,7 +4926,7 @@ bones/58/parent = 56
bones/58/rest = Transform3D(0.897566, 0.100881, 0.429184, -0.370227, 0.701041, 0.609486, -0.23939, -0.705949, 0.666579, 3.59272e-12, 0.0328022, 0.00313332)
bones/58/enabled = true
bones/58/position = Vector3(3.59272e-12, 0.0328022, 0.00313332)
bones/58/rotation = Quaternion(-0.023273136, 0.3029091, -0.060544655, 0.9508096)
bones/58/rotation = Quaternion(-0.0032725618, 0.32101098, -0.04812093, 0.94584656)
bones/58/scale = Vector3(1, 1, 1)
bones/58/bone_meta/extras = {
"transformData": {
@ -4978,7 +4974,7 @@ bones/62/parent = 6
bones/62/rest = Transform3D(0.418567, 0.818421, -0.393685, 0.0144908, -0.439449, -0.898151, -0.90807, 0.370232, -0.195798, 0.0672877, 0.117566, -0.0205846)
bones/62/enabled = true
bones/62/position = Vector3(0.0672877, 0.117566, -0.0205846)
bones/62/rotation = Quaternion(0.72069615, 0.34667727, -0.39491805, 0.4521633)
bones/62/rotation = Quaternion(0.70425487, 0.3615935, -0.3964566, 0.46486288)
bones/62/scale = Vector3(1, 1, 1)
bones/62/bone_meta/extras = {
"transformData": {
@ -5003,7 +4999,7 @@ bones/64/parent = 62
bones/64/rest = Transform3D(0.89629, -0.416688, -0.151774, 0.229002, 0.727966, -0.646238, 0.379766, 0.54446, 0.747892, 3.55271e-17, 0.144488, 0)
bones/64/enabled = true
bones/64/position = Vector3(3.55271e-17, 0.144488, 0)
bones/64/rotation = Quaternion(0.37971902, -0.25614035, 0.10029207, 0.8832594)
bones/64/rotation = Quaternion(0.41133937, -0.22071162, 0.070427865, 0.88154763)
bones/64/scale = Vector3(1, 1, 1)
bones/64/bone_meta/extras = {
"transformData": {
@ -5028,7 +5024,7 @@ bones/66/parent = 64
bones/66/rest = Transform3D(0.00458962, -0.878165, -0.478335, 0.00417536, 0.478353, -0.878158, 0.999981, 0.00203318, 0.00586212, -7.99361e-17, 0.231603, -2.84217e-16)
bones/66/enabled = true
bones/66/position = Vector3(-7.99361e-17, 0.231603, -2.84217e-16)
bones/66/rotation = Quaternion(0.5366648, -0.5635461, 0.43584213, 0.45215964)
bones/66/rotation = Quaternion(0.5360815, -0.57642156, 0.4231218, 0.4486901)
bones/66/scale = Vector3(1, 1, 1)
bones/66/bone_meta/extras = {
"transformData": {
@ -5053,7 +5049,7 @@ bones/68/parent = 66
bones/68/rest = Transform3D(0.659074, 0.052151, -0.750268, -0.155553, 0.985474, -0.0681455, 0.735816, 0.161619, 0.657613, -1.77636e-17, 0.240718, 0)
bones/68/enabled = true
bones/68/position = Vector3(-1.77636e-17, 0.240718, 0)
bones/68/rotation = Quaternion(0.014293031, -0.23843515, 0.07320828, 0.96828973)
bones/68/rotation = Quaternion(0.038727142, -0.23529421, 0.080569126, 0.9678045)
bones/68/scale = Vector3(1, 1, 1)
bones/68/bone_meta/extras = {
"transformData": {
@ -5577,7 +5573,7 @@ bones/110/parent = 0
bones/110/rest = Transform3D(-0.91222, -0.282496, -0.296733, 0.315884, -0.94619, -0.0703024, -0.260905, -0.157864, 0.952369, -0.0994098, -0.0527242, -0.0101088)
bones/110/enabled = true
bones/110/position = Vector3(-0.0994098, -0.0527242, -0.0101088)
bones/110/rotation = Quaternion(-0.18759225, 0.15787517, 0.95606756, 0.16068429)
bones/110/rotation = Quaternion(-0.1886969, 0.1586396, 0.95626295, 0.15744276)
bones/110/scale = Vector3(1, 1, 1)
bones/110/bone_meta/extras = {
"transformData": {
@ -5602,7 +5598,7 @@ bones/112/parent = 110
bones/112/rest = Transform3D(0.929344, 0.0683616, 0.362832, -0.246173, 0.847127, 0.47093, -0.275172, -0.526975, 0.804101, -1.55044e-09, 0.433648, -1.11022e-16)
bones/112/enabled = true
bones/112/position = Vector3(-1.55044e-09, 0.433648, -1.11022e-16)
bones/112/rotation = Quaternion(-0.39658067, 0.01996214, -0.03707125, 0.9170339)
bones/112/rotation = Quaternion(-0.37956765, 0.023052681, -0.03639854, 0.92416024)
bones/112/scale = Vector3(1, 1, 1)
bones/112/bone_meta/extras = {
"transformData": {
@ -5627,7 +5623,7 @@ bones/114/parent = 112
bones/114/rest = Transform3D(0.941956, 0.141806, 0.30432, 0.225352, 0.404852, -0.886178, -0.24887, 0.903319, 0.349396, 4.96938e-09, 0.44493, 8.88178e-17)
bones/114/enabled = true
bones/114/position = Vector3(4.96938e-09, 0.44493, 8.88178e-17)
bones/114/rotation = Quaternion(0.54032165, 0.058724742, 0.047654618, 0.8380531)
bones/114/rotation = Quaternion(0.53526986, 0.058657013, 0.047999293, 0.84127384)
bones/114/scale = Vector3(1, 1, 1)
bones/114/bone_meta/extras = {
"transformData": {
@ -5701,7 +5697,7 @@ bones/120/parent = 0
bones/120/rest = Transform3D(-0.97191, 0.126861, 0.198235, -0.0758087, -0.966144, 0.246613, 0.222809, 0.224658, 0.948623, 0.0961826, -0.0527232, -0.0101089)
bones/120/enabled = true
bones/120/position = Vector3(0.0961826, -0.0527232, -0.0101089)
bones/120/rotation = Quaternion(0.13472028, 0.19166389, 0.9651029, -0.11701269)
bones/120/rotation = Quaternion(0.1351276, 0.19175674, 0.96536964, -0.11415474)
bones/120/scale = Vector3(1, 1, 1)
bones/120/bone_meta/extras = {
"transformData": {
@ -5726,7 +5722,7 @@ bones/122/parent = 120
bones/122/rest = Transform3D(0.99626, 0.0304266, -0.0808751, 0.0180711, 0.841892, 0.539343, 0.0844985, -0.538787, 0.838193, 1.06581e-16, 0.43365, 2.53131e-16)
bones/122/enabled = true
bones/122/position = Vector3(1.06581e-16, 0.43365, 2.53131e-16)
bones/122/rotation = Quaternion(-0.3227801, -0.12107396, 0.030268976, 0.93820995)
bones/122/rotation = Quaternion(-0.30433115, -0.12461352, 0.028640933, 0.94394594)
bones/122/scale = Vector3(1, 1, 1)
bones/122/bone_meta/extras = {
"transformData": {
@ -5751,7 +5747,7 @@ bones/124/parent = 122
bones/124/rest = Transform3D(0.998261, 0.0403719, -0.0429512, -0.057954, 0.539038, -0.840285, -0.0107716, 0.841314, 0.54044, 6.80091e-09, 0.44493, 2.44249e-16)
bones/124/enabled = true
bones/124/position = Vector3(6.80091e-09, 0.44493, 2.44249e-16)
bones/124/rotation = Quaternion(0.4267349, -0.07353834, -0.021167269, 0.9011334)
bones/124/rotation = Quaternion(0.42179984, -0.0729473, -0.020230481, 0.90352327)
bones/124/scale = Vector3(1, 1, 1)
bones/124/bone_meta/extras = {
"transformData": {
@ -5850,7 +5846,7 @@ metadata/extras = {
}
[node name="Head" type="BoneAttachment3D" parent="Pivot/Mesh/Node/Skeleton3D" unique_id=1249179736]
transform = Transform3D(0.9815701, -0.13703907, -0.13319325, 0.10977411, 0.97483927, -0.19400467, 0.15642819, 0.175808, 0.9719165, -0.0010545002, 1.4838504, -0.029447766)
transform = Transform3D(0.98060906, -0.14383163, -0.13311046, 0.12020373, 0.97788936, -0.17112455, 0.15478036, 0.15180594, 0.97621626, 0.005478885, 1.4919432, -0.035251066)
bone_name = "mixamorigHead"
bone_idx = 58
@ -5861,12 +5857,12 @@ update_rotation = false
update_scale = false
[node name="LeftHand" type="BoneAttachment3D" parent="Pivot/Mesh/Node/Skeleton3D" unique_id=193420688]
transform = Transform3D(-0.5248522, -0.8149367, 0.24578059, 0.34175372, 0.062700644, 0.93769544, -0.779573, 0.57614815, 0.24559914, -0.08869287, 1.1722004, 0.32468426)
transform = Transform3D(-0.52726996, -0.8121701, 0.24973288, 0.34432584, 0.06446422, 0.93663454, -0.77680516, 0.5798487, 0.24566111, -0.08871077, 1.1793221, 0.32737708)
bone_name = "mixamorigLeftHand"
bone_idx = 68
[node name="RightHand" type="BoneAttachment3D" parent="Pivot/Mesh/Node/Skeleton3D" unique_id=593252078]
transform = Transform3D(-0.1731301, 0.046542034, 0.9837976, 0.9369213, 0.31574342, 0.14994255, -0.30364984, 0.94770217, -0.09827159, -0.24295405, 1.1444879, 0.015566632)
transform = Transform3D(-0.17289613, 0.051788636, 0.98357654, 0.93714803, 0.31594095, 0.14809866, -0.30308312, 0.94736433, -0.10315942, -0.24378592, 1.1507742, 0.019104391)
bone_name = "mixamorigRightHand"
bone_idx = 14
@ -5888,7 +5884,7 @@ tip_bone = &"mixamorigRightHand_2"
override_tip_basis = false
[node name="Neck" type="BoneAttachment3D" parent="Pivot/Mesh/Node/Skeleton3D" unique_id=383704236]
transform = Transform3D(0.6067459, 0.0035521835, -0.7948879, 0.06277364, 0.9966528, 0.052369565, 0.79241323, -0.08167305, 0.604492, 0.029093198, 1.1837319, -0.031919427)
transform = Transform3D(0.59667295, 0.031716436, -0.8018576, 0.05412084, 0.9953532, 0.07964197, 0.8006574, -0.090917416, 0.5921839, 0.02361435, 1.1903718, -0.028223187)
bone_name = "mixamorigSpine1"
bone_idx = 4
@ -5925,7 +5921,7 @@ parameters/transition/transition_request = ""
parameters/transition/current_index = 0
[node name="Jetpack" type="Node3D" parent="Pivot" unique_id=2136871172 node_paths=PackedStringArray("input", "energy")]
transform = Transform3D(-0.251616, 0.148812, 1.06045, 0.0939164, 1.08821, -0.130422, -1.06672, 0.0607055, -0.261622, -0.1985025, -0.35181713, 0.17094094)
transform = Transform3D(-0.251616, 0.148812, 1.06045, 0.0939164, 1.08821, -0.130422, -1.06672, 0.0607055, -0.261622, -0.19693954, -0.3502971, 0.16531946)
script = ExtResource("17_fg2wu")
input = NodePath("../../InputSynchronizer")
energy = NodePath("../../Energy")

View file

@ -13,7 +13,7 @@
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
@icon("res://assets/icons/flag_holder.svg")
## This component is a unified system to manage [Flag] ownership, interaction
## This component is a unified system to manage [Flag] ownership, interaction
## logic, and visual displays for the owning Entity.
class_name FlagHolder extends Node3D
@ -26,7 +26,7 @@ class_name FlagHolder extends Node3D
## The flag mesh to display when the owner carries the flag
@onready var mesh: Node3D = $Mesh
## The reference to a [Flag] node, useful when [member Flag.state] is [member Flag.FlagState.TAKEN]
## The [Flag] instance to hold
var flag:Flag
func _process(_delta: float) -> void:
@ -34,60 +34,54 @@ func _process(_delta: float) -> void:
var time_elapsed: float = timer.wait_time - timer.time_left
texture_progress.value = time_elapsed / timer.wait_time * 100
## This method grabs a [Flag] which set the mesh visible, holds a reference to it
## This method grabs a [Flag] which set the mesh visible, holds a reference to it
## and emits the [Flag.grabbed] signal to handle further state changes
func grab(p_flag:Flag) -> void:
if p_flag.state < Flag.FlagState.TAKEN:
show()
flag = p_flag
flag.grabbed.emit(owner.peer_id)
@rpc("any_peer", "call_local", "reliable")
flag.grabbed.emit(self)
show()
func drop() -> void:
if multiplayer.is_server() and flag and flag.state == flag.FlagState.TAKEN:
flag.dropped.emit(owner.peer_id)
if owner:
# set flag mesh to face velocity
flag.global_position = owner.global_position
flag.global_position = global_position
flag.global_rotation.y = global_rotation.y
# inheritance
if owner is RigidBody3D:
flag.global_rotation.y = -flag.global_basis.z.dot(owner.linear_velocity)
# apply impulse to wake up the flag
flag.apply_impulse.call_deferred(flag.mass * owner.linear_velocity)
flag.dropped.emit(self)
flag = null
hide()
## This method send the throw input to the multiplayer authority while
## displaying a throw force progress on the [HUD] of the client.
## When the throw action is released (before an abort timeout) it will also
## send that input to the authority and stop displaying the throw force progress
## on the [HUD] of the client.
## This method displays throw force progress on the [HUD] of a client and upon release
## it throws the [Flag]. It has no effect when holding no flag or flag is [member Flag.FlagState.TAKEN]
func throw(pressed:bool) -> void:
prints("flag_holder._throw", owner.peer_id, multiplayer.get_unique_id(), pressed, flag)
if flag and flag.state == flag.FlagState.TAKEN:
if pressed:
timer.start()
texture_progress.visible = true
else:
if timer.is_stopped():
texture_progress.visible = false
return
var time_elapsed:float = timer.wait_time - timer.time_left
timer.stop()
texture_progress.visible = false
#if is_multiplayer_authority():
#var time_elapsed:float = timer.wait_time - timer.time_left
#var pumped_force:float = clampf(time_elapsed / timer.wait_time * throw_force, 6., throw_force)
#var throw_velocity:Vector3 = -owner.spring_arm.global_basis.z * pumped_force
#var total_velocity:Vector3 = owner.linear_velocity + throw_velocity
#
#flag.dropped.emit(owner.peer_id)
#
#var impulse:Vector3 = flag.mass * total_velocity
## set flag mesh to face velocity
#var aim_offset:Vector3 = -owner.spring_arm.global_basis.z
#aim_offset.y = 1. if aim_offset.y < 1. else aim_offset.y
#
#flag.global_position = owner.global_position + aim_offset
##flag.global_position = owner.global_position + -owner.spring_arm.global_basis.z
#flag.global_rotation.y = -flag.global_basis.z.dot(impulse)
## apply impulse to wake up the flag
#flag.apply_impulse.call_deferred(flag.mass * (owner.linear_velocity + throw_velocity))
#
#flag = null
#hide()
var pumped_force:float = clampf(time_elapsed / timer.wait_time * throw_force, 6., throw_force)
var throw_velocity:Vector3 = -global_basis.z * pumped_force
if owner:
flag.global_position = owner.global_position
flag.global_rotation.y = owner.camera.global_rotation.y
throw_velocity = -owner.camera.global_basis.z * pumped_force + owner.linear_velocity
else:
flag.global_position = global_position
flag.global_position.y = global_rotation.y
var impulse:Vector3 = flag.mass * throw_velocity
flag.apply_impulse.call_deferred(impulse)
hide()
flag.dropped.emit(self)
flag = null

View file

@ -12,7 +12,6 @@
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
@tool
## This class defines a Health component for entities.
class_name Health extends Area3D

View file

@ -37,7 +37,7 @@ func test_grab_flag() -> void:
_carry.grab(_subject)
assert_signal_emitted_with_parameters(_subject, 'grabbed', [_carry])
assert_eq(_subject.state, Flag.FlagState.TAKEN)
assert_eq(_subject.last_carrier, null)
assert_eq(_subject.last_carrier, _carry)
assert_false(_subject.is_visible())
func test_drop_flag() -> void:
@ -59,3 +59,16 @@ func test_grab_already_taken_flag() -> void:
_new_carry.grab(_subject)
assert_null(_new_carry.flag)
assert_eq(_carry.flag, _subject)
func test_flag_drop_position() -> void:
test_grab_flag()
_carry.global_position = Vector3(5., 0., 5.)
_carry.drop()
assert_eq(_subject.global_position, _carry.global_position)
func test_flag_throw_position() -> void:
test_grab_flag()
_carry.global_position = Vector3(5., 0., 5.)
_carry.throw(true)
_carry.throw(false)
assert_eq(_subject.global_position, _carry.global_position)

View file

@ -15,12 +15,12 @@
extends GutTest
var _subject:Health
const TEST_MAX_VALUE:int = 255
const HEALTH_MAX_VALUE:int = 255
func before_each() -> void:
_subject = Health.new()
watch_signals(_subject)
autoqfree(_subject)
autofree(_subject)
func test_that_it_has_max_health_when_ready() -> void:
assert_eq(_subject.value, _subject.max_value)
@ -28,23 +28,23 @@ func test_that_it_has_max_health_when_ready() -> void:
func test_that_it_takes_damage_from_opponent_team() -> void:
var amount:int = 42
_subject.damage(amount, -1)
assert_eq(_subject.value, TEST_MAX_VALUE - amount)
assert_eq(_subject.value, HEALTH_MAX_VALUE - amount)
func test_that_it_can_self_damage() -> void:
var amount:int = 42
_subject.damage(amount, 1)
assert_eq(_subject.value, TEST_MAX_VALUE - amount)
assert_eq(_subject.value, HEALTH_MAX_VALUE - amount)
func test_that_it_emits_health_changed_after_damage() -> void:
_subject.damage(42, -1)
assert_signal_emitted(_subject, 'changed')
func test_that_it_emits_signals_when_health_value_is_min_value() -> void:
_subject.damage(TEST_MAX_VALUE, -1)
_subject.damage(HEALTH_MAX_VALUE, -1)
assert_signal_emitted_with_parameters(_subject, 'killed', [-1])
assert_signal_emitted(_subject, 'exhausted')
func test_that_it_heals_fully() -> void:
_subject.value = 42
_subject.heal()
assert_eq(_subject.value, TEST_MAX_VALUE)
assert_eq(_subject.value, HEALTH_MAX_VALUE)