Pedro Gomes c286d28fd4 Mage Updates & bugfixing
- Added an option for instant effects to generate class resource per hit for the user
- fixed an issue where some extended ability scripts were not spending all required resources (inheritance issue)
- Added a class-based melee ability for Mages
- Added a class Signature ability for Mages to make use of class resource
2024-07-23 18:24:48 +01:00

85 lines
2.5 KiB
C#

using Photon.Pun;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
//[CreateAssetMenu(fileName = "BaseAbility", menuName = "RiftMayhem/AbilitySystem/Abilities/Base Ability", order = 1)]
public class BaseAbility : ScriptableObject
{
public Sprite Icon;
public List<TargetTag> targettingTags = new List<TargetTag>();
public List<GameTag> tags = new List<GameTag>();
public List<BaseEffect> abilityEffects = new List<BaseEffect>();
[Space]
public float castTime;
public float manaCost;
public float healthCost = 0;
public float classResourceCost = 0;
public float cooldown;
public bool castableWhileMoving;
public AbilityAnimationType animationType;
public virtual void Execute(PhotonView user, Taggable userTag)
{
SpendResourcesNecessary(user, userTag);
//for (int i = 0; i < abilityEffects.Count; i++)
//{
// Debug.Log($"Ability {this.name} applied {abilityEffects[i].name} effect at xtarget");
//}
}
public virtual void Execute(PhotonView user, Taggable userTag, Vector3 point)
{
SpendResourcesNecessary(user, userTag);
}
public virtual void Execute(PhotonView user, Taggable userTag, Transform target)
{
SpendResourcesNecessary(user, userTag);
}
public virtual void SpendResourcesNecessary(PhotonView user, Taggable userTag)
{
user.GetComponent<Mana>().ChangeValue(-manaCost);
user.GetComponent<Health>().ChangeValue(-healthCost);
user.GetComponent<ClassResource>()?.ChangeValue(-classResourceCost);
}
private void OnValidate()
{
InitializeUniqueTags();
}
private void OnEnable()
{
InitializeUniqueTags();
}
public void InitializeUniqueTags()
{
tags.Clear();
// Iterate through each effect and add unique GameTags to uniqueTags list
foreach (var effect in abilityEffects)
{
if (effect != null)
{
foreach (var tag in effect.tags)
{
if (!tags.Contains(tag))
{
tags.Add(tag);
}
}
foreach (var influencingStat in effect.influencingStats)
{
if(!tags.Contains(influencingStat.statTag))
{
tags.Add(influencingStat.statTag);
}
}
}
}
}
}