コード例 #1
0
 private void HandleRemove(EntityUid uid, CollisionWakeComponent component, ComponentRemove args)
 {
     if (!Terminating(uid) && TryComp(uid, out PhysicsComponent? physics))
     {
         physics.CanCollide = true;
     }
 }
コード例 #2
0
 private void HandleCollisionWakeState(EntityUid uid, CollisionWakeComponent component, CollisionWakeStateMessage args)
 {
     if (ComponentManager.TryGetComponent <IPhysBody>(uid, out var body))
     {
         body.CanCollide = !component.Enabled || body.Awake;
     }
 }
コード例 #3
0
 private void HandleJointAdd(EntityUid uid, CollisionWakeComponent component, JointAddedEvent args)
 {
     if (!ComponentManager.TryGetComponent(uid, out PhysicsComponent body))
     {
         return;
     }
     body.CanCollide = true;
 }
コード例 #4
0
        private void HandleCollisionWakeState(EntityUid uid, CollisionWakeComponent component, CollisionWakeStateMessage args)
        {
            if (!ComponentManager.TryGetComponent <PhysicsComponent>(uid, out var body))
            {
                return;
            }

            body.CanCollide = !component.Enabled || body.Awake || body.Joints.Any();
        }
コード例 #5
0
        private void HandleSleep(EntityUid uid, CollisionWakeComponent component, PhysicsSleepMessage args)
        {
            if (!component.Enabled)
            {
                return;
            }

            args.Body.CanCollide = false;
        }
コード例 #6
0
        private void HandleWake(EntityUid uid, CollisionWakeComponent component, PhysicsWakeMessage args)
        {
            if (!component.Enabled)
            {
                return;
            }

            args.Body.CanCollide = true;
        }
コード例 #7
0
        private void HandleSleep(EntityUid uid, CollisionWakeComponent component, PhysicsSleepMessage args)
        {
            if (!CanRaiseEvent(uid))
            {
                return;
            }

            component.RaiseStateChange();
        }
コード例 #8
0
        private void HandleJointRemove(EntityUid uid, CollisionWakeComponent component, JointRemovedEvent args)
        {
            if (!CanRaiseEvent(uid))
            {
                return;
            }

            component.RaiseStateChange();
        }
コード例 #9
0
        private void HandleParentChange(EntityUid uid, CollisionWakeComponent component, ref EntParentChangedMessage args)
        {
            if (!CanRaiseEvent(uid))
            {
                return;
            }

            component.RaiseStateChange();
        }
コード例 #10
0
        private void HandleJointRemove(EntityUid uid, CollisionWakeComponent component, JointRemovedEvent args)
        {
            if (component.Owner.TryGetComponent(out PhysicsComponent? body) && body.Joints.Any())
            {
                return;
            }

            // Force an update
            component.RaiseStateChange();
        }
コード例 #11
0
        private void HandleCollisionWakeState(EntityUid uid, CollisionWakeComponent component, CollisionWakeStateMessage args)
        {
            // If you really wanted you could optimise for each use case above and save some calls but
            // these are called pretty infrequently so I'm fine with this for now.

            // If we just got put into a container don't want to mess with our collision state.
            if (!EntityManager.TryGetComponent <PhysicsComponent>(uid, out var body))
            {
                return;
            }

            // If we're attached to the map we'll also just never disable collision due to how grid movement works.
            body.CanCollide = !component.Enabled ||
                              body.Awake ||
                              (EntityManager.TryGetComponent(uid, out JointComponent? jointComponent) && jointComponent.JointCount > 0) ||
                              EntityManager.GetComponent <TransformComponent>(uid).GridID == GridId.Invalid;
        }
コード例 #12
0
 private void HandleInitialize(EntityUid uid, CollisionWakeComponent component, EntityInitializedMessage args)
 {
     component.RaiseStateChange();
 }
コード例 #13
0
 private void HandleWake(EntityUid uid, CollisionWakeComponent component, PhysicsWakeMessage args)
 {
     component.RaiseStateChange();
 }
コード例 #14
0
 private void HandleJointAdd(EntityUid uid, CollisionWakeComponent component, JointAddedEvent args)
 {
     component.RaiseStateChange();
 }
コード例 #15
0
 private void HandleParentChange(EntityUid uid, CollisionWakeComponent component, ref EntParentChangedMessage args)
 {
     component.RaiseStateChange();
 }