ability+effects runtime instances
This commit is contained in:
parent
186f6efd10
commit
ccda634b89
@ -1,11 +0,0 @@
|
|||||||
fileFormatVersion: 2
|
|
||||||
guid: ecbc603708f7b784ab0a4bc2cce24156
|
|
||||||
MonoImporter:
|
|
||||||
externalObjects: {}
|
|
||||||
serializedVersion: 2
|
|
||||||
defaultReferences: []
|
|
||||||
executionOrder: 0
|
|
||||||
icon: {instanceID: 0}
|
|
||||||
userData:
|
|
||||||
assetBundleName:
|
|
||||||
assetBundleVariant:
|
|
@ -31,6 +31,11 @@ public class BaseAbility : ScriptableObject
|
|||||||
private float finalManaCost;
|
private float finalManaCost;
|
||||||
private float finalHealthCost;
|
private float finalHealthCost;
|
||||||
|
|
||||||
|
public virtual BaseAbility CreateRuntimeInstance()
|
||||||
|
{
|
||||||
|
return Instantiate(this);
|
||||||
|
}
|
||||||
|
|
||||||
public virtual void Execute(Taggable user)
|
public virtual void Execute(Taggable user)
|
||||||
{
|
{
|
||||||
SpendResourcesNecessary(user);
|
SpendResourcesNecessary(user);
|
||||||
|
@ -10,4 +10,8 @@ public class BaseEffect : ScriptableObject
|
|||||||
|
|
||||||
public virtual void ApplyEffect(Taggable user, List<Taggable> targets) { }
|
public virtual void ApplyEffect(Taggable user, List<Taggable> targets) { }
|
||||||
|
|
||||||
|
public virtual BaseEffect CreateRuntimeInstance()
|
||||||
|
{
|
||||||
|
return Instantiate(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,14 @@ public class ProjectileAbility : BaseAbility
|
|||||||
private GameObject instantiatedProjectile;
|
private GameObject instantiatedProjectile;
|
||||||
private NetworkedProjectile networkedProjectile;
|
private NetworkedProjectile networkedProjectile;
|
||||||
|
|
||||||
|
/*public override BaseAbility CreateRuntimeInstance()
|
||||||
|
{
|
||||||
|
var instance = Instantiate(this);
|
||||||
|
instance.name = $"{name} (Runtime)";
|
||||||
|
// Any special initialization for projectile abilities
|
||||||
|
return instance;
|
||||||
|
}*/
|
||||||
|
|
||||||
public override void Execute(Taggable user)
|
public override void Execute(Taggable user)
|
||||||
{
|
{
|
||||||
base.Execute(user);
|
base.Execute(user);
|
||||||
|
@ -60,7 +60,7 @@ public class BuildManager : MonoBehaviour
|
|||||||
|
|
||||||
if (buildData == null)
|
if (buildData == null)
|
||||||
{
|
{
|
||||||
SaveCurrentBuild();
|
SaveCurrentBuild(true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -68,7 +68,7 @@ public class BuildManager : MonoBehaviour
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SaveCurrentBuild()
|
private void SaveCurrentBuild(bool rebindAbility = false)
|
||||||
{
|
{
|
||||||
if (buildData == null)
|
if (buildData == null)
|
||||||
buildData = new BuildData();
|
buildData = new BuildData();
|
||||||
|
@ -135,15 +135,6 @@ public class NetworkedProjectile : MonoBehaviour
|
|||||||
effect.ApplyEffect(ownerTag, new List<Taggable> { target });
|
effect.ApplyEffect(ownerTag, new List<Taggable> { target });
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
target.GetComponentInChildren<Animator>()?.SetTrigger("hurt");
|
|
||||||
}
|
|
||||||
catch (System.Exception)
|
|
||||||
{
|
|
||||||
Debug.Log("No Hurt trigger");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!canPierce)
|
if (!canPierce)
|
||||||
{
|
{
|
||||||
|
@ -10,12 +10,14 @@ public class AbilityKeyBinder : MonoBehaviour
|
|||||||
[SerializeField] private GameEventListener onLocalPlayerPermaDeath;
|
[SerializeField] private GameEventListener onLocalPlayerPermaDeath;
|
||||||
[SerializeField] private GameEventListener onLocalPlayerRevived;
|
[SerializeField] private GameEventListener onLocalPlayerRevived;
|
||||||
[Space]
|
[Space]
|
||||||
[SerializeField] private BaseAbility ability;
|
//[SerializeField] private BaseAbility ability;
|
||||||
[SerializeField] private GameKey key;
|
[SerializeField] private GameKey key;
|
||||||
[SerializeField] private CastingStateController castingStateController;
|
[SerializeField] private CastingStateController castingStateController;
|
||||||
[SerializeField] private GameEvent_AbilityKeyBinder onAbilityKeyBinderSpawned;
|
[SerializeField] private GameEvent_AbilityKeyBinder onAbilityKeyBinderSpawned;
|
||||||
[SerializeField] private GameInputBinding gamepadBinding; // New field for gamepad binding
|
[SerializeField] private GameInputBinding gamepadBinding; // New field for gamepad binding
|
||||||
|
|
||||||
|
[SerializeField] private BaseAbility ability;
|
||||||
|
|
||||||
private Taggable userTag;
|
private Taggable userTag;
|
||||||
private Mana mana;
|
private Mana mana;
|
||||||
private Health health;
|
private Health health;
|
||||||
@ -34,6 +36,8 @@ public class AbilityKeyBinder : MonoBehaviour
|
|||||||
bool abilitySlotUnlocked = false;
|
bool abilitySlotUnlocked = false;
|
||||||
bool isComboAbility = false;
|
bool isComboAbility = false;
|
||||||
ComboAbility combo;
|
ComboAbility combo;
|
||||||
|
List<BaseAbility> comboAbilities = new List<BaseAbility>();
|
||||||
|
List<BaseEffect> effects = new List<BaseEffect>();
|
||||||
ComboState comboState = new ComboState();
|
ComboState comboState = new ComboState();
|
||||||
|
|
||||||
float finalHealthCost;
|
float finalHealthCost;
|
||||||
@ -204,17 +208,33 @@ public class AbilityKeyBinder : MonoBehaviour
|
|||||||
|
|
||||||
public void BindAbility(BaseAbility ability)
|
public void BindAbility(BaseAbility ability)
|
||||||
{
|
{
|
||||||
this.ability = ability;
|
if (this.ability != null && this.ability.name.ToLower().Contains("clone"))
|
||||||
if (ability is ComboAbility comboAbility)
|
Destroy(this.ability);
|
||||||
|
|
||||||
|
this.ability = ability.CreateRuntimeInstance();
|
||||||
|
|
||||||
|
if (this.ability is ComboAbility comboAbility)
|
||||||
{
|
{
|
||||||
isComboAbility = true;
|
isComboAbility = true;
|
||||||
combo = comboAbility;
|
combo = comboAbility;
|
||||||
|
for (int i = 0; i < combo.comboChain.Count; i++)
|
||||||
|
{
|
||||||
|
comboAbilities.Add(combo.comboChain[i].CreateRuntimeInstance());
|
||||||
|
}
|
||||||
|
combo.comboChain = comboAbilities;
|
||||||
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
isComboAbility = false;
|
isComboAbility = false;
|
||||||
combo = null;
|
combo = null;
|
||||||
|
|
||||||
|
for (int i = 0; i < ability.abilityEffects.Count; i++)
|
||||||
|
{
|
||||||
|
effects.Add(ability.abilityEffects[i].CreateRuntimeInstance());
|
||||||
|
}
|
||||||
|
this.ability.abilityEffects = effects;
|
||||||
|
|
||||||
}
|
}
|
||||||
onAbilityKeyBinderSpawned.Raise(this);
|
onAbilityKeyBinderSpawned.Raise(this);
|
||||||
}
|
}
|
||||||
@ -225,11 +245,32 @@ public class AbilityKeyBinder : MonoBehaviour
|
|||||||
abilityBindInstance.SetUnlocked(unlocked);
|
abilityBindInstance.SetUnlocked(unlocked);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void OnDestroy()
|
||||||
|
{
|
||||||
|
if (isComboAbility)
|
||||||
|
{
|
||||||
|
for (int i = comboAbilities.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
Destroy(comboAbilities[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (this.ability != null && this.ability.name.ToLower().Contains("clone"))
|
||||||
|
Destroy(this.ability);
|
||||||
|
|
||||||
|
for (int i = effects.Count - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
Destroy(effects[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
private void AdvanceCombo()
|
private void AdvanceCombo()
|
||||||
{
|
{
|
||||||
comboState.currentComboIndex++;
|
comboState.currentComboIndex++;
|
||||||
comboState.currentComboIndex %= combo.comboChain.Count;
|
comboState.currentComboIndex %= comboAbilities.Count;
|
||||||
|
|
||||||
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
||||||
}
|
}
|
||||||
@ -247,14 +288,14 @@ public class AbilityKeyBinder : MonoBehaviour
|
|||||||
|
|
||||||
public BaseAbility GetCurrentAbility()
|
public BaseAbility GetCurrentAbility()
|
||||||
{
|
{
|
||||||
if (combo.comboChain.Count == 0) return null;
|
if (comboAbilities.Count == 0) return null;
|
||||||
|
|
||||||
int index = GetCurrentComboIndex();
|
int index = GetCurrentComboIndex();
|
||||||
return combo.comboChain[index];
|
return comboAbilities[index];
|
||||||
}
|
}
|
||||||
public int GetComboLength()
|
public int GetComboLength()
|
||||||
{
|
{
|
||||||
return combo.comboChain.Count;
|
return comboAbilities.Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<BaseAbility> GetComboChain()
|
public List<BaseAbility> GetComboChain()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user