コード例 #1
0
ファイル: KartMovement.cs プロジェクト: Hennns/FormulaOne
 public void ExitSand()
 {
     if (sandCounter == 1)
     {
         this.RemoveKartModifier(sandModifier);
         sandModifier = null;
     }
     sandCounter--;
 }
コード例 #2
0
ファイル: KartMovement.cs プロジェクト: xuhas/nlx
        /// <summary>
        /// Changes the velocity of the kart and processes collisions based on the velocity of the kart.
        /// </summary>
        Vector3 ProcessVelocityCollisions(float deltaTime, Quaternion rotationStream, Vector3 penetrationOffset)
        {
            Vector3 rayDirection  = m_Velocity * deltaTime + penetrationOffset;
            float   rayLength     = rayDirection.magnitude + .2f;
            Ray     sphereCastRay = new Ray(m_RigidbodyPosition, rayDirection);
            int     hits          = Physics.SphereCastNonAlloc(sphereCastRay, 0.75f, m_RaycastHitBuffer, rayLength, allCollidingLayers, QueryTriggerInteraction.Collide);

            for (int i = 0; i < hits; i++)
            {
                if (m_RaycastHitBuffer[i].collider == m_Capsule)
                {
                    continue;
                }


                IKartModifier kartModifier = m_RaycastHitBuffer[i].collider.GetComponent <IKartModifier> ();
                if (kartModifier != null)
                {
                    m_CurrentModifiers.Add(kartModifier);
                    m_TempModifiers.Add(kartModifier);
                }

                IKartCollider kartCollider = m_RaycastHitBuffer[i].collider.GetComponent <IKartCollider> ();
                if (Mathf.Approximately(m_RaycastHitBuffer[i].distance, 0f))
                {
                    if (Physics.Raycast(m_RigidbodyPosition, rotationStream * Vector3.down, out RaycastHit hit, rayLength + 0.5f, allCollidingLayers, QueryTriggerInteraction.Collide))
                    {
                        m_RaycastHitBuffer[i] = hit;
                    }
                }

                if (kartCollider != null)
                {
                    m_Velocity = kartCollider.ModifyVelocity(this, m_RaycastHitBuffer[i]);

                    if (Mathf.Abs(Vector3.Dot(m_RaycastHitBuffer[i].normal, Vector3.up)) <= .2f)
                    {
                        OnKartCollision.Invoke();
                    }
                }
                else
                {
                    penetrationOffset = ComputePenetrationOffset(rotationStream, penetrationOffset);
                }
            }

            return(penetrationOffset);
        }
コード例 #3
0
ファイル: KartMovement.cs プロジェクト: Hennns/FormulaOne
        public void EnterSand(IKartModifier sand)
        {
            if (sandModifier != null)
            {
                this.RemoveKartModifier(sandModifier);
            }

            sandModifier = sand;
            this.AddKartModifier(sandModifier);

            if (sandCounter == 0)
            {
                this.StartCoroutine(SpeedReducer());
            }

            sandCounter++;
        }
コード例 #4
0
ファイル: KartMovement.cs プロジェクト: xuhas/nlx
 /// <summary>
 /// This removes a previously added modifier to the karts stats.  This might be something like a speed boost that has just run out.
 /// </summary>
 /// <param name="kartModifier"></param>
 public void RemoveKartModifier(IKartModifier kartModifier)
 {
     m_CurrentModifiers.Remove(kartModifier);
 }
コード例 #5
0
ファイル: KartMovement.cs プロジェクト: xuhas/nlx
 /// <summary>
 /// This adds a modifier to the karts stats.  This might be something like a speed boost pickup being activated.
 /// </summary>
 /// <param name="kartModifier">The modifier to the kart's stats.</param>
 public void AddKartModifier(IKartModifier kartModifier)
 {
     m_CurrentModifiers.Add(kartModifier);
 }