示例#1
0
    private void OnTriggerExit(Collider other)
    {
        if (other.GetComponent <Rigidbody>() != null && other.GetComponent <Player>())
        {
            PlayerController playerController = other.GetComponent <PlayerController>();
            if (other.transform.GetChild((int)PlayerChildren.BubbleParticles).GetComponent <ParticleSystem>())
            {
                // SEB C'est pour toi
                other.transform.GetChild((int)PlayerChildren.BubbleParticles).GetComponent <ParticleSystem>().Stop();
            }

            if (waterResistance != 0)
            {
                // TODO : Need a contains buff ?
                playerController.stats.RemoveBuff(movestatbuff);
                playerController.stats.RemoveBuff(dashstatbuff);
                playerController.stats.RemoveBuff(jumpstatbuff);
            }

            WaterImmersionCamera waterImmersionCamera = other.GetComponent <Player>().cameraReference.transform.GetChild(0).GetComponent <WaterImmersionCamera>();
            if (waterImmersionCamera)
            {
                waterImmersionCamera.isImmerge = false;
            }

            playerController.isGravityEnabled = true;
            playerController.IsUnderWater     = false;
        }
    }
    private void OnTriggerStay(Collider other)
    {
        if (waterComponentEntered != null)
        {
            float forceFactor = 1f - transform.position.y + waterLevel;
            playerController.jumpState.nbJumpMade = 0;

            if (transform.position.y > waterLevel - waterTolerance)
            {
                playerController.isGravityEnabled = true;
            }
            // Sous l'eau
            else
            {
                if (transform.position.y < waterLevel - 2 * waterTolerance)
                {
                    playerController.isGravityEnabled = false;

                    if (forceFactor > 0f)
                    {
                        Vector3 uplift = ((forceFactor - rb.velocity.y * modulateWaterForceFactor)) * Vector3.up * waterUpliftStrength;
                        rb.AddForceAtPosition(uplift, transform.position);
                    }
                }
            }

            if (PlayerComponent.cameraReference)
            {
                WaterImmersionCamera waterImmersionCamera = PlayerComponent.cameraReference.transform.GetChild(0).GetComponent <WaterImmersionCamera>();
                if (waterImmersionCamera)
                {
                    if (PlayerComponent.cameraReference.transform.GetChild(0).position.y < waterLevel + 0.8f)
                    {
                        waterImmersionCamera.isImmerge = true;
                    }
                    else
                    {
                        waterImmersionCamera.isImmerge = false;
                    }
                }
            }
        }
    }