public override void InitializeAbilityStats(Ability _ability) { MeleeAbility ability = _ability as MeleeAbility; ability.damage = damage; ability.abilityCooldown = attackFrequency; ability.transform.root.GetComponent <NavMeshAgent> ().speed = speed; }
public static MeleeAbility CreateMeleeAbility() { MeleeAbility asset = ScriptableObject.CreateInstance <MeleeAbility>(); AssetDatabase.CreateAsset(asset, GetSelectedPathOrFallback() + "/NewMeleeAbility.asset"); AssetDatabase.SaveAssets(); return(asset); }
public void Init(MeleeAbility a, string t, Vector3 direction) { base.Init(a, t); Vector3 temp = ((Player)Ability.UsedBy).transform.position; transform.position = new Vector3(temp.x, 0.01f, temp.z); Swing(direction); }
private MeleeAbility meleeAbility; // need to access the DesiredTags of this void Start() { chaseBehaviourComp = GetComponent <UnitChaseBehaviour>(); meleeAbility = GetComponent <MeleeAbility>(); }
public static BaseAbility Create(UseableAbility useableAbility, Item scriptableAbility, CharacterBase ownerCharacter, GameObject worldGameObject, AttackAbility.HitAction hitAction = null, AttackAbility.EndAttackAction endAttackAction = null) { Func <BaseAbility> abilityFunc = () => { switch (scriptableAbility) { case ScriptableMeleeAbility _: { ForwardTriggerCollision forwardTrigger = worldGameObject.GetComponentInChildren <ForwardTriggerCollision>(); MeleeAbility meleeAbility = new MeleeAbility(useableAbility, forwardTrigger, ownerCharacter); if (hitAction != null) { meleeAbility.OnHit += hitAction; } if (endAttackAction != null) { meleeAbility.OnEndAttack += endAttackAction; } return(meleeAbility); } case ScriptableRaycastAbility _: int layerMask = ~0; switch (ownerCharacter) { case AIBase aiBase: layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Enemy")); break; case PlayerBase playerBase: layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Player")); layerMask = layerMask &= ~(1 << LayerMask.NameToLayer("Hands")); break; } RaycastAbilitiy raycastAbility = new RaycastAbilitiy(useableAbility, ownerCharacter, layerMask); if (hitAction != null) { raycastAbility.OnHit += hitAction; } if (endAttackAction != null) { raycastAbility.OnEndAttack += endAttackAction; } return(raycastAbility); case ScriptableProjectileAbility _: ProjectileAbility projectileAbility = new ProjectileAbility(useableAbility, ownerCharacter); if (hitAction != null) { projectileAbility.OnHit += hitAction; } if (endAttackAction != null) { projectileAbility.OnEndAttack += endAttackAction; } return(projectileAbility); case ScriptableUseableAbility _: return(new ModifierAbility(useableAbility, ownerCharacter)); } throw new Exception($"{scriptableAbility.GetType()} doesn't exist within the AbilityFactory"); }; //Add base abilities to useable object BaseAbility baseAbility = abilityFunc.Invoke(); useableAbility.Modifiers.AddRange(baseAbility.Ability.StartingModifiers); return(baseAbility); }