Exemplo n.º 1
0
        // Take Damage
        public override void TakeDamage(DamageInfo damageInfo)
        {
            HudElements.HealthBar.SetDamageTargetPosition(damageInfo.source.position);

            int   finalDamage = CalcDamage(damageInfo.damage);
            float shakeRange  = finalDamage / 10f;

            if (finalDamage < damageToPain && HealthInPercent > percentToPain)
            {
                switch (damageInfo.type)
                {
                case EDamageType.Impact:
                case EDamageType.Melee:
                    PlayerCamera.ShakeOneShot(Random.Range(shakeRange, shakeRange * 1.65f));
                    HudElements.ShowPainScreen();
                    break;

                default:
                    break;
                }
            }
            else
            {
                PlayerCamera.ShakeOneShot(Random.Range(shakeRange, shakeRange * 1.65f));
                HudElements.ShowPainScreen();
            }

            DecrementHealth(finalDamage);
        }
Exemplo n.º 2
0
        // OnDie
        protected override void OnDie()
        {
            base.OnDie();
            //
            this.enabled = false;
            PlayerCamera.PlayerDie();
            HudElements.PlayerDie();
            FirstPersonController.PlayerDie();

            FirstPersonWeaponSway[] tmpFPWeapSways = this.GetComponentsInChildren <FirstPersonWeaponSway>();
            foreach (FirstPersonWeaponSway fpWSway in tmpFPWeapSways)
            {
                fpWSway.enabled = false;
            }

            GameObject bAnimGO = this.GetComponentInChildren <BodyAnimation>().gameObject;

            if (bAnimGO != null)
            {
                bAnimGO.SetActive(false);
            }

            // Show menu after die.
            ASKInputManager.PlayerDie();
        }
Exemplo n.º 3
0
 // Awake
 void Awake()
 {
     instance    = this;
     m_transform = transform;
     mainCamera  = this.GetComponent <Camera>();
     m_Audio     = this.GetComponentInChildren <AudioSource>();
 }
Exemplo n.º 4
0
 // FinalStage Shooting
 protected virtual void FinalStageShooting()
 {
     if (owner.isPlayer)
     {
         PlayerCamera.ShakeOneShot(Random.Range(minCameraShake, maxCameraShake));
     }
 }
Exemplo n.º 5
0
        // Muzzle ToCameraPoint
        protected virtual void MuzzleToCameraPoint()
        {
            if (owner.isPlayer)
            {
                PlayerCamera.UpdateHit();

                Transform camTransform = PlayerCamera.m_Transform;

                if (PlayerCamera.isHitted)
                {
                    float toMuzzle = Vector3.Distance(projectileOuter.position, camTransform.position);
                    float toPoint  = Vector3.Distance(PlayerCamera.hitInfo.point, camTransform.position);

                    if (toMuzzle < toPoint)
                    {
                        projectileOuter.LookAt(PlayerCamera.hitInfo.point);
                        return;
                    }
                }

                projectileOuter.LookAt(camTransform.position + camTransform.forward * 25f);
            }
        }
Exemplo n.º 6
0
        // Explode
        private void Explode(ICharacter owner)
        {
            if (exploded)
            {
                return;
            }

            exploded = true;

            Transform m_Transform = transform;

            if (fragments != null)
            {
                fragments.SpawnCopy(m_Transform.position, m_Transform.rotation);
            }

            Collider m_Collider = GetComponent <Collider>();

            Collider[] overlapColliders = Physics.OverlapSphere(m_Transform.position, radius, hitMask);

            Vector3    direction = Vector3.zero;
            RaycastHit hitInfo;
            DamageInfo damageInfo = new DamageInfo();

            foreach (Collider hitCollider in overlapColliders)
            {
                if (hitCollider == m_Collider || hitCollider.isTrigger)
                {
                    continue;
                }

                direction = hitCollider.bounds.center - m_Transform.position;

                if (Physics.Raycast(m_Transform.position, direction, out hitInfo, radius, hitMask) == false || hitCollider != hitInfo.collider)
                {
                    continue;
                }

                float distance = Vector3.Distance(m_Transform.position, hitInfo.point);
                float percent  = (100f - (distance / radius * 100f)) / 100f;

                IDamageHandler handler = hitCollider.GetComponent <IDamageHandler>();
                if (handler != null)
                {
                    handler.TakeDamage(damageInfo.GetItByInfo(damage * percent, m_Transform, owner, EDamageType.Explosion));

                    if (handler.isPlayer)
                    {
                        PlayerCamera.Shake(percent / 2f, percent);
                    }
                }

                Rigidbody tmpRb = hitCollider.attachedRigidbody;
                if (tmpRb != null && tmpRb.isKinematic == false)
                {
                    percent *= 1.75f;
                    tmpRb.AddExplosionForce(force * percent / (tmpRb.mass > 1f ? tmpRb.mass : 1f), m_Transform.position, radius, upwardsModifier, ForceMode.Impulse);
                }
            }


            float lifetime = 0f;


            // Play SFX
            AudioSource m_Audio = GetComponent <AudioSource>();

            if (m_Audio != null)
            {
                m_Audio.SetupForSFX();

                AudioClip sfxClip = Audio.GetRandomClip(explosionSounds);
                m_Audio.PlayOneShot(sfxClip);

                if (sfxClip != null)
                {
                    lifetime = Mathf.Max(lifetime, sfxClip.length);
                }
            }
            else
            {
                Audio.PlayClipAtPoint(Audio.GetRandomClip(explosionSounds), m_Transform.position);
            }


            // Spawn FX
            ParticleSystem explosionFX = GetComponent <ParticleSystem>();

            if (explosionFX != null)
            {
#if UNITY_5_4_PLUS
                var main = explosionFX.main;
                main.playOnAwake = main.loop = false;
                float startLifetime = main.startLifetime.constant;
#else
                explosionFX.playOnAwake   = explosionFX.loop = false;
                explosionFX.playbackSpeed = Time.timeScale;
                float startLifetime = explosionFX.startLifetime;
#endif
                explosionFX.Play();

                lifetime = Mathf.Max(lifetime, startLifetime);
            }


            Destroy(gameObject.MoveToCache(), lifetime);
        }
