Chunks and Cross-chunk Tile Transitions

Good day folks!

I’m currently struggling to implement chunks into a game that wasn’t initially designed to have chunks. I’ll get straight to the point and say that it’s a mess, and I’m probably overcomplicating stuff so here is the main code…


/*
 * Globals are used throughout the code
 */

// how many chunks per axis in map
public static int chunkCount = 3;

public static int tileSize = 32;

// the amount of tiles per axis in chunks
public static int chunkSize = 8;

/*
 * The main Level.java code
 */

// Chunk array
public Chunk[][] chunks = new Chunk[Globals.chunkCount][Globals.chunkCount];

// Generation
public void generateMap() {
	for (int x = 0; x < Globals.chunkCount; x++) {
		for (int y = 0; y < Globals.chunkCount; y++) {
			chunks[x][y] = new Chunk(input, x * (Globals.chunkSize * Globals.tileSize), y * (Globals.chunkSize * Globals.tileSize));
		}
	}
}

// tick and render are basically the same apart from tick(chunkX, chunkY) and render(g, chunkX, chunkY)
for (int x = 0; x < Globals.chunkCount; x++) {
	for (int y = 0; y < Globals.chunkCount; y++) {
		if (chunks[x][y] != null) {
			chunks[x][y].tick(x, y);
		}
	}
}

/*
 * The main Chunk.java code
 */

// Tiles array
public Tile[][] tiles = new Tile[Globals.chunkSize][Globals.chunkSize];

// Constructor for chunk tile generation
for (int i = 0; i < Globals.chunkSize; i++) {
	for (int j = 0; j < Globals.chunkSize; j++) {
		if (Utils.randInt(0, 10) <= 1) {
			tiles[i][j] = new MudTile(Tile.mud, chunkX + i * Globals.tileSize, chunkY + j * Globals.tileSize);
		} else {
			tiles[i][j] = new GrassTile(Tile.grass, chunkX + i * Globals.tileSize, chunkY + j * Globals.tileSize);
		}
	}
}

for (int i = 0; i < Globals.chunkSize; i++) {
	for (int j = 0; j < Globals.chunkSize; j++) {
		tiles[i][j].setTransitionId(getId(i, j));
	}
}

// The render (as you can tell all of the code needed to render rectangles correctly over the entirety of the map of chunks/tiles
for (int i = 0; i < Globals.chunkSize; i++) {
	for (int j = 0; j < Globals.chunkSize; j++) {
		tiles[i][j].render(g);
		g.drawRect((chunkX * (Globals.chunkSize * Globals.tileSize)) + i * Globals.tileSize, (chunkY * (Globals.chunkSize * Globals.tileSize)) + j * Globals.tileSize, Globals.tileSize, Globals.tileSize);
	}
}

I can’t but help feel this is overcomplicated code to handle drawing a rectangle at the correct position in each chunk. I am also interested in cross-chunk tile transitions so it doesn’t treat the edges of each chunk as the end of the map and would be open to suggestions.

Thanks! :slight_smile: