Exemple #1
0
 private void _on_Tile_selected(TileTest tile)
 {
     if (first == null && tile.unit_on_tile != null && tile?.unit_on_tile.action_points_current >= 0)
     {
         if ((curr_player == 1 && tile.unit_on_tile.IsInGroup("Player1")) || (curr_player == 2 && tile.unit_on_tile.IsInGroup("Player2")))
         {
             first = tile;
             first.unit_on_tile.EmitSignal("_selected_to_UI");
             GD.Print("first " + tile.coord(0).ToString() + ';' + tile.coord(1).ToString());
         }
     }
     else if (first != null && tile.unit_on_tile == null && (tile.movement + first.unit_on_tile.action_points_current > -1))
     {
         int x1 = first.coord(0), x2 = tile.coord(0), z1 = first.coord(1), z2 = tile.coord(1);
         if ((Math.Abs(x1 - x2) == 2 && z1 == z2) || (Math.Abs(x1 - x2) == 1 && Math.Abs(z1 - z2) == 1))
         {
             GD.Print("second " + tile.coord(0).ToString() + ';' + tile.coord(1).ToString());
             first.unit_on_tile.EmitSignal("_deselected_to_UI");
             first.unit_on_tile._Change_Tile(tile);
             first = null;
             tile.unit_on_tile.action_points_current += tile.movement;
         }
     }
     else if (first != null && tile.unit_on_tile != null && ((first.unit_on_tile.IsInGroup("Player1") && tile.unit_on_tile.IsInGroup("Player1")) || (first.unit_on_tile.IsInGroup("Player2") && tile.unit_on_tile.IsInGroup("Player2"))))
     {
         first.unit_on_tile.EmitSignal("_deselected_to_UI");
         first = tile;
         first.unit_on_tile.EmitSignal("_selected_to_UI");
     }
     else if (first != null && tile.unit_on_tile != null && first?.unit_on_tile.action_points_current > 0 && ((first.unit_on_tile.IsInGroup("Player1") && tile.unit_on_tile.IsInGroup("Player2")) || (first.unit_on_tile.IsInGroup("Player2") && tile.unit_on_tile.IsInGroup("Player1"))))
     {
         if (map._Pathfind(first, tile))
         {
             first.unit_on_tile.deal_damage(tile.Transform.origin);
             tile.unit_on_tile._Receive_Damage(first.unit_on_tile.attack_points);
             first.unit_on_tile.action_points_current--;
         }
     }
 }
Exemple #2
0
 public bool _Pathfind(TileTest one, TileTest two)
 {
     if (Math.Abs(one.coord(0) - two.coord(0)) % 2 == 0 && one.coord(1) == two.coord(1))
     {
         int j = one.coord(1) + 5, imax, imin;
         if (one.coord(0) > two.coord(0))
         {
             imin = two.coord(0) + 5;
             imax = one.coord(0) + 5;
         }
         else
         {
             imax = two.coord(0) + 5;
             imin = one.coord(0) + 5;
         }
         GD.Print("imin: " + imin + " imax: " + imax);
         for (int i = imin; i < imax; i += 2)
         {
             if (map[i, j] != null)
             {
                 if (map[i, j].movement == -1488)
                 {
                     return(false);
                 }
             }
         }
         return(true);
     }
     else if (Math.Abs(one.coord(0) - two.coord(0)) == Math.Abs(one.coord(1) - two.coord(1)))
     {
         int jmin, jmax, imin, imax;
         if (one.coord(0) > two.coord(0))
         {
             imin = two.coord(0) + 5;
             imax = one.coord(0) + 5;
         }
         else
         {
             imax = two.coord(0) + 5;
             imin = one.coord(0) + 5;
         }
         if (one.coord(1) > two.coord(1))
         {
             jmin = two.coord(1) + 5;
             jmax = one.coord(1) + 5;
         }
         else
         {
             jmax = two.coord(1) + 5;
             jmin = one.coord(1) + 5;
         }
         int i = imin;
         int j = jmin;
         while (i < imax && j < jmax)
         {
             if (map[i, j] != null)
             {
                 if (map[i, j].movement == -1488)
                 {
                     return(false);
                 }
             }
             i++;
             j++;
         }
         return(true);
     }
     return(false);
 }