public void LandComponent(ThrownItemComponent thrownItem) { if (thrownItem.Deleted || Deleted(thrownItem.Owner) || _containerSystem.IsEntityInContainer(thrownItem.Owner)) { return; } var landing = thrownItem.Owner; // Unfortunately we can't check for hands containers as they have specific names. if (thrownItem.Owner.TryGetContainerMan(out var containerManager) && EntityManager.HasComponent <SharedHandsComponent>(containerManager.Owner)) { EntityManager.RemoveComponent(landing, thrownItem); return; } // Assume it's uninteresting if it has no thrower. For now anyway. if (thrownItem.Thrower is not null) { _adminLogger.Add(LogType.Landed, LogImpact.Low, $"{ToPrettyString(landing):entity} thrown by {ToPrettyString(thrownItem.Thrower.Value):thrower} landed."); } var landMsg = new LandEvent { User = thrownItem.Thrower }; RaiseLocalEvent(landing, landMsg, false); }
private void LandItem(EntityUid uid, ThrownItemComponent component, LandEvent args) { if (!component.Owner.TryGetComponent(out PhysicsComponent? physicsComponent)) { return; } var fixture = physicsComponent.GetFixture(ThrowingFixture); if (fixture == null) { return; } _broadphaseSystem.DestroyFixture(physicsComponent, fixture); }
public void LandComponent(ThrownItemComponent thrownItem) { if (thrownItem.Deleted || thrownItem.Owner.Deleted || _containerSystem.IsEntityInContainer(thrownItem.Owner.Uid)) { return; } var landing = thrownItem.Owner; // Unfortunately we can't check for hands containers as they have specific names. if (thrownItem.Owner.TryGetContainerMan(out var containerManager) && containerManager.Owner.HasComponent <SharedHandsComponent>()) { EntityManager.RemoveComponent(landing.Uid, thrownItem); return; } var landMsg = new LandEvent { User = thrownItem.Thrower?.Uid }; RaiseLocalEvent(landing.Uid, landMsg, false); }
private void LandComponent(ThrownItemComponent thrownItem) { if (thrownItem.Owner.Deleted) { return; } var user = thrownItem.Thrower; var landing = thrownItem.Owner; var coordinates = landing.Transform.Coordinates; // LandInteraction // TODO: Refactor these to system messages var landMsg = new LandEvent(user, landing, coordinates); RaiseLocalEvent(landing.Uid, landMsg); if (landMsg.Handled) { return; } var comps = landing.GetAllComponents <ILand>().ToArray(); var landArgs = new LandEventArgs(user, coordinates); // Call Land on all components that implement the interface foreach (var comp in comps) { if (landing.Deleted) { break; } comp.Land(landArgs); } ComponentManager.RemoveComponent(landing.Uid, thrownItem); }