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 finalHealthCost;
|
||||
|
||||
public virtual BaseAbility CreateRuntimeInstance()
|
||||
{
|
||||
return Instantiate(this);
|
||||
}
|
||||
|
||||
public virtual void Execute(Taggable user)
|
||||
{
|
||||
SpendResourcesNecessary(user);
|
||||
|
@ -10,4 +10,8 @@ public class BaseEffect : ScriptableObject
|
||||
|
||||
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 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)
|
||||
{
|
||||
base.Execute(user);
|
||||
|
@ -60,7 +60,7 @@ public class BuildManager : MonoBehaviour
|
||||
|
||||
if (buildData == null)
|
||||
{
|
||||
SaveCurrentBuild();
|
||||
SaveCurrentBuild(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -68,7 +68,7 @@ public class BuildManager : MonoBehaviour
|
||||
}
|
||||
}
|
||||
|
||||
private void SaveCurrentBuild()
|
||||
private void SaveCurrentBuild(bool rebindAbility = false)
|
||||
{
|
||||
if (buildData == null)
|
||||
buildData = new BuildData();
|
||||
|
@ -135,15 +135,6 @@ public class NetworkedProjectile : MonoBehaviour
|
||||
effect.ApplyEffect(ownerTag, new List<Taggable> { target });
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
target.GetComponentInChildren<Animator>()?.SetTrigger("hurt");
|
||||
}
|
||||
catch (System.Exception)
|
||||
{
|
||||
Debug.Log("No Hurt trigger");
|
||||
}
|
||||
|
||||
|
||||
if (!canPierce)
|
||||
{
|
||||
|
@ -10,12 +10,14 @@ public class AbilityKeyBinder : MonoBehaviour
|
||||
[SerializeField] private GameEventListener onLocalPlayerPermaDeath;
|
||||
[SerializeField] private GameEventListener onLocalPlayerRevived;
|
||||
[Space]
|
||||
[SerializeField] private BaseAbility ability;
|
||||
//[SerializeField] private BaseAbility ability;
|
||||
[SerializeField] private GameKey key;
|
||||
[SerializeField] private CastingStateController castingStateController;
|
||||
[SerializeField] private GameEvent_AbilityKeyBinder onAbilityKeyBinderSpawned;
|
||||
[SerializeField] private GameInputBinding gamepadBinding; // New field for gamepad binding
|
||||
|
||||
[SerializeField] private BaseAbility ability;
|
||||
|
||||
private Taggable userTag;
|
||||
private Mana mana;
|
||||
private Health health;
|
||||
@ -34,6 +36,8 @@ public class AbilityKeyBinder : MonoBehaviour
|
||||
bool abilitySlotUnlocked = false;
|
||||
bool isComboAbility = false;
|
||||
ComboAbility combo;
|
||||
List<BaseAbility> comboAbilities = new List<BaseAbility>();
|
||||
List<BaseEffect> effects = new List<BaseEffect>();
|
||||
ComboState comboState = new ComboState();
|
||||
|
||||
float finalHealthCost;
|
||||
@ -204,17 +208,33 @@ public class AbilityKeyBinder : MonoBehaviour
|
||||
|
||||
public void BindAbility(BaseAbility ability)
|
||||
{
|
||||
this.ability = ability;
|
||||
if (ability is ComboAbility comboAbility)
|
||||
if (this.ability != null && this.ability.name.ToLower().Contains("clone"))
|
||||
Destroy(this.ability);
|
||||
|
||||
this.ability = ability.CreateRuntimeInstance();
|
||||
|
||||
if (this.ability is ComboAbility comboAbility)
|
||||
{
|
||||
isComboAbility = true;
|
||||
combo = comboAbility;
|
||||
for (int i = 0; i < combo.comboChain.Count; i++)
|
||||
{
|
||||
comboAbilities.Add(combo.comboChain[i].CreateRuntimeInstance());
|
||||
}
|
||||
combo.comboChain = comboAbilities;
|
||||
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
||||
}
|
||||
else
|
||||
{
|
||||
isComboAbility = false;
|
||||
combo = null;
|
||||
|
||||
for (int i = 0; i < ability.abilityEffects.Count; i++)
|
||||
{
|
||||
effects.Add(ability.abilityEffects[i].CreateRuntimeInstance());
|
||||
}
|
||||
this.ability.abilityEffects = effects;
|
||||
|
||||
}
|
||||
onAbilityKeyBinderSpawned.Raise(this);
|
||||
}
|
||||
@ -225,11 +245,32 @@ public class AbilityKeyBinder : MonoBehaviour
|
||||
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()
|
||||
{
|
||||
comboState.currentComboIndex++;
|
||||
comboState.currentComboIndex %= combo.comboChain.Count;
|
||||
comboState.currentComboIndex %= comboAbilities.Count;
|
||||
|
||||
abilityBindInstance.ForceUpdateOnComboAbility(GetCurrentAbility());
|
||||
}
|
||||
@ -247,14 +288,14 @@ public class AbilityKeyBinder : MonoBehaviour
|
||||
|
||||
public BaseAbility GetCurrentAbility()
|
||||
{
|
||||
if (combo.comboChain.Count == 0) return null;
|
||||
if (comboAbilities.Count == 0) return null;
|
||||
|
||||
int index = GetCurrentComboIndex();
|
||||
return combo.comboChain[index];
|
||||
return comboAbilities[index];
|
||||
}
|
||||
public int GetComboLength()
|
||||
{
|
||||
return combo.comboChain.Count;
|
||||
return comboAbilities.Count;
|
||||
}
|
||||
|
||||
public List<BaseAbility> GetComboChain()
|
||||
|
Loading…
x
Reference in New Issue
Block a user