コード例 #1
0
        /// <summary>
        ///     Used for weightlessness to determine if we are near a wall.
        /// </summary>
        /// <param name="broadPhaseSystem"></param>
        /// <param name="transform"></param>
        /// <param name="mover"></param>
        /// <param name="collider"></param>
        /// <returns></returns>
        public static bool IsAroundCollider(SharedBroadPhaseSystem broadPhaseSystem, ITransformComponent transform, IMobMoverComponent mover, IPhysBody collider)
        {
            var enlargedAABB = collider.GetWorldAABB().Enlarged(mover.GrabRange);

            foreach (var otherCollider in broadPhaseSystem.GetCollidingEntities(transform.MapID, enlargedAABB))
            {
                if (otherCollider == collider)
                {
                    continue;                            // Don't try to push off of yourself!
                }
                // Only allow pushing off of anchored things that have collision.
                if (otherCollider.BodyType != BodyType.Static ||
                    !otherCollider.CanCollide ||
                    ((collider.CollisionMask & otherCollider.CollisionLayer) == 0 &&
                     (otherCollider.CollisionMask & collider.CollisionLayer) == 0) ||
                    (otherCollider.Owner.TryGetComponent(out SharedPullableComponent? pullable) && pullable.BeingPulled))
                {
                    continue;
                }

                return(true);
            }

            return(false);
        }
コード例 #2
0
 public static bool UseMobMovement(SharedBroadPhaseSystem broadPhaseSystem, PhysicsComponent body, IMapManager mapManager)
 {
     return((body.BodyStatus == BodyStatus.OnGround) &
            body.Owner.HasComponent <IMobStateComponent>() &&
            EntitySystem.Get <ActionBlockerSystem>().CanMove(body.Owner) &&
            (!body.Owner.IsWeightless(body, mapManager: mapManager) ||
             body.Owner.TryGetComponent(out SharedPlayerMobMoverComponent? mover) &&
             IsAroundCollider(broadPhaseSystem, body.Owner.Transform, mover, body)));
 }
コード例 #3
0
        public override void Initialize()
        {
            base.Initialize();
            _broadPhaseSystem = EntitySystem.Get <SharedBroadPhaseSystem>();

            _frictionModifier = _configManager.GetCVar(CCVars.TileFrictionModifier);
            _configManager.OnValueChanged(CCVars.TileFrictionModifier, value => _frictionModifier = value);

            _stopSpeed = _configManager.GetCVar(CCVars.StopSpeed);
            _configManager.OnValueChanged(CCVars.StopSpeed, value => _stopSpeed = value);
        }
コード例 #4
0
 public override void Initialize()
 {
     base.Initialize();
     _broadPhaseSystem = EntitySystem.Get <SharedBroadPhaseSystem>();
 }