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); } } } }
void OnCollisionExit(Collision collision) { MLandingAbility.MoverCollisionExitLogic(collision); }
/******************************************************************************************************************************************** * * 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; } }