private void ThrowItem(EntityUid uid, ThrownItemComponent component, ThrownEvent args) { if (!EntityManager.TryGetComponent(component.Owner, out FixturesComponent? fixturesComponent) || fixturesComponent.Fixtures.Count != 1) { return; } if (!EntityManager.TryGetComponent(component.Owner, out PhysicsComponent? physicsComponent)) { return; } if (fixturesComponent.Fixtures.ContainsKey(ThrowingFixture)) { Logger.Error($"Found existing throwing fixture on {component.Owner}"); return; } var fixture = fixturesComponent.Fixtures.Values.First(); var shape = fixture.Shape; var throwingFixture = new Fixture(physicsComponent, shape) { CollisionMask = (int)CollisionGroup.ThrownItem, Hard = false, ID = ThrowingFixture }; _fixtures.TryCreateFixture(physicsComponent, throwingFixture, manager: fixturesComponent); }
private void ThrowItem(EntityUid uid, ThrownItemComponent component, ThrownEvent args) { if (!component.Owner.TryGetComponent(out PhysicsComponent? physicsComponent) || physicsComponent.Fixtures.Count != 1) { return; } if (physicsComponent.GetFixture(ThrowingFixture) != null) { Logger.Error($"Found existing throwing fixture on {component.Owner}"); return; } var shape = physicsComponent.Fixtures[0].Shape; _broadphaseSystem.CreateFixture(physicsComponent, new Fixture(physicsComponent, shape) { CollisionLayer = (int)CollisionGroup.ThrownItem, Hard = false, ID = ThrowingFixture }); }