mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
Fix / remove startcollidevent worldpoint (#5936)
Now it's worldpoints because it may not necessarily be 1 pointr and internally we fix the actual points themselves.
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
using System.Numerics;
|
||||
using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Maths;
|
||||
using Robust.Shared.Physics.Components;
|
||||
using Robust.Shared.Physics.Dynamics;
|
||||
using Robust.Shared.Utility;
|
||||
|
||||
namespace Robust.Shared.Physics.Events;
|
||||
|
||||
@@ -20,9 +20,13 @@ public readonly struct StartCollideEvent
|
||||
|
||||
public readonly Fixture OurFixture;
|
||||
public readonly Fixture OtherFixture;
|
||||
public readonly Vector2 WorldPoint;
|
||||
|
||||
public StartCollideEvent(
|
||||
internal readonly FixedArray2<Vector2> _worldPoints;
|
||||
|
||||
public readonly int PointCount;
|
||||
public Vector2[] WorldPoints => _worldPoints.AsSpan[..PointCount].ToArray();
|
||||
|
||||
internal StartCollideEvent(
|
||||
EntityUid ourEntity,
|
||||
EntityUid otherEntity,
|
||||
string ourFixtureId,
|
||||
@@ -31,7 +35,8 @@ public readonly struct StartCollideEvent
|
||||
Fixture otherFixture,
|
||||
PhysicsComponent ourBody,
|
||||
PhysicsComponent otherBody,
|
||||
Vector2 worldPoint)
|
||||
FixedArray2<Vector2> worldPoints,
|
||||
int pointCount)
|
||||
{
|
||||
OurEntity = ourEntity;
|
||||
OtherEntity = otherEntity;
|
||||
@@ -39,8 +44,9 @@ public readonly struct StartCollideEvent
|
||||
OtherFixtureId = otherFixtureId;
|
||||
OurFixture = ourFixture;
|
||||
OtherFixture = otherFixture;
|
||||
WorldPoint = worldPoint;
|
||||
OtherBody = otherBody;
|
||||
OurBody = ourBody;
|
||||
_worldPoints = worldPoints;
|
||||
PointCount = pointCount;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -551,7 +551,7 @@ public abstract partial class SharedPhysicsSystem
|
||||
}
|
||||
|
||||
var status = ArrayPool<ContactStatus>.Shared.Rent(index);
|
||||
var worldPoints = ArrayPool<Vector2>.Shared.Rent(index);
|
||||
var worldPoints = ArrayPool<FixedArray2<Vector2>>.Shared.Rent(index);
|
||||
|
||||
// Update contacts all at once.
|
||||
BuildManifolds(contacts, index, status, worldPoints);
|
||||
@@ -587,8 +587,8 @@ public abstract partial class SharedPhysicsSystem
|
||||
var uidB = contact.EntityB;
|
||||
var worldPoint = worldPoints[i];
|
||||
|
||||
var ev1 = new StartCollideEvent(uidA, uidB, contact.FixtureAId, contact.FixtureBId, fixtureA, fixtureB, bodyA, bodyB, worldPoint);
|
||||
var ev2 = new StartCollideEvent(uidB, uidA, contact.FixtureBId, contact.FixtureAId, fixtureB, fixtureA, bodyB, bodyA, worldPoint);
|
||||
var ev1 = new StartCollideEvent(uidA, uidB, contact.FixtureAId, contact.FixtureBId, fixtureA, fixtureB, bodyA, bodyB, worldPoint, contact.Manifold.PointCount);
|
||||
var ev2 = new StartCollideEvent(uidB, uidA, contact.FixtureBId, contact.FixtureAId, fixtureB, fixtureA, bodyB, bodyA, worldPoint, contact.Manifold.PointCount);
|
||||
|
||||
RaiseLocalEvent(uidA, ref ev1, true);
|
||||
RaiseLocalEvent(uidB, ref ev2, true);
|
||||
@@ -626,10 +626,10 @@ public abstract partial class SharedPhysicsSystem
|
||||
|
||||
ArrayPool<Contact>.Shared.Return(contacts);
|
||||
ArrayPool<ContactStatus>.Shared.Return(status);
|
||||
ArrayPool<Vector2>.Shared.Return(worldPoints);
|
||||
ArrayPool<FixedArray2<Vector2>>.Shared.Return(worldPoints);
|
||||
}
|
||||
|
||||
private void BuildManifolds(Contact[] contacts, int count, ContactStatus[] status, Vector2[] worldPoints)
|
||||
private void BuildManifolds(Contact[] contacts, int count, ContactStatus[] status, FixedArray2<Vector2>[] worldPoints)
|
||||
{
|
||||
if (count == 0)
|
||||
return;
|
||||
@@ -672,7 +672,7 @@ public abstract partial class SharedPhysicsSystem
|
||||
|
||||
public Contact[] Contacts;
|
||||
public ContactStatus[] Status;
|
||||
public Vector2[] WorldPoints;
|
||||
public FixedArray2<Vector2>[] WorldPoints;
|
||||
public bool[] Wake;
|
||||
|
||||
public void Execute(int index)
|
||||
@@ -681,7 +681,7 @@ public abstract partial class SharedPhysicsSystem
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateContact(Contact[] contacts, int index, ContactStatus[] status, bool[] wake, Vector2[] worldPoints)
|
||||
private void UpdateContact(Contact[] contacts, int index, ContactStatus[] status, bool[] wake, FixedArray2<Vector2>[] worldPoints)
|
||||
{
|
||||
var contact = contacts[index];
|
||||
|
||||
@@ -706,7 +706,9 @@ public abstract partial class SharedPhysicsSystem
|
||||
|
||||
if (contactStatus == ContactStatus.StartTouching)
|
||||
{
|
||||
worldPoints[index] = Physics.Transform.Mul(bodyATransform, contacts[index].Manifold.LocalPoint);
|
||||
var points = new FixedArray2<Vector2>();
|
||||
contact.GetWorldManifold(bodyATransform, bodyBTransform, out _, points.AsSpan);
|
||||
worldPoints[index] = points;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user