Example #1
0
    void OnCollisionEnter(Collision collision)
    {
        m_playerShip.OnCollisionHitForAbilities(collision);
        MLandingAbility.MoverCollisionHitLogic(collision);
        LockOnCamera.Instance.PlayShakeEvent(m_collideEventData);

        for (int i = 0; i < collision.contacts.Length; ++i)
        {
            Vector3  vLoc   = collision.contacts[i].point;
            Collider hitCol = collision.contacts[i].thisCollider;

            if (hitCol == GetComponent <Collider>())
            {
                if (MLandingAbility.Landing || MLandingAbility.Landed)
                {
                    return;
                }

                bool bCollideDamageLayer = LayerMask.NameToLayer("Scenery") == collision.collider.gameObject.layer ||
                                           LayerMask.NameToLayer("Building") == collision.collider.gameObject.layer;
                //PlayEffect
                if (bCollideDamageLayer)
                {
                    m_collisionDamage.SetCollisionInfo(collision);
                    m_playerShip.HandleMod(m_collisionDamage);
                    m_playerShip.StealthMeter.ModifyCurrent(-Rigidbody.velocity.magnitude);
                    m_speedDamageMod.Amount = -m_playerShip.m_fSpeed;
                    LastCollisionVector     = collision.impulse / Time.fixedDeltaTime;
                    collision.gameObject.SendMessage("OnRammedByPlayer", m_speedDamageMod, SendMessageOptions.DontRequireReceiver);

                    MasterAudio.PlaySound(m_sOnRegularHit);
                }
                else if (LayerMask.NameToLayer("Water") == collision.collider.gameObject.layer)
                {
                    m_playerShip.StealthMeter.ModifyCurrent(-Rigidbody.velocity.magnitude);
                    Vector3 vAdded = m_playerShip.MTransform.forward;
                    vAdded.y = 0;
                    vAdded.Normalize();
                    vAdded *= 4f;
                    PoolBoss.Spawn(m_waterCollisionPrefab.transform, vLoc + vAdded, Quaternion.identity, null);
                }
                else if (LayerMask.NameToLayer("Actor") == collision.collider.gameObject.layer)
                {
                    m_playerShip.StealthMeter.ModifyCurrent((m_collisionDamage.Amount));
                }
                else if (LayerMask.NameToLayer("FlockingSpirits") == collision.collider.gameObject.layer)
                {
                    MasterAudio.PlaySound(m_sOnFlockingHit);

                    Transform mForm = PoolBoss.Spawn(m_impactEffect.transform, vLoc, Quaternion.identity, MTransform);
                    mForm.parent        = MTransform;
                    mForm.localPosition = MTransform.InverseTransformPoint(vLoc);
                }
                else if (LayerMask.NameToLayer("Vehicle") == collision.collider.gameObject.layer)
                {
                    MasterAudio.PlaySound(m_sOnVehicleHit);

                    Transform mForm = PoolBoss.Spawn(m_impactEffect.transform, vLoc, Quaternion.identity, MTransform);
                    mForm.parent        = MTransform;
                    mForm.localPosition = MTransform.InverseTransformPoint(vLoc);
                }
            }
        }
    }
Example #2
0
 void OnCollisionExit(Collision collision)
 {
     MLandingAbility.MoverCollisionExitLogic(collision);
 }
Example #3
0
    /********************************************************************************************************************************************
    *
    * Public functions
    *
    ********************************************************************************************************************************************/

    public void HandleFixedUpdate()
    {
        if (!m_playerShip.IsDead() && !InputManager.Instance.InteractMode)
        {
            torques.x = new Vector2(shipExtents.y, shipExtents.z).magnitude *thrust.x;
            torques.y = new Vector2(shipExtents.x, shipExtents.z).magnitude *thrust.y;  //normally would be x and z, but mesh is rotated 90 degrees in mine.
            torques.z = new Vector2(shipExtents.x, shipExtents.y).magnitude *thrust.z;  //normally would be x and y, but mesh is rotated 90 degrees in mine.

            Vector3 vTurnProp = GetOrientationProp();

            if (InputManager.Instance.NoviceMode)
            {
                vTurnProp.z = 0f;
            }

            if (!MLandingAbility.Landed)
            {
                RCS(vTurnProp);
            }

            if (vTurnProp == Vector3.zero && (!MLandingAbility.Landed && !MLandingAbility.Landing))
            {
                m_resetOrientationTimer.ModifyCurrent(Time.fixedDeltaTime);

                if (m_resetOrientationTimer.IsMaxed() && !m_bReOrientLock)
                {
                    Vector3 vLookDir = MTransform.forward;
                    ExperimentalOrientationChange(vLookDir, m_fAutoCorrectSpeed);
                }
            }
            else if (vTurnProp == Vector3.zero && LockOnCamera.Instance.MTargetCast.LockedTarget != null)
            {
                Vector3 vLookDir = MTransform.forward;
                ExperimentalOrientationChange(vLookDir, m_fAutoCorrectSpeed);
            }

            else if (PointToTurnToward != Vector3.zero)
            {
                ExperimentalOrientationChange(PointToTurnToward, m_fAutoCorrectSpeed);
            }
            else
            {
                m_resetOrientationTimer.SetToMin();
                m_bReOrientLock = false;
            }


            if (Transform.position.y < 50f)
            {
                Vector3 vPos = MTransform.position;
                vPos.y = 55f;
                Rigidbody.MovePosition(vPos);
            }

            MLandingAbility.ContinueLanding();

            UpdateMovementSoundLogic();

            m_vPrevInputValues = vTurnProp;
        }

        if (Rigidbody.drag < 0f)
        {
            Rigidbody.drag = m_fSavedDrag;
        }
    }