IEnumerator SetupPerks() { yield return(new WaitUntil(() => ItemDatabase.Instance.Loaded)); if (PerkController != null) { foreach (var savedPerk in stats.PersistentPlayerData.UnlockedPerks) { PerkController.AddPerk(savedPerk); } Debug.Log("Player's perks have been added."); } else { Debug.LogError("No Perk Controller was found."); } }
void HandleNewControlledObject() { // So many try-catches ;) try { lastControlled.GetComponent <IDamageable>().OnHealthChanged -= HandleHealthChange; lastControlled.GetComponent <CharacterMotor>().TakenOver(); } catch (Exception e) { Debug.LogWarning("Could not unsubscribe OnHealthChange from last controlled object. Ignore if this is the first controller."); } try { GetControlledIDamagable().OnHealthChanged += HandleHealthChange; OnHealthChange?.Invoke(GetControlledIDamagable()); } catch (NullReferenceException e) { Debug.LogWarning($"Could not subscribe to OnHealthChanged for currently controlled object as {controlledObject.name} does not have an IDamagable interface."); } try { currentCharacterMotor = controlledObject.GetComponent <CharacterMotor>(); AbilityController = controlledObject.GetComponent <AbilityController>(); currentCharacterMotor.TakenOver(); } catch (Exception e) { Debug.LogWarning("No character motor or ability controller found on controlled object."); } lastControlled = controlledObject; try { if (currentWeapon != null) { currentWeapon.IsPlayer = false; } currentWeapon = controlledObject.GetComponentInChildren <Weapon>(); currentWeapon.IsPlayer = true; OnWeaponChanged?.Invoke(currentWeapon); if (!currentCharacterMotor.previouslyControlled && PerkController.CanUse("jugg")) { var enemyComp = currentCharacterMotor.GetComponent <Enemy>(); enemyComp.Health = enemyComp.MaxHealth; OnHealthChange?.Invoke(GetControlledIDamagable()); } OnTakeover?.Invoke(); } catch (Exception e) { Debug.LogWarning("No weapon found on controlled object."); } jumpController.SetCurrentControlledEnemy(controlledObject); }