Custom editor tools for grid based games

Hi folks!

I’m new to UE4 and high-level game engines at all. I would like to get some advice how to implement custom editor tools für grid based games.

Scenario:
I want to use procedural map generation based on semi-complete tiles. Think of a tile like a room/floor or something. The game is going to use a grid based movement system. Therefor the level designer need tools to mark which sections of the grid are accessible and which parts are not (something like a brush to easy mark grid sections as valid/not valid). There is some more work to do like placing objects, lights and wayspoints and so on. The data representation and details on how to implement this is not related to my question. I would like to get some more high level advice how to create such a tool at all. I could think of two ways:

  1. Write my own small Editor (UE4 + UMG) and create all stuff needed to place objects on the tiles and create a brush tool to mark accessible sections. Further i would need a browser save/load functions a few more game related categories for the tiles and so on. This would take a while but i’m pretty sure it would work.

But i rather would like to know if its advisable to integrate that functionality in the UE4 editor cause most of the object placing tools i need already existing there.

  1. The base model could just be an actor - all further models are placed as components or just more actors. Most of the tools we need already existing there. We could finally save the whole “tile” via “replace as composite blueprint” and our map generator can easily spawn objects based on those blueprints later on. But there is the problem with the grid-based tools. The grid should be something like a own actor or component of the base actor and should contain all data for the movement grid. In editor mode we need to mark the sections of the grid (think of it like mesh manipulation or something like that) with a somewhat comfortable tool and finally save these informations with the composite blueprints at the end. The grid informations has to stay in the blueprint (similar to the transformation data of the actos and so on).

What do you think is the best/quickest way to go? I would like to go the 2. way but i really dont know how to start without just start reading engine/editor source code (which is without starting point very unefficient i think).

Now i m able to show you what i want to achieve via screenshots. This is the second way/concept i described above. I’ve implemented some automatic collision mechanics to determine which grid tiles are “valid” and “invalid” in editor mode (screenshot 1: valid - green, invalid - red). This is something that has only to be done once the hole grid + assets are created (by the level designer) so i want to save the pre-computed and manually edited results (grid data stored in a TArray) inside a blueprint.

Workflow:

  1. Create “Room”-Actor (creates default grid data)
  2. Add meshes and other items as scene components to the actor.
  3. Automatically AND (later on) manually edit grid data (mark valid and invalid grid tiles)
  4. Create a Blueprint from Actor (to save the final room ready to use ingame)

As you can see on screenshot 2 the grid data is not saved as new “default” data for the TArray (if so it would not get a reset cause i did a check in code if the array is empty before filling it up with default valid flags). How can i achieve that respect the workflow above (or if it is not possible how to achieve it anyway)?

The grid data is defined as a TArray in an USTRUCT that is defined as member in the custom Room-Actor (the owner).

USTRUCT()
struct AESTUS_API FRoomTiles
{
	GENERATED_USTRUCT_BODY()
[...]
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	TArray<uint8> Tiles;
[...]
};

UCLASS()
class AESTUS_API ARoom : public AActor
{
	GENERATED_BODY()
[...]
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
	FRoomTiles Tiles;
[...]
};

Screenshot 1

Screenshot 2