// 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); }
// 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(); }
// Awake void Awake() { instance = this; m_transform = transform; mainCamera = this.GetComponent <Camera>(); m_Audio = this.GetComponentInChildren <AudioSource>(); }
// FinalStage Shooting protected virtual void FinalStageShooting() { if (owner.isPlayer) { PlayerCamera.ShakeOneShot(Random.Range(minCameraShake, maxCameraShake)); } }
// 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); } }
// 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); }
// 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(); } } }