private void Find(StateController p_controller)
    {
        Transform        transform = p_controller.m_entity.transform;
        EntityRuntimeSet enemies   = p_controller.m_enemyEntities;
        Look             look      = p_controller.m_look;

        if (!enemies)
        {
            return;
        }

        foreach (Entity enemy in enemies.m_items)
        {
            Transform enemyTransform = enemy.transform;
            float     distance       = Vector2.Distance(transform.position, enemyTransform.position);

            if (distance <= p_controller.m_look.m_lookRange)
            {
                Vector2 direction = enemyTransform.position - transform.position;
                float   angle     = Vector2.Angle(direction, transform.right);

                if (look.m_fieldOfView / 2 >= angle || distance <= look.m_lookSphereRadius)
                {
                    RaycastHit2D hit = Physics2D.Raycast(transform.position, direction, distance + 1);

                    if (hit.collider && hit.collider.gameObject == enemy.gameObject)
                    {
                        p_controller.m_target = enemy;
                        return;
                    }
                }
            }
        }
    }
Example #2
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        EntityStats entityStats = other.GetComponent <EntityStats>();

        if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets)) || (other.gameObject.layer == levelLayer))
        {
            //gameObject.SetActive(false);
            anim.Play("Impact", 0, 0);
            moving      = false;
            col.enabled = false;
        }
    }
Example #3
0
 protected virtual void OnEnable()
 {
     if (myEntitySets != null)
     {
         for (int i = 0; i < myEntitySets.Count; i++)
         {
             myEntitySets[i].Add(this);
         }
     }
     //backup original sets to recover after changes
     originalMySets    = EntityRuntimeSet.CopySetArray(myEntitySets);
     originalEnemySets = EntityRuntimeSet.CopySetArray(enemyEntitySets);
 }
Example #4
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        EntityStats entityStats = other.GetComponent <EntityStats>();

        if (entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets))
        {
            gameObject.SetActive(false);
        }
        else if (!entityStats)
        {
            gameObject.SetActive(false);
        }
    }
Example #5
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        EntityStats entityStats = other.GetComponent <EntityStats>();

        if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets)))
        {
            //gameObject.SetActive(false);
            enemiesAlreadyHit.Add(entityStats.gameObject.GetInstanceID());
            anim.Play("Impact", 0, 0);
            //moving = false;
            //col.enabled = false;
        }
    }
Example #6
0
 public static bool SetArrayContainSet(List <EntityRuntimeSet> targetArray, EntityRuntimeSet targetSet)
 {
     if (targetArray == null)
     {
         return(false);
     }
     for (int i = 0; i < targetArray.Count; i++)
     {
         if (targetArray[i] == targetSet)
         {
             return(true);
         }
     }
     return(false);
 }
    private void OnTriggerEnter2D(Collider2D other)
    {
        EntityStats entityStats = other.GetComponent <EntityStats>();

        if ((entityStats && EntityRuntimeSet.DetectArrayOverlap(projectileDamageSource.hostileTo, entityStats.myEntitySets)))
        {
            //gameObject.SetActive(false);
            victim           = entityStats;
            tickTimer        = latchedTickRate;
            offsetFromVictim = transform.position - victim.transform.position;
            anim.Play("Locked", 0, 0);
            moving      = false;
            col.enabled = false;
        }
        else if (other.gameObject.layer == levelLayer)
        {
            gameObject.SetActive(false);
            moving      = false;
            col.enabled = false;
        }
    }
Example #8
0
    public bool canOtherEnemiesAttackMinion = true;  //se por algum motivo os demais inimigos tenham que ignorar o afetado

    public override void InitState(EntityStats receiver, EntityStats applier = null)
    {
        if (applier == null)
        {
            return;                 //no minion master
        }
        StateStack ss = receiver.GetStack(this);

        if (ss == null)
        {
            ss = new StateStack(this, duration, 1, 1, applier);
            receiver.states.Add(ss);

            //decide enemies
            if (canAttackMaster)
            {
                EntityRuntimeSet.CopySetArray(applier.enemyEntitySets, ref receiver.enemyEntitySets, false);
            }
            else
            {
                EntityRuntimeSet.CopySetArray(applier.enemyEntitySets, ref receiver.enemyEntitySets);
            }
            //deciding possible damage
            if (canOtherEnemiesAttackMinion)
            {
                EntityRuntimeSet.CopySetArray(applier.myEntitySets, ref receiver.myEntitySets, false);
            }
            if (!masterCanDamageMinion)
            {
                EntityRuntimeSet.RemoveSetOverlap(applier.enemyEntitySets, ref receiver.myEntitySets);
            }
        }
        else
        {
            ss.ResetTimer();
        }
    }
Example #9
0
    private void OnTriggerEnter2D(Collider2D other)
    {
        EntityStats entityStats = other.GetComponent <EntityStats>();

        if (entityStats && EntityRuntimeSet.DetectArrayOverlap(hostileTo, entityStats.myEntitySets) &&
            entityStats != owner)
        {
            OnHitEntity?.Invoke();
            if (onHitShake)
            {
                //Debug.Log("Shaking");
                Shaker.ShakeAll(onHitShake);
            }
            if (onHitSound)
            {
                EazySoundManager.PlaySound(onHitSound, 0.13f);
            }
            ApplyDamage(entityStats);
            if (owner != null)
            {
                owner.ChangeMana(manaReplenishAmount);
            }
        }
    }
Example #10
0
 public override void ConcludeState(EntityStats receiver)
 {
     EntityRuntimeSet.CopySetArray(receiver.originalEnemySets, ref receiver.enemyEntitySets);
     EntityRuntimeSet.CopySetArray(receiver.originalMySets, ref receiver.myEntitySets);
 }