Exemplo n.º 1
0
        void CalCurrentAttackTarget()
        {
            RemoveNull();
            if (enemiesInAttackAreas.Count == 0)
            {
                currentAttackTarget = null;
                return;
            }

            if (enemiesInAttackAreas.Count == 1)
            {
                currentAttackTarget = enemiesInAttackAreas[0];
                return;
            }

            float     distance = float.MaxValue;
            BaseEnemy target   = null;

            foreach (BaseEnemy item in enemiesInAttackAreas)
            {
                float tmpDistance = (item.transform.position - transform.position).magnitude;
                if (tmpDistance < distance)
                {
                    distance = tmpDistance;
                    target   = item;
                }
            }
            currentAttackTarget = target;
        }
Exemplo n.º 2
0
 void RemoveEnermy(BaseEnemy enermyToBeRemoved)
 {
     if (enemiesInAttackAreas.Contains(enermyToBeRemoved))
     {
         enemiesInAttackAreas.Remove(enermyToBeRemoved);
         Debug.LogFormat("remove{0}", enermyToBeRemoved);
     }
 }
Exemplo n.º 3
0
        virtual public void SetAttackAreas(PlaceDirection dir)
        {
            enemiesInAttackAreas.Clear();
            currentAttackTarget = null;
            RemoveListener();
            attackAreas.Clear();

            attackAreasPos = new Vector2[] { new Vector2(1, 0), new Vector2(-1, 0),
                                             new Vector2(1, 1), new Vector2(-1, 1), new Vector2(0, 1), new Vector2(0, 2) };

            switch (dir)
            {
            case PlaceDirection.up:
                break;

            case PlaceDirection.down:
                for (int i = 0; i < attackAreasPos.Length; i++)
                {
                    attackAreasPos[i] = -attackAreasPos[i];
                }
                break;

            case PlaceDirection.left:

                for (int i = 0; i < attackAreasPos.Length; i++)
                {
                    float xTmp = attackAreasPos[i].x;
                    float yTmp = -attackAreasPos[i].y;
                    attackAreasPos[i].x = yTmp;
                    attackAreasPos[i].y = xTmp;
                }
                break;

            case PlaceDirection.right:
                for (int i = 0; i < attackAreasPos.Length; i++)
                {
                    float xTmp = attackAreasPos[i].x;
                    float yTmp = attackAreasPos[i].y;
                    attackAreasPos[i].x = yTmp;
                    attackAreasPos[i].y = xTmp;
                    //Debug.Log(attackAreasPos[i]);
                }
                break;

            default:
                break;
            }

            foreach (Vector2 item in attackAreasPos)
            {
                MapUnitPre t = MapInSceneManager.Instance.GetMapUnitPre((int)item.x + (int)transform.position.x, (int)item.y + (int)transform.position.y);
                if (t != null)
                {
                    attackAreas.Add(t);
                }
            }
        }