From 48b64e573a1709dc923cb9162b55be0246b3ff63 Mon Sep 17 00:00:00 2001 From: chai <215380520@qq.com> Date: Thu, 9 Nov 2023 18:46:15 +0800 Subject: * move --- Thronefall/Thronefall/AutoRevive.cs | 91 ----- Thronefall/Thronefall/CommandUnits.cs | 261 -------------- Thronefall/Thronefall/Hp.cs | 375 --------------------- Thronefall/Thronefall/Player/AutoRevive.cs | 91 +++++ Thronefall/Thronefall/Player/CommandUnits.cs | 261 ++++++++++++++ Thronefall/Thronefall/Player/Hp.cs | 375 +++++++++++++++++++++ Thronefall/Thronefall/Player/PlayerAttack.cs | 30 ++ Thronefall/Thronefall/Player/PlayerHpRegen.cs | 60 ++++ Thronefall/Thronefall/Player/PlayerInteraction.cs | 205 +++++++++++ Thronefall/Thronefall/Player/PlayerMovement.cs | 152 +++++++++ .../Thronefall/Player/PlayerUpgradeManager.cs | 70 ++++ Thronefall/Thronefall/PlayerAttack.cs | 30 -- Thronefall/Thronefall/PlayerHpRegen.cs | 60 ---- Thronefall/Thronefall/PlayerInteraction.cs | 205 ----------- Thronefall/Thronefall/PlayerMovement.cs | 152 --------- Thronefall/Thronefall/PlayerUpgradeManager.cs | 70 ---- 16 files changed, 1244 insertions(+), 1244 deletions(-) delete mode 100644 Thronefall/Thronefall/AutoRevive.cs delete mode 100644 Thronefall/Thronefall/CommandUnits.cs delete mode 100644 Thronefall/Thronefall/Hp.cs create mode 100644 Thronefall/Thronefall/Player/AutoRevive.cs create mode 100644 Thronefall/Thronefall/Player/CommandUnits.cs create mode 100644 Thronefall/Thronefall/Player/Hp.cs create mode 100644 Thronefall/Thronefall/Player/PlayerAttack.cs create mode 100644 Thronefall/Thronefall/Player/PlayerHpRegen.cs create mode 100644 Thronefall/Thronefall/Player/PlayerInteraction.cs create mode 100644 Thronefall/Thronefall/Player/PlayerMovement.cs create mode 100644 Thronefall/Thronefall/Player/PlayerUpgradeManager.cs delete mode 100644 Thronefall/Thronefall/PlayerAttack.cs delete mode 100644 Thronefall/Thronefall/PlayerHpRegen.cs delete mode 100644 Thronefall/Thronefall/PlayerInteraction.cs delete mode 100644 Thronefall/Thronefall/PlayerMovement.cs delete mode 100644 Thronefall/Thronefall/PlayerUpgradeManager.cs diff --git a/Thronefall/Thronefall/AutoRevive.cs b/Thronefall/Thronefall/AutoRevive.cs deleted file mode 100644 index 63c2d75..0000000 --- a/Thronefall/Thronefall/AutoRevive.cs +++ /dev/null @@ -1,91 +0,0 @@ -using UnityEngine; -using UnityEngine.Events; - -[RequireComponent(typeof(Hp))] -public class AutoRevive : MonoBehaviour, DayNightCycle.IDaytimeSensitive -{ - [HideInInspector] - public UnityEvent onReviveTrigger = new UnityEvent(); - - private Hp hp; - - public float reviveAfterBeingKnockedOutFor = 20f; - - private float hasBeenKnockedOutFor; - - private bool ringOfResurection; - - private bool quickReviveAvailable = true; - - private bool godOfDeathActive; - - [SerializeField] - private Equippable ringOfResurectionPerk; - - private float ReviveAfterBeingKnockedOutFor - { - get - { - if (ringOfResurection && quickReviveAvailable) - { - return 2f; - } - return reviveAfterBeingKnockedOutFor; - } - } - - public float TimeTillRevive - { - get - { - if (hasBeenKnockedOutFor <= 0f) - { - return -1f; - } - return ReviveAfterBeingKnockedOutFor - hasBeenKnockedOutFor; - } - } - - public void OnDusk() - { - } - - public void OnDawn_AfterSunrise() - { - quickReviveAvailable = true; - } - - public void OnDawn_BeforeSunrise() - { - } - - private void Start() - { - godOfDeathActive = PerkManager.instance.GodOfDeathActive; - if (godOfDeathActive) - { - reviveAfterBeingKnockedOutFor *= PerkManager.instance.godOfDeath_playerRespawnMultiplyer; - } - hp = GetComponent(); - ringOfResurection = PerkManager.IsEquipped(ringOfResurectionPerk); - DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); - } - - private void Update() - { - if (hp.KnockedOut) - { - hasBeenKnockedOutFor += Time.deltaTime; - if (hasBeenKnockedOutFor >= ReviveAfterBeingKnockedOutFor) - { - hp.Revive(); - onReviveTrigger.Invoke(); - quickReviveAvailable = false; - } - } - else - { - hasBeenKnockedOutFor = 0f; - } - } -} diff --git a/Thronefall/Thronefall/CommandUnits.cs b/Thronefall/Thronefall/CommandUnits.cs deleted file mode 100644 index d439867..0000000 --- a/Thronefall/Thronefall/CommandUnits.cs +++ /dev/null @@ -1,261 +0,0 @@ -using System.Collections.Generic; -using Pathfinding; -using Rewired; -using UnityEngine; - -public class CommandUnits : MonoBehaviour -{ - public static CommandUnits instance; - - public UnitCommandRadiusAnimation rangeIndicator; - - public GameObject commandingIndicator; - - public ParticleSystem dropWaypointFx; - - public int drowWaypointParticleCount = 100; - - public float attractRange; - - public string graphNameOfPlayerUnits; - - public float unitDistanceFromEachOther = 2f; - - public float unitDistanceMoveStep = 0.5f; - - public int maxPositioningRepeats = 5; - - public float holdToHoldPositionTime = 1f; - - private ThronefallAudioManager audioManager; - - private AudioSet audioSet; - - private NNConstraint nearestConstraint = new NNConstraint(); - - private List playerUnitsCommanding = new List(); - - private List playerUnitsCommandingBuffer = new List(); - - private Player input; - - [HideInInspector] - public bool commanding; - - private TagManager tagManager; - - private AstarPath astarPath; - - private PlayerUpgradeManager playerUPgradeManager; - - private Hp hpPlayer; - - private float timeSincePlace; - - private bool switchedToHold; - - private List autoAttacksToEnable = new List(); - - private void Awake() - { - instance = this; - } - - private void Start() - { - audioManager = ThronefallAudioManager.Instance; - audioSet = audioManager.audioContent; - input = ReInput.players.GetPlayer(0); - tagManager = TagManager.instance; - astarPath = AstarPath.active; - nearestConstraint.graphMask = GraphMask.FromGraphName(graphNameOfPlayerUnits); - playerUPgradeManager = PlayerUpgradeManager.instance; - hpPlayer = GetComponent(); - } - - private void Update() - { - if (!commanding) - { - if (input.GetButtonDown("Command Units")) - { - rangeIndicator.Activate(); - } - if (input.GetButton("Command Units") && hpPlayer.HpValue > 0f) - { - foreach (TaggedObject playerUnit in TagManager.instance.PlayerUnits) - { - if (tagManager.MeasureDistanceToTaggedObject(playerUnit, base.transform.position) <= attractRange) - { - OnUnitAdd(playerUnit); - } - } - } - else if (playerUnitsCommanding.Count > 0) - { - commanding = true; - } - } - else - { - if (input.GetButtonDown("Command Units") || hpPlayer.HpValue <= 0f) - { - PlaceCommandedUnitsAndCalculateTargetPositions(); - timeSincePlace = 0f; - switchedToHold = false; - } - if (input.GetButton("Command Units") && hpPlayer.HpValue > 0f) - { - timeSincePlace += Time.deltaTime; - if (timeSincePlace > holdToHoldPositionTime && !switchedToHold) - { - switchedToHold = true; - MakeUnitsInBufferHoldPosition(); - } - } - if (input.GetButtonUp("Command Units") || hpPlayer.HpValue <= 0f) - { - commanding = false; - timeSincePlace = 0f; - } - } - for (int num = playerUnitsCommanding.Count - 1; num >= 0; num--) - { - PathfindMovementPlayerunit pathfindMovementPlayerunit = playerUnitsCommanding[num]; - pathfindMovementPlayerunit.HomePosition = base.transform.position; - if (!pathfindMovementPlayerunit.enabled) - { - playerUnitsCommanding.RemoveAt(num); - OnUnitRemove(pathfindMovementPlayerunit); - } - } - if (playerUnitsCommanding.Count > 0 && !input.GetButton("Command Units")) - { - commandingIndicator.SetActive(value: true); - } - else - { - commandingIndicator.SetActive(value: false); - } - if (!input.GetButton("Command Units") && rangeIndicator.Active) - { - rangeIndicator.Deactivate(); - } - } - - public void MakeUnitsInBufferHoldPosition() - { - if (playerUnitsCommandingBuffer.Count > 0) - { - audioManager.PlaySoundAsOneShot(audioSet.HoldPosition, 0.45f, 0.9f + Random.value * 0.2f, audioManager.mgSFX, 10); - } - foreach (PathfindMovementPlayerunit item in playerUnitsCommandingBuffer) - { - item.HoldPosition = true; - } - } - - public void ForceCommandingEnd() - { - if (commanding) - { - PlaceCommandedUnitsAndCalculateTargetPositions(); - } - } - - public void PlaceCommandedUnitsAndCalculateTargetPositions() - { - if (!commanding) - { - return; - } - if (playerUnitsCommanding.Count > 0) - { - audioManager.PlaySoundAsOneShot(audioSet.PlaceCommandingUnits, 0.35f, 0.9f + Random.value * 0.2f, audioManager.mgSFX, 10); - } - dropWaypointFx.Emit(drowWaypointParticleCount); - foreach (PathfindMovementPlayerunit item in playerUnitsCommanding) - { - OnUnitRemove(item); - } - foreach (AutoAttack item2 in autoAttacksToEnable) - { - if ((bool)item2 && item2.GetComponent().HpValue > 0f) - { - item2.enabled = true; - } - } - autoAttacksToEnable.Clear(); - for (int i = 0; i < playerUnitsCommanding.Count; i++) - { - Vector3 vector = Quaternion.AngleAxis((float)(i / playerUnitsCommanding.Count) * 360f, Vector3.up) * Vector3.right * unitDistanceMoveStep; - playerUnitsCommanding[i].HomePosition = astarPath.GetNearest(base.transform.position + vector + new Vector3(Random.value - 0.5f, 0f, Random.value - 0.5f) * unitDistanceMoveStep * 0.1f, nearestConstraint).position; - } - for (int j = 0; j < maxPositioningRepeats; j++) - { - bool flag = false; - for (int k = 0; k < playerUnitsCommanding.Count; k++) - { - for (int l = k + 1; l < playerUnitsCommanding.Count; l++) - { - if (!((playerUnitsCommanding[k].HomePosition - playerUnitsCommanding[l].HomePosition).magnitude > unitDistanceFromEachOther)) - { - Vector3 vector2 = (playerUnitsCommanding[k].HomePosition - playerUnitsCommanding[l].HomePosition).normalized * unitDistanceMoveStep; - playerUnitsCommanding[k].HomePosition = astarPath.GetNearest(playerUnitsCommanding[k].HomePosition + vector2, nearestConstraint).position; - playerUnitsCommanding[l].HomePosition = astarPath.GetNearest(playerUnitsCommanding[l].HomePosition - vector2, nearestConstraint).position; - flag = true; - } - } - } - if (!flag) - { - break; - } - } - playerUnitsCommandingBuffer.Clear(); - playerUnitsCommandingBuffer.AddRange(playerUnitsCommanding); - playerUnitsCommanding.Clear(); - } - - public void OnUnitAdd(TaggedObject _t) - { - PathfindMovementPlayerunit pathfindMovementPlayerunit = (PathfindMovementPlayerunit)_t.Hp.PathfindMovement; - if (!playerUnitsCommanding.Contains(pathfindMovementPlayerunit)) - { - audioManager.PlaySoundAsOneShot(audioSet.AddedUnitToCommanding, 0.55f, 0.7f + (float)playerUnitsCommanding.Count * 0.025f, audioManager.mgSFX, 50); - playerUnitsCommanding.Add(pathfindMovementPlayerunit); - pathfindMovementPlayerunit.FollowPlayer(_follow: true); - MaterialFlasherFX componentInChildren = pathfindMovementPlayerunit.GetComponentInChildren(); - if ((bool)componentInChildren) - { - componentInChildren.SetSelected(_selected: true); - } - _t.Tags.Add(TagManager.ETag.AUTO_Commanded); - if (playerUPgradeManager.commander) - { - pathfindMovementPlayerunit.movementSpeed *= UpgradeCommander.instance.moveSpeedMultiplicator; - } - AutoAttack[] components = _t.GetComponents(); - foreach (AutoAttack autoAttack in components) - { - autoAttack.enabled = false; - autoAttacksToEnable.Add(autoAttack); - } - } - } - - public void OnUnitRemove(PathfindMovementPlayerunit _p) - { - _p.FollowPlayer(_follow: false); - MaterialFlasherFX componentInChildren = _p.GetComponentInChildren(); - if ((bool)componentInChildren) - { - componentInChildren.SetSelected(_selected: false); - } - _p.GetComponent().Tags.Remove(TagManager.ETag.AUTO_Commanded); - if (playerUPgradeManager.commander) - { - _p.movementSpeed /= UpgradeCommander.instance.moveSpeedMultiplicator; - } - } -} diff --git a/Thronefall/Thronefall/Hp.cs b/Thronefall/Thronefall/Hp.cs deleted file mode 100644 index d28b16f..0000000 --- a/Thronefall/Thronefall/Hp.cs +++ /dev/null @@ -1,375 +0,0 @@ -using System.Collections.Generic; -using Pathfinding; -using Pathfinding.RVO; -using UnityEngine; -using UnityEngine.Events; - -[RequireComponent(typeof(TaggedObject))] -public class Hp : MonoBehaviour -{ - public float maxHp; - - public bool getsKnockedOutInsteadOfDying; - - private float hp; - - private TaggedObject taggedObject; - - [Tooltip("The hight where enemies aim at and where hit indicators are spawned")] - public float hitFeedbackHeight; - - [Tooltip("This child object is enabled when this unit is alive.")] - public GameObject aliveVisuals; - - [Tooltip("This child object is enabled when this unit is knocked out.")] - public GameObject knockedOutVisuals; - - public GameObject fxToSpawnOnDeath; - - public Vector3 deathFxSpawnOffset; - - public Transform deathFxSpawnWithPosAndRotOf; - - [HideInInspector] - public UnityEvent OnHpChange = new UnityEvent(); - - [HideInInspector] - public UnityEvent OnRevive = new UnityEvent(); - - [HideInInspector] - public UnityEvent OnHeal = new UnityEvent(); - - [HideInInspector] - public UnityEvent OnReceiveDamage = new UnityEvent(); - - [HideInInspector] - public UnityEvent OnKillOrKnockout = new UnityEvent(); - - private AutoAttack[] autoAttacks; - - private ManualAttack[] manualAttacks; - - private PathfindMovement pathfindMovement; - - private RVOController rvoController; - - private PlayerMovement playerMovement; - - private NavmeshCut[] navmeshCut; - - private PlayerInteraction playerInteraction; - - public GameObject coin; - - public float coinSpawnOffset; - - public int coinCount; - - [SerializeField] - private Weapon spwanAttackOnDeath; - - private float damageMultiplyer = 1f; - - private float healingMultiplyer = 1f; - - public bool invulnerable; - - public float HpValue => hp; - - public float HpPercentage => hp / maxHp; - - public bool KnockedOut => hp <= 0f; - - public TaggedObject TaggedObj => taggedObject; - - public PathfindMovement PathfindMovement => pathfindMovement; - - public Weapon SpwanAttackOnDeath - { - get - { - return spwanAttackOnDeath; - } - set - { - spwanAttackOnDeath = value; - } - } - - public float DamageMultiplyer - { - get - { - return damageMultiplyer; - } - set - { - damageMultiplyer = value; - } - } - - public void ScaleHp(float _multiply) - { - hp *= _multiply; - maxHp *= _multiply; - } - - private void Start() - { - playerInteraction = GetComponent(); - taggedObject = GetComponent(); - autoAttacks = GetComponents(); - manualAttacks = GetComponents(); - pathfindMovement = GetComponent(); - rvoController = GetComponent(); - playerMovement = GetComponent(); - navmeshCut = GetComponentsInChildren(); - taggedObject.AddTag(TagManager.ETag.AUTO_Alive); - Revive(callReviveEvent: false); - ActivateAndDeactivateChildrenAndCompements(_alive: true); - if (PerkManager.instance.HealingSpiritsActive && (bool)taggedObject && taggedObject.Tags.Contains(TagManager.ETag.PlayerOwned)) - { - healingMultiplyer *= PerkManager.instance.healingSpirits_healMulti; - } - } - - private void ActivateAndDeactivateChildrenAndCompements(bool _alive) - { - if ((bool)aliveVisuals) - { - aliveVisuals.SetActive(_alive); - } - if ((bool)knockedOutVisuals) - { - knockedOutVisuals.SetActive(!_alive); - } - if (autoAttacks.Length != 0) - { - AutoAttack[] array = autoAttacks; - for (int i = 0; i < array.Length; i++) - { - array[i].enabled = _alive; - } - } - if (manualAttacks.Length != 0) - { - ManualAttack[] array2 = manualAttacks; - for (int i = 0; i < array2.Length; i++) - { - array2[i].enabled = _alive; - } - } - if ((bool)pathfindMovement) - { - pathfindMovement.enabled = _alive; - if (!_alive) - { - pathfindMovement.ClearCurrentPath(); - } - } - if ((bool)rvoController) - { - rvoController.enabled = _alive; - } - if ((bool)playerMovement) - { - playerMovement.enabled = _alive; - } - NavmeshCut[] array3 = navmeshCut; - for (int i = 0; i < array3.Length; i++) - { - array3[i].enabled = _alive; - } - if ((bool)playerInteraction) - { - playerInteraction.enabled = _alive; - } - } - - public void Revive(bool callReviveEvent = true, float healthPercentage = 1f) - { - if (hp <= 0f) - { - if (callReviveEvent) - { - OnRevive.Invoke(); - } - taggedObject.RemoveTag(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn); - taggedObject.AddTag(TagManager.ETag.AUTO_Alive); - ActivateAndDeactivateChildrenAndCompements(_alive: true); - hp = 0f; - } - else if (hp < maxHp) - { - OnHeal.Invoke(); - } - hp += maxHp * healthPercentage; - if (hp > maxHp) - { - hp = maxHp; - } - OnHpChange.Invoke(); - } - - public bool TakeDamage(float _amount, TaggedObject _damageComingFrom = null, bool causedByPlayer = false, bool invokeFeedbackEvents = true) - { - if (hp <= 0f) - { - return false; - } - if (invulnerable) - { - return false; - } - if (_amount <= 0f) - { - Heal(0f - _amount); - return false; - } - if ((bool)pathfindMovement) - { - pathfindMovement.GetAgroFromObject(_damageComingFrom); - } - hp -= _amount; - OnHpChange.Invoke(); - if (invokeFeedbackEvents) - { - OnReceiveDamage.Invoke(causedByPlayer); - } - if (hp <= 0f) - { - OnKillOrKnockout.Invoke(); - if ((bool)fxToSpawnOnDeath) - { - if ((bool)deathFxSpawnWithPosAndRotOf) - { - Object.Instantiate(fxToSpawnOnDeath, deathFxSpawnWithPosAndRotOf.position + deathFxSpawnOffset, deathFxSpawnWithPosAndRotOf.rotation, null); - } - else - { - Object.Instantiate(fxToSpawnOnDeath, base.transform.position + deathFxSpawnOffset, fxToSpawnOnDeath.transform.rotation, null); - } - } - if (getsKnockedOutInsteadOfDying) - { - taggedObject.RemoveTag(TagManager.ETag.AUTO_Alive); - taggedObject.AddTag(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn); - ActivateAndDeactivateChildrenAndCompements(_alive: false); - } - else - { - Object.Destroy(base.gameObject); - if ((bool)coin) - { - for (int i = 0; i < coinCount; i++) - { - if (i > 1) - { - Object.Instantiate(coin, base.transform.position + Vector3.up * coinSpawnOffset + Quaternion.Euler(0f, 45f * (float)i, 0f) * Vector3.forward * 2f, Quaternion.identity); - } - else - { - Object.Instantiate(coin, base.transform.position + Vector3.up * coinSpawnOffset, Quaternion.identity); - } - } - } - } - if ((bool)spwanAttackOnDeath) - { - spwanAttackOnDeath.Attack(base.transform.position, null, Vector3.zero, taggedObject, damageMultiplyer); - } - return true; - } - return false; - } - - public void Heal(float _amount) - { - if (!(hp <= 0f) && !(_amount <= 0f)) - { - hp += _amount * healingMultiplyer; - if (hp > maxHp) - { - hp = maxHp; - } - OnHpChange.Invoke(); - } - } - - public static void ReviveAllUnitsWithTag(List _mustHaveTags, List _mayNotHaveTags, float _healthPercentage = 1f) - { - List list = new List(); - TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); - for (int i = 0; i < list.Count; i++) - { - list[i].Hp.Revive(callReviveEvent: true, _healthPercentage); - } - } - - public static void MarkDestroyedBuildingsAsDontRevive(List _mustHaveTags, List _mayNotHaveTags, float _healthPercentage = 1f) - { - List list = new List(); - TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); - for (int i = 0; i < list.Count; i++) - { - if (list[i].Tags.Contains(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn)) - { - list[i].GetComponentInParent().Interactor.OnKnockOut(); - if (!list[i].Tags.Contains(TagManager.ETag.AUTO_NoReviveNextMorning)) - { - list[i].Tags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); - } - else - { - list[i].Tags.Remove(TagManager.ETag.AUTO_NoReviveNextMorning); - } - } - } - } - - public static void KillAllUnitsWithTag(List _mustHaveTags, List _mayNotHaveTags) - { - List list = new List(); - TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); - for (int i = 0; i < list.Count; i++) - { - list[i].Hp.TakeDamage(float.MaxValue); - } - } - - public static void ReviveAllKnockedOutPlayerUnitsAndBuildings() - { - if (!PerkManager.instance.DestructionGodActive) - { - List list = new List(); - List list2 = new List(); - list.Add(TagManager.ETag.PlayerOwned); - list2.Add(TagManager.ETag.AUTO_NoReviveNextMorning); - ReviveAllUnitsWithTag(list, list2); - return; - } - List list3 = new List(); - List mayNotHaveTags = new List(); - list3.Add(TagManager.ETag.PlayerOwned); - list3.Add(TagManager.ETag.Building); - MarkDestroyedBuildingsAsDontRevive(list3, mayNotHaveTags); - List list4 = new List(); - mayNotHaveTags = new List(); - list4.Add(TagManager.ETag.PlayerOwned); - mayNotHaveTags.Add(TagManager.ETag.Building); - mayNotHaveTags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); - ReviveAllUnitsWithTag(list4, mayNotHaveTags); - mayNotHaveTags.Clear(); - mayNotHaveTags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); - list4.Add(TagManager.ETag.Building); - ReviveAllUnitsWithTag(list4, mayNotHaveTags, 0.33f); - } - - public static void KillAllEnemyUnits() - { - List list = new List(); - List mayNotHaveTags = new List(); - list.Add(TagManager.ETag.EnemyOwned); - KillAllUnitsWithTag(list, mayNotHaveTags); - } -} diff --git a/Thronefall/Thronefall/Player/AutoRevive.cs b/Thronefall/Thronefall/Player/AutoRevive.cs new file mode 100644 index 0000000..63c2d75 --- /dev/null +++ b/Thronefall/Thronefall/Player/AutoRevive.cs @@ -0,0 +1,91 @@ +using UnityEngine; +using UnityEngine.Events; + +[RequireComponent(typeof(Hp))] +public class AutoRevive : MonoBehaviour, DayNightCycle.IDaytimeSensitive +{ + [HideInInspector] + public UnityEvent onReviveTrigger = new UnityEvent(); + + private Hp hp; + + public float reviveAfterBeingKnockedOutFor = 20f; + + private float hasBeenKnockedOutFor; + + private bool ringOfResurection; + + private bool quickReviveAvailable = true; + + private bool godOfDeathActive; + + [SerializeField] + private Equippable ringOfResurectionPerk; + + private float ReviveAfterBeingKnockedOutFor + { + get + { + if (ringOfResurection && quickReviveAvailable) + { + return 2f; + } + return reviveAfterBeingKnockedOutFor; + } + } + + public float TimeTillRevive + { + get + { + if (hasBeenKnockedOutFor <= 0f) + { + return -1f; + } + return ReviveAfterBeingKnockedOutFor - hasBeenKnockedOutFor; + } + } + + public void OnDusk() + { + } + + public void OnDawn_AfterSunrise() + { + quickReviveAvailable = true; + } + + public void OnDawn_BeforeSunrise() + { + } + + private void Start() + { + godOfDeathActive = PerkManager.instance.GodOfDeathActive; + if (godOfDeathActive) + { + reviveAfterBeingKnockedOutFor *= PerkManager.instance.godOfDeath_playerRespawnMultiplyer; + } + hp = GetComponent(); + ringOfResurection = PerkManager.IsEquipped(ringOfResurectionPerk); + DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); + } + + private void Update() + { + if (hp.KnockedOut) + { + hasBeenKnockedOutFor += Time.deltaTime; + if (hasBeenKnockedOutFor >= ReviveAfterBeingKnockedOutFor) + { + hp.Revive(); + onReviveTrigger.Invoke(); + quickReviveAvailable = false; + } + } + else + { + hasBeenKnockedOutFor = 0f; + } + } +} diff --git a/Thronefall/Thronefall/Player/CommandUnits.cs b/Thronefall/Thronefall/Player/CommandUnits.cs new file mode 100644 index 0000000..d439867 --- /dev/null +++ b/Thronefall/Thronefall/Player/CommandUnits.cs @@ -0,0 +1,261 @@ +using System.Collections.Generic; +using Pathfinding; +using Rewired; +using UnityEngine; + +public class CommandUnits : MonoBehaviour +{ + public static CommandUnits instance; + + public UnitCommandRadiusAnimation rangeIndicator; + + public GameObject commandingIndicator; + + public ParticleSystem dropWaypointFx; + + public int drowWaypointParticleCount = 100; + + public float attractRange; + + public string graphNameOfPlayerUnits; + + public float unitDistanceFromEachOther = 2f; + + public float unitDistanceMoveStep = 0.5f; + + public int maxPositioningRepeats = 5; + + public float holdToHoldPositionTime = 1f; + + private ThronefallAudioManager audioManager; + + private AudioSet audioSet; + + private NNConstraint nearestConstraint = new NNConstraint(); + + private List playerUnitsCommanding = new List(); + + private List playerUnitsCommandingBuffer = new List(); + + private Player input; + + [HideInInspector] + public bool commanding; + + private TagManager tagManager; + + private AstarPath astarPath; + + private PlayerUpgradeManager playerUPgradeManager; + + private Hp hpPlayer; + + private float timeSincePlace; + + private bool switchedToHold; + + private List autoAttacksToEnable = new List(); + + private void Awake() + { + instance = this; + } + + private void Start() + { + audioManager = ThronefallAudioManager.Instance; + audioSet = audioManager.audioContent; + input = ReInput.players.GetPlayer(0); + tagManager = TagManager.instance; + astarPath = AstarPath.active; + nearestConstraint.graphMask = GraphMask.FromGraphName(graphNameOfPlayerUnits); + playerUPgradeManager = PlayerUpgradeManager.instance; + hpPlayer = GetComponent(); + } + + private void Update() + { + if (!commanding) + { + if (input.GetButtonDown("Command Units")) + { + rangeIndicator.Activate(); + } + if (input.GetButton("Command Units") && hpPlayer.HpValue > 0f) + { + foreach (TaggedObject playerUnit in TagManager.instance.PlayerUnits) + { + if (tagManager.MeasureDistanceToTaggedObject(playerUnit, base.transform.position) <= attractRange) + { + OnUnitAdd(playerUnit); + } + } + } + else if (playerUnitsCommanding.Count > 0) + { + commanding = true; + } + } + else + { + if (input.GetButtonDown("Command Units") || hpPlayer.HpValue <= 0f) + { + PlaceCommandedUnitsAndCalculateTargetPositions(); + timeSincePlace = 0f; + switchedToHold = false; + } + if (input.GetButton("Command Units") && hpPlayer.HpValue > 0f) + { + timeSincePlace += Time.deltaTime; + if (timeSincePlace > holdToHoldPositionTime && !switchedToHold) + { + switchedToHold = true; + MakeUnitsInBufferHoldPosition(); + } + } + if (input.GetButtonUp("Command Units") || hpPlayer.HpValue <= 0f) + { + commanding = false; + timeSincePlace = 0f; + } + } + for (int num = playerUnitsCommanding.Count - 1; num >= 0; num--) + { + PathfindMovementPlayerunit pathfindMovementPlayerunit = playerUnitsCommanding[num]; + pathfindMovementPlayerunit.HomePosition = base.transform.position; + if (!pathfindMovementPlayerunit.enabled) + { + playerUnitsCommanding.RemoveAt(num); + OnUnitRemove(pathfindMovementPlayerunit); + } + } + if (playerUnitsCommanding.Count > 0 && !input.GetButton("Command Units")) + { + commandingIndicator.SetActive(value: true); + } + else + { + commandingIndicator.SetActive(value: false); + } + if (!input.GetButton("Command Units") && rangeIndicator.Active) + { + rangeIndicator.Deactivate(); + } + } + + public void MakeUnitsInBufferHoldPosition() + { + if (playerUnitsCommandingBuffer.Count > 0) + { + audioManager.PlaySoundAsOneShot(audioSet.HoldPosition, 0.45f, 0.9f + Random.value * 0.2f, audioManager.mgSFX, 10); + } + foreach (PathfindMovementPlayerunit item in playerUnitsCommandingBuffer) + { + item.HoldPosition = true; + } + } + + public void ForceCommandingEnd() + { + if (commanding) + { + PlaceCommandedUnitsAndCalculateTargetPositions(); + } + } + + public void PlaceCommandedUnitsAndCalculateTargetPositions() + { + if (!commanding) + { + return; + } + if (playerUnitsCommanding.Count > 0) + { + audioManager.PlaySoundAsOneShot(audioSet.PlaceCommandingUnits, 0.35f, 0.9f + Random.value * 0.2f, audioManager.mgSFX, 10); + } + dropWaypointFx.Emit(drowWaypointParticleCount); + foreach (PathfindMovementPlayerunit item in playerUnitsCommanding) + { + OnUnitRemove(item); + } + foreach (AutoAttack item2 in autoAttacksToEnable) + { + if ((bool)item2 && item2.GetComponent().HpValue > 0f) + { + item2.enabled = true; + } + } + autoAttacksToEnable.Clear(); + for (int i = 0; i < playerUnitsCommanding.Count; i++) + { + Vector3 vector = Quaternion.AngleAxis((float)(i / playerUnitsCommanding.Count) * 360f, Vector3.up) * Vector3.right * unitDistanceMoveStep; + playerUnitsCommanding[i].HomePosition = astarPath.GetNearest(base.transform.position + vector + new Vector3(Random.value - 0.5f, 0f, Random.value - 0.5f) * unitDistanceMoveStep * 0.1f, nearestConstraint).position; + } + for (int j = 0; j < maxPositioningRepeats; j++) + { + bool flag = false; + for (int k = 0; k < playerUnitsCommanding.Count; k++) + { + for (int l = k + 1; l < playerUnitsCommanding.Count; l++) + { + if (!((playerUnitsCommanding[k].HomePosition - playerUnitsCommanding[l].HomePosition).magnitude > unitDistanceFromEachOther)) + { + Vector3 vector2 = (playerUnitsCommanding[k].HomePosition - playerUnitsCommanding[l].HomePosition).normalized * unitDistanceMoveStep; + playerUnitsCommanding[k].HomePosition = astarPath.GetNearest(playerUnitsCommanding[k].HomePosition + vector2, nearestConstraint).position; + playerUnitsCommanding[l].HomePosition = astarPath.GetNearest(playerUnitsCommanding[l].HomePosition - vector2, nearestConstraint).position; + flag = true; + } + } + } + if (!flag) + { + break; + } + } + playerUnitsCommandingBuffer.Clear(); + playerUnitsCommandingBuffer.AddRange(playerUnitsCommanding); + playerUnitsCommanding.Clear(); + } + + public void OnUnitAdd(TaggedObject _t) + { + PathfindMovementPlayerunit pathfindMovementPlayerunit = (PathfindMovementPlayerunit)_t.Hp.PathfindMovement; + if (!playerUnitsCommanding.Contains(pathfindMovementPlayerunit)) + { + audioManager.PlaySoundAsOneShot(audioSet.AddedUnitToCommanding, 0.55f, 0.7f + (float)playerUnitsCommanding.Count * 0.025f, audioManager.mgSFX, 50); + playerUnitsCommanding.Add(pathfindMovementPlayerunit); + pathfindMovementPlayerunit.FollowPlayer(_follow: true); + MaterialFlasherFX componentInChildren = pathfindMovementPlayerunit.GetComponentInChildren(); + if ((bool)componentInChildren) + { + componentInChildren.SetSelected(_selected: true); + } + _t.Tags.Add(TagManager.ETag.AUTO_Commanded); + if (playerUPgradeManager.commander) + { + pathfindMovementPlayerunit.movementSpeed *= UpgradeCommander.instance.moveSpeedMultiplicator; + } + AutoAttack[] components = _t.GetComponents(); + foreach (AutoAttack autoAttack in components) + { + autoAttack.enabled = false; + autoAttacksToEnable.Add(autoAttack); + } + } + } + + public void OnUnitRemove(PathfindMovementPlayerunit _p) + { + _p.FollowPlayer(_follow: false); + MaterialFlasherFX componentInChildren = _p.GetComponentInChildren(); + if ((bool)componentInChildren) + { + componentInChildren.SetSelected(_selected: false); + } + _p.GetComponent().Tags.Remove(TagManager.ETag.AUTO_Commanded); + if (playerUPgradeManager.commander) + { + _p.movementSpeed /= UpgradeCommander.instance.moveSpeedMultiplicator; + } + } +} diff --git a/Thronefall/Thronefall/Player/Hp.cs b/Thronefall/Thronefall/Player/Hp.cs new file mode 100644 index 0000000..d28b16f --- /dev/null +++ b/Thronefall/Thronefall/Player/Hp.cs @@ -0,0 +1,375 @@ +using System.Collections.Generic; +using Pathfinding; +using Pathfinding.RVO; +using UnityEngine; +using UnityEngine.Events; + +[RequireComponent(typeof(TaggedObject))] +public class Hp : MonoBehaviour +{ + public float maxHp; + + public bool getsKnockedOutInsteadOfDying; + + private float hp; + + private TaggedObject taggedObject; + + [Tooltip("The hight where enemies aim at and where hit indicators are spawned")] + public float hitFeedbackHeight; + + [Tooltip("This child object is enabled when this unit is alive.")] + public GameObject aliveVisuals; + + [Tooltip("This child object is enabled when this unit is knocked out.")] + public GameObject knockedOutVisuals; + + public GameObject fxToSpawnOnDeath; + + public Vector3 deathFxSpawnOffset; + + public Transform deathFxSpawnWithPosAndRotOf; + + [HideInInspector] + public UnityEvent OnHpChange = new UnityEvent(); + + [HideInInspector] + public UnityEvent OnRevive = new UnityEvent(); + + [HideInInspector] + public UnityEvent OnHeal = new UnityEvent(); + + [HideInInspector] + public UnityEvent OnReceiveDamage = new UnityEvent(); + + [HideInInspector] + public UnityEvent OnKillOrKnockout = new UnityEvent(); + + private AutoAttack[] autoAttacks; + + private ManualAttack[] manualAttacks; + + private PathfindMovement pathfindMovement; + + private RVOController rvoController; + + private PlayerMovement playerMovement; + + private NavmeshCut[] navmeshCut; + + private PlayerInteraction playerInteraction; + + public GameObject coin; + + public float coinSpawnOffset; + + public int coinCount; + + [SerializeField] + private Weapon spwanAttackOnDeath; + + private float damageMultiplyer = 1f; + + private float healingMultiplyer = 1f; + + public bool invulnerable; + + public float HpValue => hp; + + public float HpPercentage => hp / maxHp; + + public bool KnockedOut => hp <= 0f; + + public TaggedObject TaggedObj => taggedObject; + + public PathfindMovement PathfindMovement => pathfindMovement; + + public Weapon SpwanAttackOnDeath + { + get + { + return spwanAttackOnDeath; + } + set + { + spwanAttackOnDeath = value; + } + } + + public float DamageMultiplyer + { + get + { + return damageMultiplyer; + } + set + { + damageMultiplyer = value; + } + } + + public void ScaleHp(float _multiply) + { + hp *= _multiply; + maxHp *= _multiply; + } + + private void Start() + { + playerInteraction = GetComponent(); + taggedObject = GetComponent(); + autoAttacks = GetComponents(); + manualAttacks = GetComponents(); + pathfindMovement = GetComponent(); + rvoController = GetComponent(); + playerMovement = GetComponent(); + navmeshCut = GetComponentsInChildren(); + taggedObject.AddTag(TagManager.ETag.AUTO_Alive); + Revive(callReviveEvent: false); + ActivateAndDeactivateChildrenAndCompements(_alive: true); + if (PerkManager.instance.HealingSpiritsActive && (bool)taggedObject && taggedObject.Tags.Contains(TagManager.ETag.PlayerOwned)) + { + healingMultiplyer *= PerkManager.instance.healingSpirits_healMulti; + } + } + + private void ActivateAndDeactivateChildrenAndCompements(bool _alive) + { + if ((bool)aliveVisuals) + { + aliveVisuals.SetActive(_alive); + } + if ((bool)knockedOutVisuals) + { + knockedOutVisuals.SetActive(!_alive); + } + if (autoAttacks.Length != 0) + { + AutoAttack[] array = autoAttacks; + for (int i = 0; i < array.Length; i++) + { + array[i].enabled = _alive; + } + } + if (manualAttacks.Length != 0) + { + ManualAttack[] array2 = manualAttacks; + for (int i = 0; i < array2.Length; i++) + { + array2[i].enabled = _alive; + } + } + if ((bool)pathfindMovement) + { + pathfindMovement.enabled = _alive; + if (!_alive) + { + pathfindMovement.ClearCurrentPath(); + } + } + if ((bool)rvoController) + { + rvoController.enabled = _alive; + } + if ((bool)playerMovement) + { + playerMovement.enabled = _alive; + } + NavmeshCut[] array3 = navmeshCut; + for (int i = 0; i < array3.Length; i++) + { + array3[i].enabled = _alive; + } + if ((bool)playerInteraction) + { + playerInteraction.enabled = _alive; + } + } + + public void Revive(bool callReviveEvent = true, float healthPercentage = 1f) + { + if (hp <= 0f) + { + if (callReviveEvent) + { + OnRevive.Invoke(); + } + taggedObject.RemoveTag(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn); + taggedObject.AddTag(TagManager.ETag.AUTO_Alive); + ActivateAndDeactivateChildrenAndCompements(_alive: true); + hp = 0f; + } + else if (hp < maxHp) + { + OnHeal.Invoke(); + } + hp += maxHp * healthPercentage; + if (hp > maxHp) + { + hp = maxHp; + } + OnHpChange.Invoke(); + } + + public bool TakeDamage(float _amount, TaggedObject _damageComingFrom = null, bool causedByPlayer = false, bool invokeFeedbackEvents = true) + { + if (hp <= 0f) + { + return false; + } + if (invulnerable) + { + return false; + } + if (_amount <= 0f) + { + Heal(0f - _amount); + return false; + } + if ((bool)pathfindMovement) + { + pathfindMovement.GetAgroFromObject(_damageComingFrom); + } + hp -= _amount; + OnHpChange.Invoke(); + if (invokeFeedbackEvents) + { + OnReceiveDamage.Invoke(causedByPlayer); + } + if (hp <= 0f) + { + OnKillOrKnockout.Invoke(); + if ((bool)fxToSpawnOnDeath) + { + if ((bool)deathFxSpawnWithPosAndRotOf) + { + Object.Instantiate(fxToSpawnOnDeath, deathFxSpawnWithPosAndRotOf.position + deathFxSpawnOffset, deathFxSpawnWithPosAndRotOf.rotation, null); + } + else + { + Object.Instantiate(fxToSpawnOnDeath, base.transform.position + deathFxSpawnOffset, fxToSpawnOnDeath.transform.rotation, null); + } + } + if (getsKnockedOutInsteadOfDying) + { + taggedObject.RemoveTag(TagManager.ETag.AUTO_Alive); + taggedObject.AddTag(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn); + ActivateAndDeactivateChildrenAndCompements(_alive: false); + } + else + { + Object.Destroy(base.gameObject); + if ((bool)coin) + { + for (int i = 0; i < coinCount; i++) + { + if (i > 1) + { + Object.Instantiate(coin, base.transform.position + Vector3.up * coinSpawnOffset + Quaternion.Euler(0f, 45f * (float)i, 0f) * Vector3.forward * 2f, Quaternion.identity); + } + else + { + Object.Instantiate(coin, base.transform.position + Vector3.up * coinSpawnOffset, Quaternion.identity); + } + } + } + } + if ((bool)spwanAttackOnDeath) + { + spwanAttackOnDeath.Attack(base.transform.position, null, Vector3.zero, taggedObject, damageMultiplyer); + } + return true; + } + return false; + } + + public void Heal(float _amount) + { + if (!(hp <= 0f) && !(_amount <= 0f)) + { + hp += _amount * healingMultiplyer; + if (hp > maxHp) + { + hp = maxHp; + } + OnHpChange.Invoke(); + } + } + + public static void ReviveAllUnitsWithTag(List _mustHaveTags, List _mayNotHaveTags, float _healthPercentage = 1f) + { + List list = new List(); + TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); + for (int i = 0; i < list.Count; i++) + { + list[i].Hp.Revive(callReviveEvent: true, _healthPercentage); + } + } + + public static void MarkDestroyedBuildingsAsDontRevive(List _mustHaveTags, List _mayNotHaveTags, float _healthPercentage = 1f) + { + List list = new List(); + TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); + for (int i = 0; i < list.Count; i++) + { + if (list[i].Tags.Contains(TagManager.ETag.AUTO_KnockedOutAndHealOnDawn)) + { + list[i].GetComponentInParent().Interactor.OnKnockOut(); + if (!list[i].Tags.Contains(TagManager.ETag.AUTO_NoReviveNextMorning)) + { + list[i].Tags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); + } + else + { + list[i].Tags.Remove(TagManager.ETag.AUTO_NoReviveNextMorning); + } + } + } + } + + public static void KillAllUnitsWithTag(List _mustHaveTags, List _mayNotHaveTags) + { + List list = new List(); + TagManager.instance.FindAllTaggedObjectsWithTags(list, _mustHaveTags, _mayNotHaveTags); + for (int i = 0; i < list.Count; i++) + { + list[i].Hp.TakeDamage(float.MaxValue); + } + } + + public static void ReviveAllKnockedOutPlayerUnitsAndBuildings() + { + if (!PerkManager.instance.DestructionGodActive) + { + List list = new List(); + List list2 = new List(); + list.Add(TagManager.ETag.PlayerOwned); + list2.Add(TagManager.ETag.AUTO_NoReviveNextMorning); + ReviveAllUnitsWithTag(list, list2); + return; + } + List list3 = new List(); + List mayNotHaveTags = new List(); + list3.Add(TagManager.ETag.PlayerOwned); + list3.Add(TagManager.ETag.Building); + MarkDestroyedBuildingsAsDontRevive(list3, mayNotHaveTags); + List list4 = new List(); + mayNotHaveTags = new List(); + list4.Add(TagManager.ETag.PlayerOwned); + mayNotHaveTags.Add(TagManager.ETag.Building); + mayNotHaveTags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); + ReviveAllUnitsWithTag(list4, mayNotHaveTags); + mayNotHaveTags.Clear(); + mayNotHaveTags.Add(TagManager.ETag.AUTO_NoReviveNextMorning); + list4.Add(TagManager.ETag.Building); + ReviveAllUnitsWithTag(list4, mayNotHaveTags, 0.33f); + } + + public static void KillAllEnemyUnits() + { + List list = new List(); + List mayNotHaveTags = new List(); + list.Add(TagManager.ETag.EnemyOwned); + KillAllUnitsWithTag(list, mayNotHaveTags); + } +} diff --git a/Thronefall/Thronefall/Player/PlayerAttack.cs b/Thronefall/Thronefall/Player/PlayerAttack.cs new file mode 100644 index 0000000..a3f84ef --- /dev/null +++ b/Thronefall/Thronefall/Player/PlayerAttack.cs @@ -0,0 +1,30 @@ +using Rewired; +using UnityEngine; + +public class PlayerAttack : MonoBehaviour +{ + public AttackCooldownAnimation ui; + + private ManualAttack attack; + + private Player input; + + private void Start() + { + input = ReInput.players.GetPlayer(0); + } + + private void Update() + { + if ((bool)attack) + { + attack.Tick(); + ui.SetCurrentCooldownPercentage(attack.CooldownPercentage); + } + } + + public void AssignManualAttack(ManualAttack target) + { + attack = target; + } +} diff --git a/Thronefall/Thronefall/Player/PlayerHpRegen.cs b/Thronefall/Thronefall/Player/PlayerHpRegen.cs new file mode 100644 index 0000000..d739844 --- /dev/null +++ b/Thronefall/Thronefall/Player/PlayerHpRegen.cs @@ -0,0 +1,60 @@ +using UnityEngine; + +[RequireComponent(typeof(Hp))] +public class PlayerHpRegen : MonoBehaviour +{ + private Hp hp; + + public float delayTillRegenerationStarts; + + public float timeToRegenerateFullHealth; + + private float timeSinceLastTakenDamage; + + private float hpRemember; + + private bool heavyArmorEquipped; + + private bool godsLotionEquipped; + + private bool godOfDeseaseActive; + + [SerializeField] + private Equippable heavyArmorPerk; + + [SerializeField] + private Equippable godsLotionPerk; + + private void Start() + { + hp = GetComponent(); + hpRemember = hp.HpValue; + heavyArmorEquipped = PerkManager.IsEquipped(heavyArmorPerk); + godsLotionEquipped = PerkManager.IsEquipped(godsLotionPerk); + if (heavyArmorEquipped) + { + timeToRegenerateFullHealth *= PerkManager.instance.heavyArmor_HpMultiplyer; + hp.maxHp *= PerkManager.instance.heavyArmor_HpMultiplyer; + hp.Heal(float.MaxValue); + } + if (godsLotionEquipped) + { + delayTillRegenerationStarts *= PerkManager.instance.godsLotion_RegenDelayMultiplyer; + timeToRegenerateFullHealth /= PerkManager.instance.godsLotion_RegenRateMultiplyer; + } + } + + private void Update() + { + timeSinceLastTakenDamage += Time.deltaTime; + if (hp.HpValue < hpRemember) + { + timeSinceLastTakenDamage = 0f; + } + hpRemember = hp.HpValue; + if (timeSinceLastTakenDamage >= delayTillRegenerationStarts) + { + hp.Heal(hp.maxHp / timeToRegenerateFullHealth * Time.deltaTime); + } + } +} diff --git a/Thronefall/Thronefall/Player/PlayerInteraction.cs b/Thronefall/Thronefall/Player/PlayerInteraction.cs new file mode 100644 index 0000000..184045b --- /dev/null +++ b/Thronefall/Thronefall/Player/PlayerInteraction.cs @@ -0,0 +1,205 @@ +using Rewired; +using UnityEngine; +using UnityEngine.Events; + +public class PlayerInteraction : MonoBehaviour +{ + private int balance; + + public float coinMagnetRadius = 10f; + + public LayerMask coinLayer; + + public float interactionRadius = 3f; + + public LayerMask interactorLayer; + + private ManualAttack manualAttack; + + private int networth; + + public PlayerCharacterAudio playerAudio; + + public GameObject coinSpendFX; + + public Transform coinSpendFXOrigin; + + private TagManager tagManager; + + [HideInInspector] + public UnityEvent onBalanceGain = new UnityEvent(); + + [HideInInspector] + public UnityEvent onBalanceSpend = new UnityEvent(); + + [HideInInspector] + public UnityEvent onFocusPaymentInteraction = new UnityEvent(); + + [HideInInspector] + public UnityEvent onUnfocusPaymentInteraction = new UnityEvent(); + + public static PlayerInteraction instance; + + private InteractorBase focussedInteractor; + + private Player input; + + public int Networth => networth; + + public ManualAttack EquippedWeapon => manualAttack; + + public bool IsFreeToCallNight + { + get + { + if (!LocalGamestate.Instance.PlayerFrozen && focussedInteractor == null && tagManager.CountObjectsWithTag(TagManager.ETag.CastleCenter) > 0 && TutorialManager.AllowStartingTheNight && !EnemySpawner.instance.MatchOver) + { + return LocalGamestate.Instance.CurrentState == LocalGamestate.State.InMatch; + } + return false; + } + } + + public int Balance => balance; + + public int TrueBalance => balance + TagManager.instance.coins.Count + CoinSpawner.AllCoinsLeftToBeSpawned; + + public InteractorBase FocussedInteractor => focussedInteractor; + + private void Awake() + { + instance = this; + } + + public void EquipWeapon(ManualAttack _manualAttack) + { + manualAttack = _manualAttack; + playerAudio.OnWeaponEquip(manualAttack); + } + + private void Start() + { + input = ReInput.players.GetPlayer(0); + tagManager = TagManager.instance; + } + + private void Update() + { + FetchCoins(); + FetchInteractors(); + RunInteraction(); + } + + private void RunInteraction() + { + if (LocalGamestate.Instance.PlayerFrozen) + { + return; + } + if (input.GetButtonDown("Interact")) + { + if ((bool)focussedInteractor) + { + focussedInteractor.InteractionBegin(this); + } + else if ((bool)manualAttack) + { + manualAttack.TryToAttack(); + } + } + if (input.GetButton("Interact") && (bool)focussedInteractor) + { + focussedInteractor.InteractionHold(this); + } + if (input.GetButtonUp("Interact") && (bool)focussedInteractor) + { + focussedInteractor.InteractionEnd(this); + } + if (input.GetButton("Preview Build Options")) + { + BuildingInteractor.displayAllBuildPreviews = true; + } + else + { + BuildingInteractor.displayAllBuildPreviews = false; + } + } + + private void FetchInteractors() + { + if (input.GetButton("Call Night") || input.GetButton("Interact") || ((bool)focussedInteractor && focussedInteractor is BuildingInteractor && (focussedInteractor as BuildingInteractor).IsWaitingForChoice)) + { + return; + } + Collider[] array = Physics.OverlapSphere(base.transform.position, interactionRadius, interactorLayer); + InteractorBase interactorBase = null; + float num = float.PositiveInfinity; + Collider[] array2 = array; + foreach (Collider collider in array2) + { + InteractorBase component = collider.GetComponent(); + if ((bool)component && component.CanBeInteractedWith) + { + float num2 = Vector3.Distance(base.transform.position, collider.ClosestPoint(base.transform.position)); + if (num2 < num) + { + interactorBase = component; + num = num2; + } + } + } + if ((bool)focussedInteractor && focussedInteractor != interactorBase) + { + if (focussedInteractor is BuildingInteractor) + { + onUnfocusPaymentInteraction.Invoke(); + } + focussedInteractor.Unfocus(this); + focussedInteractor = null; + } + if ((bool)interactorBase && interactorBase != focussedInteractor) + { + if (interactorBase is BuildingInteractor) + { + onFocusPaymentInteraction.Invoke(); + } + interactorBase.Focus(this); + focussedInteractor = interactorBase; + } + } + + private void FetchCoins() + { + Collider[] array = Physics.OverlapSphere(base.transform.position, coinMagnetRadius, coinLayer); + for (int i = 0; i < array.Length; i++) + { + Coin component = array[i].GetComponent(); + if (component != null && component.IsFree) + { + component.SetTarget(this); + } + } + } + + public void AddCoin(int amount = 1) + { + balance += amount; + networth += amount; + onBalanceGain.Invoke(amount); + } + + public void SpendCoins(int amount) + { + balance -= amount; + onBalanceSpend.Invoke(amount); + Object.Instantiate(coinSpendFX, coinSpendFXOrigin.position, coinSpendFXOrigin.rotation, base.transform); + } + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.blue; + Gizmos.DrawWireSphere(base.transform.position, interactionRadius); + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(base.transform.position, coinMagnetRadius); + } +} diff --git a/Thronefall/Thronefall/Player/PlayerMovement.cs b/Thronefall/Thronefall/Player/PlayerMovement.cs new file mode 100644 index 0000000..db7c18a --- /dev/null +++ b/Thronefall/Thronefall/Player/PlayerMovement.cs @@ -0,0 +1,152 @@ +using System.Collections; +using Pathfinding.RVO; +using Rewired; +using UnityEngine; + +[RequireComponent(typeof(CharacterController))] +[RequireComponent(typeof(RVOController))] +public class PlayerMovement : MonoBehaviour +{ + public float speed = 4f; + + public float sprintSpeed = 12f; + + public Transform meshParent; + + public float maxMeshRotationSpeed = 360f; + + public Animator meshAnimator; + + private Hp hp; + + private Transform viewTransform; + + private CharacterController controller; + + private Player input; + + private Quaternion desiredMeshRotation; + + private RVOController rvoController; + + private float yVelocity; + + private bool heavyArmorEquipped; + + private bool racingHorseEquipped; + + private bool moving; + + private bool sprinting; + + private bool sprintingToggledOn; + + public static PlayerMovement instance; + + [SerializeField] + private Equippable heavyArmorPerk; + + [SerializeField] + private Equippable warHorsePerk; + + private Vector3 velocity; + + public bool Moving => moving; + + public bool Sprinting => sprinting; + + public Vector3 Velocity => velocity; + + private void Awake() + { + instance = this; + } + + public void TeleportTo(Vector3 _position) + { + controller.enabled = false; + controller.transform.position = _position; + StartCoroutine(EnableControllerNextFrame(controller)); + } + + private void Start() + { + PlayerManager.RegisterPlayer(this); + viewTransform = Camera.main.transform; + controller = GetComponent(); + input = ReInput.players.GetPlayer(0); + rvoController = GetComponent(); + hp = GetComponent(); + heavyArmorEquipped = PerkManager.IsEquipped(heavyArmorPerk); + racingHorseEquipped = PerkManager.IsEquipped(warHorsePerk); + } + + private void Update() + { + Vector2 vector = new Vector2(input.GetAxis("Move Vertical"), input.GetAxis("Move Horizontal")); + if (LocalGamestate.Instance.PlayerFrozen) + { + vector = Vector2.zero; + } + Vector3 normalized = Vector3.ProjectOnPlane(viewTransform.forward, Vector3.up).normalized; + Vector3 normalized2 = Vector3.ProjectOnPlane(viewTransform.right, Vector3.up).normalized; + velocity = Vector3.zero; + velocity += normalized * vector.x; + velocity += normalized2 * vector.y; + velocity = Vector3.ClampMagnitude(velocity, 1f); + if (input.GetButtonDown("Sprint Toggle")) + { + sprintingToggledOn = !sprintingToggledOn; + } + if (sprintingToggledOn && input.GetButton("Sprint")) + { + sprintingToggledOn = false; + } + sprinting = (input.GetButton("Sprint") || sprintingToggledOn) && hp.HpPercentage >= 1f; + velocity *= (sprinting ? sprintSpeed : speed); + if (heavyArmorEquipped && DayNightCycle.Instance.CurrentTimestate == DayNightCycle.Timestate.Night) + { + velocity *= PerkManager.instance.heavyArmor_SpeedMultiplyer; + } + if (racingHorseEquipped) + { + velocity *= PerkManager.instance.racingHorse_SpeedMultiplyer; + } + rvoController.velocity = velocity; + moving = velocity.sqrMagnitude > 0.1f; + if (moving) + { + desiredMeshRotation = Quaternion.LookRotation(velocity.normalized, Vector3.up); + } + if (desiredMeshRotation != meshParent.rotation) + { + meshParent.rotation = Quaternion.RotateTowards(meshParent.rotation, desiredMeshRotation, maxMeshRotationSpeed * Time.deltaTime); + } + meshAnimator.SetBool("Moving", moving); + meshAnimator.SetBool("Sprinting", sprinting); + if (controller.enabled) + { + if (controller.isGrounded) + { + yVelocity = 0f; + } + else + { + yVelocity += -9.81f * Time.deltaTime; + } + velocity += Vector3.up * yVelocity; + controller.Move(velocity * Time.deltaTime); + } + } + + private void OnDisable() + { + meshAnimator.SetBool("Moving", value: false); + } + + private IEnumerator EnableControllerNextFrame(CharacterController controller) + { + yield return new WaitForEndOfFrame(); + controller.enabled = true; + } +} diff --git a/Thronefall/Thronefall/Player/PlayerUpgradeManager.cs b/Thronefall/Thronefall/Player/PlayerUpgradeManager.cs new file mode 100644 index 0000000..5a07815 --- /dev/null +++ b/Thronefall/Thronefall/Player/PlayerUpgradeManager.cs @@ -0,0 +1,70 @@ +using UnityEngine; + +public class PlayerUpgradeManager : MonoBehaviour, DayNightCycle.IDaytimeSensitive +{ + public static PlayerUpgradeManager instance; + + public float playerDamageMultiplyer = 1f; + + public bool assassinsTraining; + + public bool godlyCurse; + + public bool magicArmor; + + public bool commander; + + public float godlyCurseDamageMultiplyer = 1.5f; + + private int damageIncreases; + + [SerializeField] + private Equippable glassCanon; + + [SerializeField] + private float glassCanon_dmgMulti = 1.5f; + + private void Awake() + { + instance = this; + } + + private void Start() + { + if ((bool)DayNightCycle.Instance) + { + DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); + } + if (PerkManager.instance.CommanderModeActive) + { + playerDamageMultiplyer *= PerkManager.instance.commanderModeSelfDmgMulti; + } + if (PerkManager.instance.GlassCanonActive) + { + playerDamageMultiplyer *= PerkManager.instance.glassCanon_dmgMulti; + } + } + + public void OnDusk() + { + GetStrongerIfInWarriorMode(); + } + + public void OnDawn_AfterSunrise() + { + } + + public void OnDawn_BeforeSunrise() + { + GetStrongerIfInWarriorMode(); + } + + public void GetStrongerIfInWarriorMode() + { + while (PerkManager.instance.WarriorModeActive && damageIncreases < EnemySpawner.instance.Wavenumber) + { + damageIncreases++; + playerDamageMultiplyer *= Mathf.Pow(PerkManager.instance.warriorModeSelfDmgMultiMax, 1f / (float)EnemySpawner.instance.WaveCount); + } + } +} diff --git a/Thronefall/Thronefall/PlayerAttack.cs b/Thronefall/Thronefall/PlayerAttack.cs deleted file mode 100644 index a3f84ef..0000000 --- a/Thronefall/Thronefall/PlayerAttack.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Rewired; -using UnityEngine; - -public class PlayerAttack : MonoBehaviour -{ - public AttackCooldownAnimation ui; - - private ManualAttack attack; - - private Player input; - - private void Start() - { - input = ReInput.players.GetPlayer(0); - } - - private void Update() - { - if ((bool)attack) - { - attack.Tick(); - ui.SetCurrentCooldownPercentage(attack.CooldownPercentage); - } - } - - public void AssignManualAttack(ManualAttack target) - { - attack = target; - } -} diff --git a/Thronefall/Thronefall/PlayerHpRegen.cs b/Thronefall/Thronefall/PlayerHpRegen.cs deleted file mode 100644 index d739844..0000000 --- a/Thronefall/Thronefall/PlayerHpRegen.cs +++ /dev/null @@ -1,60 +0,0 @@ -using UnityEngine; - -[RequireComponent(typeof(Hp))] -public class PlayerHpRegen : MonoBehaviour -{ - private Hp hp; - - public float delayTillRegenerationStarts; - - public float timeToRegenerateFullHealth; - - private float timeSinceLastTakenDamage; - - private float hpRemember; - - private bool heavyArmorEquipped; - - private bool godsLotionEquipped; - - private bool godOfDeseaseActive; - - [SerializeField] - private Equippable heavyArmorPerk; - - [SerializeField] - private Equippable godsLotionPerk; - - private void Start() - { - hp = GetComponent(); - hpRemember = hp.HpValue; - heavyArmorEquipped = PerkManager.IsEquipped(heavyArmorPerk); - godsLotionEquipped = PerkManager.IsEquipped(godsLotionPerk); - if (heavyArmorEquipped) - { - timeToRegenerateFullHealth *= PerkManager.instance.heavyArmor_HpMultiplyer; - hp.maxHp *= PerkManager.instance.heavyArmor_HpMultiplyer; - hp.Heal(float.MaxValue); - } - if (godsLotionEquipped) - { - delayTillRegenerationStarts *= PerkManager.instance.godsLotion_RegenDelayMultiplyer; - timeToRegenerateFullHealth /= PerkManager.instance.godsLotion_RegenRateMultiplyer; - } - } - - private void Update() - { - timeSinceLastTakenDamage += Time.deltaTime; - if (hp.HpValue < hpRemember) - { - timeSinceLastTakenDamage = 0f; - } - hpRemember = hp.HpValue; - if (timeSinceLastTakenDamage >= delayTillRegenerationStarts) - { - hp.Heal(hp.maxHp / timeToRegenerateFullHealth * Time.deltaTime); - } - } -} diff --git a/Thronefall/Thronefall/PlayerInteraction.cs b/Thronefall/Thronefall/PlayerInteraction.cs deleted file mode 100644 index 184045b..0000000 --- a/Thronefall/Thronefall/PlayerInteraction.cs +++ /dev/null @@ -1,205 +0,0 @@ -using Rewired; -using UnityEngine; -using UnityEngine.Events; - -public class PlayerInteraction : MonoBehaviour -{ - private int balance; - - public float coinMagnetRadius = 10f; - - public LayerMask coinLayer; - - public float interactionRadius = 3f; - - public LayerMask interactorLayer; - - private ManualAttack manualAttack; - - private int networth; - - public PlayerCharacterAudio playerAudio; - - public GameObject coinSpendFX; - - public Transform coinSpendFXOrigin; - - private TagManager tagManager; - - [HideInInspector] - public UnityEvent onBalanceGain = new UnityEvent(); - - [HideInInspector] - public UnityEvent onBalanceSpend = new UnityEvent(); - - [HideInInspector] - public UnityEvent onFocusPaymentInteraction = new UnityEvent(); - - [HideInInspector] - public UnityEvent onUnfocusPaymentInteraction = new UnityEvent(); - - public static PlayerInteraction instance; - - private InteractorBase focussedInteractor; - - private Player input; - - public int Networth => networth; - - public ManualAttack EquippedWeapon => manualAttack; - - public bool IsFreeToCallNight - { - get - { - if (!LocalGamestate.Instance.PlayerFrozen && focussedInteractor == null && tagManager.CountObjectsWithTag(TagManager.ETag.CastleCenter) > 0 && TutorialManager.AllowStartingTheNight && !EnemySpawner.instance.MatchOver) - { - return LocalGamestate.Instance.CurrentState == LocalGamestate.State.InMatch; - } - return false; - } - } - - public int Balance => balance; - - public int TrueBalance => balance + TagManager.instance.coins.Count + CoinSpawner.AllCoinsLeftToBeSpawned; - - public InteractorBase FocussedInteractor => focussedInteractor; - - private void Awake() - { - instance = this; - } - - public void EquipWeapon(ManualAttack _manualAttack) - { - manualAttack = _manualAttack; - playerAudio.OnWeaponEquip(manualAttack); - } - - private void Start() - { - input = ReInput.players.GetPlayer(0); - tagManager = TagManager.instance; - } - - private void Update() - { - FetchCoins(); - FetchInteractors(); - RunInteraction(); - } - - private void RunInteraction() - { - if (LocalGamestate.Instance.PlayerFrozen) - { - return; - } - if (input.GetButtonDown("Interact")) - { - if ((bool)focussedInteractor) - { - focussedInteractor.InteractionBegin(this); - } - else if ((bool)manualAttack) - { - manualAttack.TryToAttack(); - } - } - if (input.GetButton("Interact") && (bool)focussedInteractor) - { - focussedInteractor.InteractionHold(this); - } - if (input.GetButtonUp("Interact") && (bool)focussedInteractor) - { - focussedInteractor.InteractionEnd(this); - } - if (input.GetButton("Preview Build Options")) - { - BuildingInteractor.displayAllBuildPreviews = true; - } - else - { - BuildingInteractor.displayAllBuildPreviews = false; - } - } - - private void FetchInteractors() - { - if (input.GetButton("Call Night") || input.GetButton("Interact") || ((bool)focussedInteractor && focussedInteractor is BuildingInteractor && (focussedInteractor as BuildingInteractor).IsWaitingForChoice)) - { - return; - } - Collider[] array = Physics.OverlapSphere(base.transform.position, interactionRadius, interactorLayer); - InteractorBase interactorBase = null; - float num = float.PositiveInfinity; - Collider[] array2 = array; - foreach (Collider collider in array2) - { - InteractorBase component = collider.GetComponent(); - if ((bool)component && component.CanBeInteractedWith) - { - float num2 = Vector3.Distance(base.transform.position, collider.ClosestPoint(base.transform.position)); - if (num2 < num) - { - interactorBase = component; - num = num2; - } - } - } - if ((bool)focussedInteractor && focussedInteractor != interactorBase) - { - if (focussedInteractor is BuildingInteractor) - { - onUnfocusPaymentInteraction.Invoke(); - } - focussedInteractor.Unfocus(this); - focussedInteractor = null; - } - if ((bool)interactorBase && interactorBase != focussedInteractor) - { - if (interactorBase is BuildingInteractor) - { - onFocusPaymentInteraction.Invoke(); - } - interactorBase.Focus(this); - focussedInteractor = interactorBase; - } - } - - private void FetchCoins() - { - Collider[] array = Physics.OverlapSphere(base.transform.position, coinMagnetRadius, coinLayer); - for (int i = 0; i < array.Length; i++) - { - Coin component = array[i].GetComponent(); - if (component != null && component.IsFree) - { - component.SetTarget(this); - } - } - } - - public void AddCoin(int amount = 1) - { - balance += amount; - networth += amount; - onBalanceGain.Invoke(amount); - } - - public void SpendCoins(int amount) - { - balance -= amount; - onBalanceSpend.Invoke(amount); - Object.Instantiate(coinSpendFX, coinSpendFXOrigin.position, coinSpendFXOrigin.rotation, base.transform); - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.blue; - Gizmos.DrawWireSphere(base.transform.position, interactionRadius); - Gizmos.color = Color.yellow; - Gizmos.DrawWireSphere(base.transform.position, coinMagnetRadius); - } -} diff --git a/Thronefall/Thronefall/PlayerMovement.cs b/Thronefall/Thronefall/PlayerMovement.cs deleted file mode 100644 index db7c18a..0000000 --- a/Thronefall/Thronefall/PlayerMovement.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System.Collections; -using Pathfinding.RVO; -using Rewired; -using UnityEngine; - -[RequireComponent(typeof(CharacterController))] -[RequireComponent(typeof(RVOController))] -public class PlayerMovement : MonoBehaviour -{ - public float speed = 4f; - - public float sprintSpeed = 12f; - - public Transform meshParent; - - public float maxMeshRotationSpeed = 360f; - - public Animator meshAnimator; - - private Hp hp; - - private Transform viewTransform; - - private CharacterController controller; - - private Player input; - - private Quaternion desiredMeshRotation; - - private RVOController rvoController; - - private float yVelocity; - - private bool heavyArmorEquipped; - - private bool racingHorseEquipped; - - private bool moving; - - private bool sprinting; - - private bool sprintingToggledOn; - - public static PlayerMovement instance; - - [SerializeField] - private Equippable heavyArmorPerk; - - [SerializeField] - private Equippable warHorsePerk; - - private Vector3 velocity; - - public bool Moving => moving; - - public bool Sprinting => sprinting; - - public Vector3 Velocity => velocity; - - private void Awake() - { - instance = this; - } - - public void TeleportTo(Vector3 _position) - { - controller.enabled = false; - controller.transform.position = _position; - StartCoroutine(EnableControllerNextFrame(controller)); - } - - private void Start() - { - PlayerManager.RegisterPlayer(this); - viewTransform = Camera.main.transform; - controller = GetComponent(); - input = ReInput.players.GetPlayer(0); - rvoController = GetComponent(); - hp = GetComponent(); - heavyArmorEquipped = PerkManager.IsEquipped(heavyArmorPerk); - racingHorseEquipped = PerkManager.IsEquipped(warHorsePerk); - } - - private void Update() - { - Vector2 vector = new Vector2(input.GetAxis("Move Vertical"), input.GetAxis("Move Horizontal")); - if (LocalGamestate.Instance.PlayerFrozen) - { - vector = Vector2.zero; - } - Vector3 normalized = Vector3.ProjectOnPlane(viewTransform.forward, Vector3.up).normalized; - Vector3 normalized2 = Vector3.ProjectOnPlane(viewTransform.right, Vector3.up).normalized; - velocity = Vector3.zero; - velocity += normalized * vector.x; - velocity += normalized2 * vector.y; - velocity = Vector3.ClampMagnitude(velocity, 1f); - if (input.GetButtonDown("Sprint Toggle")) - { - sprintingToggledOn = !sprintingToggledOn; - } - if (sprintingToggledOn && input.GetButton("Sprint")) - { - sprintingToggledOn = false; - } - sprinting = (input.GetButton("Sprint") || sprintingToggledOn) && hp.HpPercentage >= 1f; - velocity *= (sprinting ? sprintSpeed : speed); - if (heavyArmorEquipped && DayNightCycle.Instance.CurrentTimestate == DayNightCycle.Timestate.Night) - { - velocity *= PerkManager.instance.heavyArmor_SpeedMultiplyer; - } - if (racingHorseEquipped) - { - velocity *= PerkManager.instance.racingHorse_SpeedMultiplyer; - } - rvoController.velocity = velocity; - moving = velocity.sqrMagnitude > 0.1f; - if (moving) - { - desiredMeshRotation = Quaternion.LookRotation(velocity.normalized, Vector3.up); - } - if (desiredMeshRotation != meshParent.rotation) - { - meshParent.rotation = Quaternion.RotateTowards(meshParent.rotation, desiredMeshRotation, maxMeshRotationSpeed * Time.deltaTime); - } - meshAnimator.SetBool("Moving", moving); - meshAnimator.SetBool("Sprinting", sprinting); - if (controller.enabled) - { - if (controller.isGrounded) - { - yVelocity = 0f; - } - else - { - yVelocity += -9.81f * Time.deltaTime; - } - velocity += Vector3.up * yVelocity; - controller.Move(velocity * Time.deltaTime); - } - } - - private void OnDisable() - { - meshAnimator.SetBool("Moving", value: false); - } - - private IEnumerator EnableControllerNextFrame(CharacterController controller) - { - yield return new WaitForEndOfFrame(); - controller.enabled = true; - } -} diff --git a/Thronefall/Thronefall/PlayerUpgradeManager.cs b/Thronefall/Thronefall/PlayerUpgradeManager.cs deleted file mode 100644 index 5a07815..0000000 --- a/Thronefall/Thronefall/PlayerUpgradeManager.cs +++ /dev/null @@ -1,70 +0,0 @@ -using UnityEngine; - -public class PlayerUpgradeManager : MonoBehaviour, DayNightCycle.IDaytimeSensitive -{ - public static PlayerUpgradeManager instance; - - public float playerDamageMultiplyer = 1f; - - public bool assassinsTraining; - - public bool godlyCurse; - - public bool magicArmor; - - public bool commander; - - public float godlyCurseDamageMultiplyer = 1.5f; - - private int damageIncreases; - - [SerializeField] - private Equippable glassCanon; - - [SerializeField] - private float glassCanon_dmgMulti = 1.5f; - - private void Awake() - { - instance = this; - } - - private void Start() - { - if ((bool)DayNightCycle.Instance) - { - DayNightCycle.Instance.RegisterDaytimeSensitiveObject(this); - } - if (PerkManager.instance.CommanderModeActive) - { - playerDamageMultiplyer *= PerkManager.instance.commanderModeSelfDmgMulti; - } - if (PerkManager.instance.GlassCanonActive) - { - playerDamageMultiplyer *= PerkManager.instance.glassCanon_dmgMulti; - } - } - - public void OnDusk() - { - GetStrongerIfInWarriorMode(); - } - - public void OnDawn_AfterSunrise() - { - } - - public void OnDawn_BeforeSunrise() - { - GetStrongerIfInWarriorMode(); - } - - public void GetStrongerIfInWarriorMode() - { - while (PerkManager.instance.WarriorModeActive && damageIncreases < EnemySpawner.instance.Wavenumber) - { - damageIncreases++; - playerDamageMultiplyer *= Mathf.Pow(PerkManager.instance.warriorModeSelfDmgMultiMax, 1f / (float)EnemySpawner.instance.WaveCount); - } - } -} -- cgit v1.1-26-g67d0