protected AbilitySystem GetEnemyInTile(AbilitySystem Owner, Vector2Int TargetPos) { if (TargetPos.x < 0 || TargetPos.x >= Grid.xWidth || TargetPos.y < 0 || TargetPos.y >= Grid.zWidth) { return(null); } TickAgent TargetAgent = null; foreach (TickAgent Agent in Ticker.Instance.tickAgents) { if (Agent.IsAlive && Agent.GridPos == TargetPos) { TargetAgent = Agent; break; } } if (TargetAgent == null || !TargetAgent.IsAlive) { return(null); } if (Owner.OwnerAgent.GetType() == TargetAgent.GetType()) { return(null); } return(TargetAgent.AbilitySystem); }
protected IEnumerator PlayParticleSystemOnTarget(AbilitySystem Owner, bool SetTargetToParent = false) { if (TargetProjectileSystem != null) { Vector3 WorldPos = Grid.CellToWorld((Vector3Int)Owner.CurrentTarget); ParticleSystem Instance = Instantiate(TargetProjectileSystem, WorldPos, Quaternion.identity); Instance.Play(); if (SetTargetToParent) { TickAgent TargetAgent = null; foreach (TickAgent Agent in Ticker.Instance.tickAgents) { if (Agent.IsAlive && Agent.GridPos == Owner.CurrentTarget) { TargetAgent = Agent; break; } } Instance.transform.SetParent(TargetAgent.transform); } while (Instance != null && Instance.isPlaying) { yield return(null); } if (Instance != null) { Destroy(Instance.gameObject); } } }
public AbilitySystem(TickAgent OwnerAgent) { this.OwnerAgent = OwnerAgent; RegisterOnAttributeChanged(Attribute.Health, HealthCap); RegisterOnAttributeChanged(Attribute.Mana, ManaCap); RegisterAttributeCalculation(Attribute.Health, EnergyShield); }
public IEnumerator Step(TickAgent OwnerAgent, Vector3 MoveToWorld) { float time = 0.0f; OwnerAgent.Animator.SetFloat("Velocity", 1.0f); Vector3 OriginalPos = OwnerAgent.transform.position; OwnerAgent.Animator.transform.localRotation = Quaternion.LookRotation((MoveToWorld - OriginalPos), OwnerAgent.Animator.transform.up); OwnerAgent.Animator.transform.localRotation = Quaternion.Euler(0, OwnerAgent.Animator.transform.localRotation.eulerAngles.y, 0); while (time < timePerSquare) { time += Time.deltaTime; OwnerAgent.transform.position = Vector3.Lerp(OriginalPos, MoveToWorld, time / timePerSquare); yield return(null); } }
public IEnumerator Move(AbilitySystem Owner) { TickAgent OwnerAgent = Owner.OwnerAgent; OwnerAgent.Animator.SetInteger("AbilityIndex", AbilityIndex); OwnerAgent.Animator.SetTrigger("Ability"); Vector3 OriginalPos = OwnerAgent.transform.position; Vector3 NewPos = Grid.CellToWorld((Vector3Int)Owner.CurrentTarget); float time = 0.0f; while (time < Ticker.TickVisualTime) { time += Time.deltaTime; OwnerAgent.transform.position = Vector3.Lerp(OriginalPos, NewPos, time / Ticker.TickVisualTime); yield return(null); } OwnerAgent.transform.position = NewPos; yield return(PlayParticleSystemOnSelf(Owner)); }
public IEnumerator Move(TickAgent OwnerAgent, List <Vector3Int> path, int square = 0) { //Wait a little before running! float time = 0.0f; while (time < 0.1f) { time += Time.deltaTime; } //Start running! OwnerAgent.Animator.SetFloat("Velocity", 1.0f); for (int i = 0; i < path.Count; i++) { //Take a step! Vector3 NewPos = Grid.CellToWorld(path[i]); yield return(Step(OwnerAgent, NewPos)); } //clean up OwnerAgent.transform.position = Grid.CellToWorld(path[path.Count - 1]); OwnerAgent.Animator.SetFloat("Velocity", 0.0f); }