Пример #1
0
        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);
        }
Пример #2
0
        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);
                }
            }
        }
Пример #3
0
        public AbilitySystem(TickAgent OwnerAgent)
        {
            this.OwnerAgent = OwnerAgent;

            RegisterOnAttributeChanged(Attribute.Health, HealthCap);
            RegisterOnAttributeChanged(Attribute.Mana, ManaCap);

            RegisterAttributeCalculation(Attribute.Health, EnergyShield);
        }
Пример #4
0
    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);
        }
    }
Пример #5
0
    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));
    }
Пример #6
0
    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);
    }