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--; } } }
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); }