Fixes hitscan weapons not respecting reflectTypes (#34203)

* removes otherwise unused events that broke reflectType

* that last one broke everything. this actually fixes it

* minor cleanup

* move some stuff around for optimisation

---------

Co-authored-by: Ruddygreat <ruddygreat1@gmail.com>
This commit is contained in:
ruddygreat
2025-04-13 12:42:03 +01:00
committed by GitHub
parent 555c0d3437
commit f61bbebb7f

View File

@@ -62,7 +62,7 @@ public sealed class ReflectSystem : EntitySystem
foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET)) foreach (var ent in _inventorySystem.GetHandOrInventoryEntities(uid, SlotFlags.All & ~SlotFlags.POCKET))
{ {
if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, out var dir)) if (!TryReflectHitscan(uid, ent, args.Shooter, args.SourceItem, args.Direction, args.Reflective, out var dir))
continue; continue;
args.Direction = dir.Value; args.Direction = dir.Value;
@@ -95,9 +95,9 @@ public sealed class ReflectSystem : EntitySystem
private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid projectile, ProjectileComponent? projectileComp = null, ReflectComponent? reflect = null) private bool TryReflectProjectile(EntityUid user, EntityUid reflector, EntityUid projectile, ProjectileComponent? projectileComp = null, ReflectComponent? reflect = null)
{ {
if (!Resolve(reflector, ref reflect, false) || if (!Resolve(reflector, ref reflect, false) ||
!_toggle.IsActivated(reflector) ||
!TryComp<ReflectiveComponent>(projectile, out var reflective) || !TryComp<ReflectiveComponent>(projectile, out var reflective) ||
(reflect.Reflects & reflective.Reflective) == 0x0 || (reflect.Reflects & reflective.Reflective) == 0x0 ||
!_toggle.IsActivated(reflector) ||
!_random.Prob(reflect.ReflectProb) || !_random.Prob(reflect.ReflectProb) ||
!TryComp<PhysicsComponent>(projectile, out var physics)) !TryComp<PhysicsComponent>(projectile, out var physics))
{ {
@@ -142,13 +142,12 @@ public sealed class ReflectSystem : EntitySystem
private void OnReflectHitscan(EntityUid uid, ReflectComponent component, ref HitScanReflectAttemptEvent args) private void OnReflectHitscan(EntityUid uid, ReflectComponent component, ref HitScanReflectAttemptEvent args)
{ {
if (args.Reflected || if (args.Reflected)
(component.Reflects & args.Reflective) == 0x0)
{ {
return; return;
} }
if (TryReflectHitscan(uid, uid, args.Shooter, args.SourceItem, args.Direction, out var dir)) if (TryReflectHitscan(uid, uid, args.Shooter, args.SourceItem, args.Direction, args.Reflective, out var dir))
{ {
args.Direction = dir.Value; args.Direction = dir.Value;
args.Reflected = true; args.Reflected = true;
@@ -161,9 +160,11 @@ public sealed class ReflectSystem : EntitySystem
EntityUid? shooter, EntityUid? shooter,
EntityUid shotSource, EntityUid shotSource,
Vector2 direction, Vector2 direction,
ReflectType hitscanReflectType,
[NotNullWhen(true)] out Vector2? newDirection) [NotNullWhen(true)] out Vector2? newDirection)
{ {
if (!TryComp<ReflectComponent>(reflector, out var reflect) || if (!TryComp<ReflectComponent>(reflector, out var reflect) ||
(reflect.Reflects & hitscanReflectType) == 0x0 ||
!_toggle.IsActivated(reflector) || !_toggle.IsActivated(reflector) ||
!_random.Prob(reflect.ReflectProb)) !_random.Prob(reflect.ReflectProb))
{ {