dash indicators
All checks were successful
Create tag and build when new code gets to main / BumpTag (push) Successful in 12s
Create tag and build when new code gets to main / Export (push) Successful in 8m25s

This commit is contained in:
2025-10-17 16:53:23 +02:00
parent 417d9f5a6b
commit 70e3f70bcc
9 changed files with 307 additions and 39 deletions

View File

@@ -6,6 +6,12 @@ namespace Movementtests.systems;
public partial class WeaponSystem : RigidBody3D
{
[Signal]
public delegate void WeaponThrownEventHandler();
[Signal]
public delegate void WeaponRetrievedEventHandler();
[Export(PropertyHint.Range, "0,100,1,or_greater")]
public float ThrowForce { get; set; } = 1f;
[Export(PropertyHint.Range, "0,0.2,0.01,or_greater")]
@@ -26,6 +32,11 @@ public partial class WeaponSystem : RigidBody3D
private Vector3 _throwDirection;
public Vector3 PlantLocation { get; set; }
public Vector3 PlantNormal { get; set; }
public MeshInstance3D WeaponLocationIndicator { get; set; }
public StandardMaterial3D WeaponLocationIndicatorMaterial { get; set; }
public MeshInstance3D WeaponMesh { get; set; }
public StandardMaterial3D WeaponMaterial { get; set; }
public void Init(Node3D head, Camera3D camera)
{
@@ -36,6 +47,13 @@ public partial class WeaponSystem : RigidBody3D
InHandState = StateChartState.Of(GetNode("StateChart/Root/InHand"));
FlyingState = StateChartState.Of(GetNode("StateChart/Root/Flying"));
PlantedState = StateChartState.Of(GetNode("StateChart/Root/Planted"));
WeaponLocationIndicator = GetNode<MeshInstance3D>("WeaponLocationIndicator");
WeaponLocationIndicator.Visible = false;
WeaponLocationIndicatorMaterial = WeaponLocationIndicator.GetActiveMaterial(0) as StandardMaterial3D;
WeaponMesh = GetNode<MeshInstance3D>("Weapon");
WeaponMaterial = WeaponMesh.GetActiveMaterial(0) as StandardMaterial3D;
_tweenQueueSystem = GetNode<TweenQueueSystem>("TweenQueueSystem");
_tweenQueueSystem.Init(this);
@@ -44,11 +62,30 @@ public partial class WeaponSystem : RigidBody3D
Freeze = true;
BodyEntered += OnThrownWeaponReachesGround;
InHandState.StateExited += WeaponLeft;
InHandState.StateEntered += WeaponBack;
}
public void WeaponLeft()
{
WeaponLocationIndicator.Visible = true;
WeaponMaterial!.UseFovOverride = false;
EmitSignalWeaponThrown();
}
public void WeaponBack()
{
WeaponLocationIndicator.Visible = false;
WeaponMaterial!.UseFovOverride = true;
EmitSignalWeaponRetrieved();
}
public void ThrowWeapon(Vector3 end, bool hasHit, Vector3 collisionLocation, Vector3 collisionNormal)
{
_weaponState.SendEvent("throw");
WeaponLocationIndicatorMaterial.StencilColor = new Color(1f, 1f, 1f);
_throwDirection = (end - GlobalPosition).Normalized();
PlantLocation = collisionLocation;
@@ -71,6 +108,9 @@ public partial class WeaponSystem : RigidBody3D
public void PlantWeaponInWall()
{
_weaponState.SendEvent("plant");
WeaponLocationIndicatorMaterial.StencilColor = new Color(1f, 0.2f, 0.2f);
Freeze = true;
GlobalPosition = PlantLocation;
LookAt(GlobalTransform.Origin + PlantNormal, Vector3.Up, true);

View File

@@ -1,4 +1,4 @@
[gd_scene load_steps=10 format=3 uid="uid://ckm3d6k08a72u"]
[gd_scene load_steps=13 format=3 uid="uid://ckm3d6k08a72u"]
[ext_resource type="Script" uid="uid://iii3wfto4t5b" path="res://systems/weapon/WeaponSystem.cs" id="1_csqwk"]
[ext_resource type="PackedScene" uid="uid://dbe5f0p6lvqtr" path="res://systems/tween_queue/tween_queue_system.tscn" id="2_x1nha"]
@@ -23,6 +23,29 @@ top_radius = 0.0
bottom_radius = 0.05
height = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_svc06"]
render_priority = 1
transparency = 1
no_depth_test = true
shading_mode = 0
stencil_mode = 3
stencil_flags = 1
stencil_compare = 5
metadata/_stencil_owned = true
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_m0v1h"]
next_pass = SubResource("StandardMaterial3D_svc06")
transparency = 1
albedo_color = Color(1, 1, 1, 0)
z_clip_scale = 0.1
stencil_mode = 2
stencil_flags = 2
stencil_color = Color(1, 1, 1, 1)
stencil_outline_thickness = 0.1
[sub_resource type="SphereMesh" id="SphereMesh_jpdh0"]
material = SubResource("StandardMaterial3D_m0v1h")
[node name="Weapon" type="RigidBody3D"]
collision_layer = 4
collision_mask = 2
@@ -37,7 +60,7 @@ script = ExtResource("1_csqwk")
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0)
shape = SubResource("CylinderShape3D_avini")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
[node name="Weapon" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0)
mesh = SubResource("CylinderMesh_x1nha")
@@ -81,3 +104,6 @@ script = ExtResource("6_jpdh0")
to = NodePath("../../InHand")
event = &"recover"
delay_in_seconds = "0.0"
[node name="WeaponLocationIndicator" type="MeshInstance3D" parent="."]
mesh = SubResource("SphereMesh_jpdh0")