Exemplo n.º 7
0
        // TouchKit Input
        private void TouchKitInput()
        {
            if (TCKInput.CheckController(actions.pause) && TCKInput.GetAction(actions.pause, TCKActionEvent.Down))
            {
                Pause();
            }

            runAction = (TCKInput.CheckController(actions.run) && TCKInput.GetAction(actions.run, TCKActionEvent.Press));

            if (TCKInput.CheckController(actions.jump) && TCKInput.GetAction(actions.jump, TCKActionEvent.Down))
            {
                FirstPersonController.Jump();
            }
            if (TCKInput.CheckController(actions.crouch) && TCKInput.GetAction(actions.crouch, TCKActionEvent.Down))
            {
                FirstPersonController.Crouch();
            }

            if (TCKInput.CheckController(actions.use) && TCKInput.GetAction(actions.use, TCKActionEvent.Down))
            {
                PlayerCamera.UseItem();
            }

            if (TCKInput.CheckController(actions.reloadWeapon) && TCKInput.GetAction(actions.reloadWeapon, TCKActionEvent.Down))
            {
                WeaponsManager.ReloadWeapon();
            }
            if (TCKInput.CheckController(actions.nextFiremode) && TCKInput.GetAction(actions.nextFiremode, TCKActionEvent.Down))
            {
                WeaponsManager.SwitchFiremode();
            }
            if (TCKInput.CheckController(actions.nextAmmotype) && TCKInput.GetAction(actions.nextAmmotype, TCKActionEvent.Down))
            {
                WeaponsManager.SwitchAmmotype();
            }
            if (TCKInput.CheckController(actions.toSubweapon) && TCKInput.GetAction(actions.toSubweapon, TCKActionEvent.Down))
            {
                WeaponsManager.SwitchToSubWeapon();
            }
            if (TCKInput.CheckController(actions.dropWeapon) && TCKInput.GetAction(actions.dropWeapon, TCKActionEvent.Down))
            {
                WeaponsManager.DropCurrentWeapon();
            }
            if (TCKInput.CheckController(actions.prevWeapon) && TCKInput.GetAction(actions.prevWeapon, TCKActionEvent.Down))
            {
                WeaponsManager.SelectPreviousWeapon();
            }
            if (TCKInput.CheckController(actions.nextWeapon) && TCKInput.GetAction(actions.nextWeapon, TCKActionEvent.Down))
            {
                WeaponsManager.SelectNextWeapon();
            }


            if (TCKInput.CheckController(axes.moveJoystick))
            {
                moveHorizontal = Mathf.Clamp(TCKInput.GetAxis(axes.moveJoystick, TCKAxisType.Horizontal), -1f, 1f);
                moveVertical   = runAction ? 1f : Mathf.Clamp(TCKInput.GetAxis(axes.moveJoystick, TCKAxisType.Vertical), -1f, 1f);
            }

            if (TCKInput.CheckController(axes.lookTouchpad))
            {
                lookHorizontal = TCKInput.GetAxis(axes.lookTouchpad, TCKAxisType.Horizontal) * GameSettings.GetLookSensitivityByInvert_X;
                lookVertical   = TCKInput.GetAxis(axes.lookTouchpad, TCKAxisType.Vertical) * GameSettings.GetLookSensitivityByInvert_Y;
            }

            if (TCKInput.CheckController(actions.zoom))
            {
                zoomAction     = TCKInput.GetAction(actions.zoom, TCKActionEvent.Press);
                zoomActionDown = TCKInput.GetAction(actions.zoom, TCKActionEvent.Down);
                zoomActionUp   = TCKInput.GetAction(actions.zoom, TCKActionEvent.Up);
            }

            if (TCKInput.CheckController(actions.fire))
            {
                bool fireAction = TCKInput.GetAction(actions.fire, TCKActionEvent.Press);
                // Fire and Reset Weapon
                if (fireAction && !FirstPersonController.isRunning)
                {
                    WeaponsManager.WeaponFire();
                }
                else
                {
                    WeaponsManager.WeaponReset();
                }
            }
        }