public void ExitSand() { if (sandCounter == 1) { this.RemoveKartModifier(sandModifier); sandModifier = null; } sandCounter--; }
/// <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); }
public void EnterSand(IKartModifier sand) { if (sandModifier != null) { this.RemoveKartModifier(sandModifier); } sandModifier = sand; this.AddKartModifier(sandModifier); if (sandCounter == 0) { this.StartCoroutine(SpeedReducer()); } sandCounter++; }
/// <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); }
/// <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); }