コード例 #1
0
ファイル: PlayerController.cs プロジェクト: Aleoris/DRUNK
        void OnTriggerEnter(Collider other)
        {
            if (other.gameObject.CompareTag("NPC"))
            {
                var npcManager = other.gameObject.GetComponent <NPCManager>();
                if (npcManager.IsChasing())
                {
                    npcManager.StartPunching();
                }
            }

            if (other.gameObject.CompareTag("Hand") && !invincible)
            {
                var npcManager = other.transform.root.gameObject.GetComponent <NPCManager>();
                if (npcManager.IsChasing() && npcManager._npcData.Punching && !Indestructibles.PlayerData.IsKnockedOut)
                {
                    npcManager.OnPlayerHit();
                    // Play a random grunt sound
                    if (gruntSounds.Length > 0)
                    {
                        _audioSource.PlayOneShot(gruntSounds[Random.Range(0, gruntSounds.Length - 1)]);
                    }

                    // Player is dead
                    if (--Indestructibles.PlayerData.HealthPoints <= 0)
                    {
                        Indestructibles.PlayerData.IsKnockedOut = true;
                        _animator.SetTrigger(Animator.StringToHash("Knocked Out"));
                        gameManager.OnPlayerDeath();
                        Indestructibles.PlayerData.IntoxicationLevel = 0.0f;
                        ClearEffects();
                        CancelInvoke(nameof(AddPoint));
                    }
                    else
                    {
                        // Player got hit but is not dead
                        var direction = (transform.position - npcManager.transform.position).normalized;

                        // Temporarily disable root motion to add a push force
                        Indestructibles.PlayerAnimator.applyRootMotion = false;
                        _rigidbody.AddForce(direction * 5.0f, ForceMode.Impulse);
                        Invoke(nameof(EnableRootMotion), 0.5f);

                        invincible = true;
                        Invoke(nameof(DisableInvincible), 2.0f);

                        // Flicker effect
                        InvokeRepeating(nameof(FlickerModel), 0.0f, 0.125f);
                        Invoke(nameof(StopFlicker), 2.0f);

                        // Sober up
                        if (onHitSoberUp)
                        {
                            Indestructibles.PlayerData.IntoxicationLevel -= 0.25f;
                            ClearEffects();
                        }
                    }
                }
                Indestructibles.UIManager.RefreshUI();
            }
        }