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);
        }
Exemple #2
0
        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);
        }
Exemple #4
0
        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);
        }