More Progression with the level creator

Published September 11, 2012
Advertisement
Hey guys, in my last post I said my new priority was saving and loading maps. Well, now I have that ability smile.png

I managed to sort out a way to save and load maps smile.png There are two files produced when saving, a configuration file and the actual map. The config file stores things like:

  • Tile Information
  • Map Dimensions
  • Tile Set Information

Basically everything needed to recreate the map without the actual map smile.png

The other file, the map, is just a basic file, where the id of the tile is printed, and then a comma. That's it. Really high tech loading/saving here ;)

However I was running into an issue with the loading of maps. When I create a map, save it, and then edit the tileset, the ID's of the tileset loaded would be out of sync, not good. To solve this, I load the config file, and then cycle through the tiles that have been loaded from the tileset. When there is a match, I update a 3rd list of tiles with that tile. All the tiles left over, I update the ID for and add to the list. This way there are no errors with the loaded ID.

I also started working on a tool framework. This so far has been successful. Essentially, my tool class looks like this:

[source lang="java"]package com.Sparked_Studios.Map_Creator.Components.Tools;

import com.Sparked_Studios.Map_Creator.Creator.TileRef;

public class Tool {

public static Tool brush = new Brush();
public static Tool floodFill = new FloodFill();

public TileRef[][] doAction(TileRef[][] pixels, int xPos, int yPos, TileRef selectedTile) {
return null;
}

public String toString(){
return "Unknown tool";
}
}
[/source]

A nice basic class which has static references to the tools I add, and a toString method to identify the tool in the GUI.

Then, this is my brush tool. This is the most commonly used tool, and at the moment, just changes the identity of the tile you click, or drag over.

[source lang="java"]package com.Sparked_Studios.Map_Creator.Components.Tools;

import com.Sparked_Studios.Map_Creator.Creator.TileRef;

public class Brush extends Tool {
public TileRef[][] doAction(TileRef[][] pixels, int xPos, int yPos, TileRef selectedTile) {
pixels[xPos][yPos] = selectedTile;
return pixels;
}

public String toString() {
return "Brush";
}
}
[/source]


And then for example, my FloodFill tool. However you may note that there is a 5000 tile limit on the fill tool, to prevent stack overflows. There is probably a better way to do this, but I just wanted to get a quick tool made.

[source lang="java"]package com.Sparked_Studios.Map_Creator.Components.Tools;

import com.Sparked_Studios.Map_Creator.Creator.TileRef;

public class FloodFill extends Tool {

public TileRef[][] pixels;

public int fillCounter = 0, maxFill = 5000;
public boolean fillFlag = false;

public TileRef[][] doAction(TileRef[][] level, int xPos, int yPos, TileRef selectedTile) {
fillCounter = 0;
fillFlag = false;

this.pixels = level;

int id = level[xPos][yPos].id;

floodFill(xPos, yPos, id, selectedTile);
return pixels;
}

public void floodFill(int xPos, int yPos, int toFill, TileRef fill) {
if (fillFlag) return;
if (fillCounter > maxFill) fillFlag = true;
if (xPos < 0 || xPos >= pixels.length || yPos < 0 || yPos >= pixels[0].length) return;

if (pixels[xPos][yPos].id == fill.id) return;

if (pixels[xPos][yPos].id == toFill) {
fillCounter++;
pixels[xPos][yPos] = fill;

floodFill(xPos - 1, yPos, toFill, fill);
floodFill(xPos + 1, yPos, toFill, fill);
floodFill(xPos, yPos - 1, toFill, fill);
floodFill(xPos, yPos + 1, toFill, fill);
}
}

public String toString() {
return "Flood fill";
}
}[/source]

I am also working on some other tools and a proper GUI for them. I am planning on having the Dynamic fill tool, which I will go into more detail with in a later post, the good old Eye dropper tool, to quickly select a new tile, and a few others, which again will be detailed in another post.

The GUI I am planning is going to be something similar to paint programs, where you have the tools on a menu bar or panel, and click the one you want. Also, I am going to go for a frame based approach for things such as tile selection and tool selection, to keep the workspace uncluttered.

Anyway, back to coding!

Thanks for reading smile.png
Previous Entry Level Creator Progress!
Next Entry Custom Shaders - 2D
0 likes 0 comments

Comments

Nobody has left a comment. You can be the first!
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Advertisement
Advertisement