예제 #1
0
    // methods for: gravitizing rigidbodies //

    // method: gravitize all rigidbodies inside this gravity zone //
    protected override void gravitizeRigidbodiesInside()
    {
        base.gravitizeRigidbodiesInside();

        // if attraction is currently enabled: //
        if (attractionEnabled)
        {
            // gravitize each of the tracked rigidbodies to gravitize by the calculation of the attractive force according to its position – and for the player, multiply the force to apply by the player's current gravity modifier as determined by any active Gravity Multipliers //
            foreach (Rigidbody rigidbodyToGravitize in rigidbodiesToGravitize)
            {
                if (!rigidbodyToGravitize.handHolding())                                // so long as the rigidbody to gravitize is not currently held by a hand of the player
                {
                    // determine the curved attractive force to apply //
                    Vector3 forceToApply = curvedAttractiveForceForPosition(rigidbodyToGravitize.position);
                    if (rigidbodyToGravitize.GetComponentInParent <Player>())
                    {
                        forceToApply *= GravityMultiplier.currentGravityModifier();
                    }

                    // apply the attractive force //
                    rigidbodyToGravitize.velocity += (forceToApply * Time.fixedDeltaTime);
                }
            }
        }
    }
예제 #2
0
        public void WritePhysics(BitWriter writer)
        {
            if (writer.Flag(!GravityMultiplier.Equals(1) || !SpeedMultiplier.Equals(1)))
            {
                writer.Write(GravityMultiplier);
                writer.Write(SpeedMultiplier);
            }

            writer.WriteBit(true);
            writer.Write <float>(0);
            writer.WriteBit(false);

            writer.WriteBit(true);
            writer.WriteBit(false);

            writer.WriteBit(HasPosition);

            if (!HasPosition)
            {
                return;
            }

            writer.Write(Transform.Position);
            writer.Write(Transform.Rotation);

            writer.WriteBit(IsOnGround);
            writer.WriteBit(NegativeAngularVelocity);

            writer.WriteBit(HasVelocity);

            if (HasVelocity)
            {
                writer.Write(Velocity);
            }

            writer.WriteBit(HasAngularVelocity);

            if (HasAngularVelocity)
            {
                writer.Write(AngularVelocity);
            }

            var hasPlatform = Platform != null;

            writer.WriteBit(hasPlatform);

            if (!hasPlatform)
            {
                return;
            }

            writer.Write(Platform);

            writer.Write(PlatformPosition);

            writer.WriteBit(false);
        }
예제 #3
0
 // upon being enabled: //
 private void OnEnable()
 {
     // connect to the corresponding instance of this class //
     if (leftInstance)
     {
         left = this;
     }
     else
     {
         right = this;
     }
 }
예제 #4
0
    // methods for: gravitizing rigidbodies //

    // method: gravitize all rigidbodies inside this gravity zone //
    protected virtual void gravitizeRigidbodiesInside()
    {
        // gravitize each of the tracked rigidbodies to gravitize by the force vector setting – and for the player, multiply the force to apply by the player's current gravity modifier as determined by any active Gravity Multipliers //
        foreach (Rigidbody rigidbodyToGravitize in rigidbodiesToGravitize)
        {
            if (!rigidbodyToGravitize.handHolding())                   // so long as the rigidbody to gravitize is not currently held by a hand of the player
            {
                Vector3 forceToApply = gravitationForce;
                if (rigidbodyToGravitize.GetComponentInParent <Player>())
                {
                    forceToApply *= GravityMultiplier.currentGravityModifier();
                }

                rigidbodyToGravitize.velocity += (forceToApply * Time.fixedDeltaTime);
            }
        }
    }
예제 #5
0
        /// <summary>
        /// Creates the Serialize packet for the replica component.
        /// </summary>
        /// <returns>The Serialize packet for the replica component.</returns>
        public override ControllablePhysicsSerialization GetSerializePacket()
        {
            var packet = base.GetSerializePacket();

            packet.HasSpeedOrGravityMultiplier = (!GravityMultiplier.Equals(1) || !SpeedMultiplier.Equals(1));
            packet.UnknownFlag1 = true;
            packet.UnknownUint1 = 0;
            packet.UnknownFlag2 = false;
            packet.UnknownFlag3 = true;
            packet.UnknownFlag4 = false;
            packet.Position     = Transform.Position;
            packet.Rotation     = Transform.Rotation;
            packet.IsOnRail     = NegativeAngularVelocity;
            packet.HasPlatform  = (Platform != null);
            packet.UnknownFlag6 = false;
            packet.UnknownFlag7 = false;
            return(packet);
        }
예제 #6
0
 // method: determine whether the player is within spherical gravity zonage that is actually enabled to gravitize the player with a nonzero force //
 public static bool playerWithinNonzerolyAffectingZonageSphere()
 {
     if (!playerWithinZonage || (GravityMultiplier.currentGravityModifier() == 0f))
     {
         return(false);
     }
     else
     {
         foreach (Collider playerCollidingGravityZoneCollider in playerCollidingGravityZoneColliders)
         {
             GravityZone playerCollidingGravityZone = playerCollidingGravityZoneCollider.GetComponent <GravityZone>();
             if (playerCollidingGravityZone.gravitizingEnabled && playerCollidingGravityZone.gravitizeRigidbodies && (playerCollidingGravityZone.gravitationForce != FloatsVector.zeroes) && playerCollidingGravityZoneCollider.GetComponent <GravityZoneSphere>())
             {
                 return(true);
             }
         }
         return(false);
     }
 }
예제 #7
0
 // method: determine whether the player is within box gravity zonage that is actually enabled to gravitize the player //
 public static bool playerWithinAffectingZonageBox()
 {
     if (!playerWithinZonage || (GravityMultiplier.currentGravityModifier() == 0f))
     {
         return(false);
     }
     else
     {
         foreach (Collider playerCollidingGravityZoneCollider in playerCollidingGravityZoneColliders)
         {
             GravityZone playerCollidingGravityZone = playerCollidingGravityZoneCollider.GetComponent <GravityZone>();
             if (playerCollidingGravityZone.gravitizingEnabled && playerCollidingGravityZone.gravitizeRigidbodies && playerCollidingGravityZoneCollider.GetComponent <GravityZoneBox>())
             {
                 return(true);
             }
         }
         return(false);
     }
 }
예제 #8
0
        /// <summary>
        /// Creates the Construct packet for the replica component.
        /// </summary>
        /// <returns>The Construct packet for the replica component.</returns>
        public override ControllablePhysicsConstruct GetConstructPacket()
        {
            var packet = base.GetConstructPacket();

            packet.HasJetpackEffect            = (JetpackEffectId != 0);
            packet.BypassFlyingChecks          = false;
            packet.UnknownFlag1                = true;
            packet.HasSpeedOrGravityMultiplier = (!GravityMultiplier.Equals(1) || !SpeedMultiplier.Equals(1));
            packet.UnknownFlag2                = true;
            packet.UnknownUint8                = 0;
            packet.UnknownFlag3                = false;
            packet.UnknownFlag4                = true;
            packet.UnknownFlag5                = false;
            packet.Position     = Transform.Position;
            packet.Rotation     = Transform.Rotation;
            packet.IsOnRail     = NegativeAngularVelocity;
            packet.HasPlatform  = (Platform != null);
            packet.UnknownFlag7 = false;
            return(packet);
        }
예제 #9
0
 // method: change the primary gravity modifier to the given modifier for the given Gravity Multiplier //
 public void changeModifierPrimary_(GravityMultiplier gravityMultiplier, float modifier)
 {
     changeModifierPrimary(gravityMultiplier, modifier);
 }
예제 #10
0
 // method: change the primary gravity modifier to the given modifier for the given Gravity Multiplier //
 public static void changeModifierPrimary(GravityMultiplier gravityMultiplier, float modifier)
 {
     gravityMultiplier.changeModifierPrimary(modifier);
 }
예제 #11
0
 // method: toggle alternation for the given Gravity Multiplier, optionally playing the alternating audio //
 public void toggleAlternation_(GravityMultiplier gravityMultiplier, bool playAudio)
 {
     toggleAlternation(gravityMultiplier, playAudio);
 }
예제 #12
0
 // method: toggle alternation for the given Gravity Multiplier, optionally playing the alternating audio //
 public static void toggleAlternation(GravityMultiplier gravityMultiplier, bool playAudio)
 {
     gravityMultiplier.toggleAlternation(playAudio);
 }
예제 #13
0
 // method: change alternation to the given boolean for the given Gravity Multiplier, optionally playing the alternating audio //
 public void changeAlternation_(GravityMultiplier gravityMultiplier, bool boolean, bool playAudio)
 {
     changeAlternation(gravityMultiplier, boolean, playAudio);
 }
예제 #14
0
 // method: change alternation to the given boolean for the given Gravity Multiplier, optionally playing the alternating audio //
 public static void changeAlternation(GravityMultiplier gravityMultiplier, bool boolean, bool playAudio)
 {
     gravityMultiplier.changeAlternation(boolean, playAudio);
 }
예제 #15
0
 // method: change the alternate gravity modifier to the given modifier for the given Gravity Multiplier //
 public void changeModifierAlternate_(GravityMultiplier gravityMultiplier, float modifier)
 {
     changeModifierAlternate(gravityMultiplier, modifier);
 }
예제 #16
0
 // method: change the alternate gravity modifier to the given modifier for the given Gravity Multiplier //
 public static void changeModifierAlternate(GravityMultiplier gravityMultiplier, float modifier)
 {
     gravityMultiplier.changeModifierAlternate(modifier);
 }