예제 #1
0
 void OnMouseEnter()
 {
     if (!EventSystem.current.IsPointerOverGameObject())
     {
         EntityBehaviour entity = IsThereAnEntity();
         EntityBehaviour currentEntityBehaviour = GameManager.instance.currentEntityBehaviour;
         if (GameManager.instance.selectedSpell != null)
         {
             if (cellsColor[cellsColor.Count - 1] == grid.reachableSpellRange)
             {
                 List <Vector2> aoeOfSpell = currentEntityBehaviour.GetAoeOfSpell(
                     GameManager.instance.selectedSpell,
                     new Vector2(x, y)
                     );
                 foreach (Vector2 cell in aoeOfSpell)
                 {
                     CellBehaviour cellBehaviour = grid.GetCellBehaviour(
                         x + (int)cell.x,
                         y + (int)cell.y
                         );
                     if (cellBehaviour != null && cellBehaviour.isWalkable)
                     {
                         coloredCells.Add(
                             new Vector2(x + (int)cell.x, y + (int)cell.y)
                             );
                         cellBehaviour.colorCell(grid.aoeSpellRange);
                     }
                 }
             }
         }
         else if (entity)
         {
             entity.MouseEnter();
         }
         else
         {
             if (!GameManager.instance.currentEntityBehaviour.doMove)
             {
                 List <Vector2> path = currentEntityBehaviour.SetMoveTargets(cell);
                 if (path.Count <= currentEntityBehaviour.character.stats[Characteristic.CurrentMP])
                 {
                     foreach (Vector2 cell in path)
                     {
                         coloredCells.Add(new Vector2(cell.x, cell.y));
                         grid.GetCellBehaviour(
                             (int)cell.x,
                             (int)cell.y
                             ).colorCell(grid.pathMP);
                     }
                 }
             }
         }
     }
     else
     {
         OnMouseExit();
     }
 }
예제 #2
0
    public void SetPushTargets(Vector2 cell, int qty)
    {
        int i    = qty < 0 ? -1 : 1;
        int incr = qty < 0 ? -1 : 1;

        if (cell.x - x > cell.y - y && (cell.x - x) + (cell.y - y) >= 0) // Front
        {
            while (i != qty + incr)
            {
                CellBehaviour cellBehaviour = grid.GetCellBehaviour(x - i, y);
                if (cellBehaviour == null ||
                    !cellBehaviour.isWalkable ||
                    grid.GetEntityOnCell(x - i, y) != null)
                {
                    break;
                }
                pushTargets.Add(new Vector2(x - i, y));
                i += qty < 0 ? -1 : 1;
            }
        }
        else if (cell.x - x >= cell.y - y && (cell.x - x) + (cell.y - y) < 0) // Left
        {
            while (i != qty + incr)
            {
                CellBehaviour cellBehaviour = grid.GetCellBehaviour(x, y + i);
                if (cellBehaviour == null || !cellBehaviour.isWalkable ||
                    grid.GetEntityOnCell(x, y + i) != null)
                {
                    break;
                }
                pushTargets.Add(new Vector2(x, y + i));
                i += qty < 0 ? -1 : 1;
            }
        }
        else if (cell.x - x < cell.y - y && (cell.x - x) + (cell.y - y) <= 0) // Back
        {
            while (i != qty + incr)
            {
                CellBehaviour cellBehaviour = grid.GetCellBehaviour(x + i, y);
                if (cellBehaviour == null ||
                    !cellBehaviour.isWalkable ||
                    grid.GetEntityOnCell(x + i, y) != null)
                {
                    break;
                }
                pushTargets.Add(new Vector2(x + i, y));
                i += qty < 0 ? -1 : 1;
            }
        }
        else if (cell.x - x <= cell.y - y && (cell.x - x) + (cell.y - y) > 0) // Right
        {
            while (i != qty + incr)
            {
                CellBehaviour cellBehaviour = grid.GetCellBehaviour(x, y - i);
                if (cellBehaviour == null ||
                    !cellBehaviour.isWalkable ||
                    grid.GetEntityOnCell(x, y - i) != null)
                {
                    break;
                }
                pushTargets.Add(new Vector2(x, y - i));
                i += qty < 0 ? -1 : 1;
            }
        }
    }