Example #1
0
    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.");
        }
    }
Example #2
0
    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);
    }