I’ve tried something similar to @Wisdom-'s approach. Replicate the dungeon configuration and everyone sets that config and builds the dungeon locally. If anyone has a better approach, please let me know
@AngeIV Have you tried the 2x2 spatial constraint? I’ll make a demo tomorrow
@CyberKatana I created a event listener BP to remove duplicate nearby markers but something broke in 4.15 and the marker list modifications are not being reflected (got a blue NOTE bar). There are some open issues on this. I’ll implement it in C++ in the next build
Landscape - I was planning on just using a textured spline-plane for roads, or painting onto the terrain.
Got fence corner detection working by using spartial constraint 2x2 for 2 objects. first goes:
empty empty
empty ocupied
second goes:
ocupied ocupied
ocupied empty
first one detects sharp angles, second wide angles. works like a charm. anyway - that was a problem with badprops that had “corner” fence as a 90 degree railing piece. horror.
Digging into the documentation. Cant wait the FloorPlan Builder Hopefully it will allow making floor not having the same floor plan. As I am using DA for multi story building creating via grid layered on top of each other.
For multiplayer - In one project I am using replicated blueprints that are child to static mesh blueprint (stiull can have normal actor logic). They can be replcaterd. I fured it out because I needed wall pieces that can be replicated and swaped for destructible wall piece of same looks runtime. As destructible have terrible geometry and are gpu killers if not used properly.
Updated the quick start guide for 2.6
- Landscape Transformer
- Multi Dungeon Custom Layout Example
- Custom Grid Builder Example
- Query Nearby Markers
- Snap Modules Demo
Uploaded 2.6.0 to the website (Windows). I’ll test on mac and publish to the Marketplace. The User Guide and Quick Start Guide have been updated for 2.6
Version 2.6.0
- Landscape Transformation: Landscapes can now be automatically modified (height and paint data) when the dungeon is built. Since the engine supports only landscape modification from within the editor, this works only at design time and not runtime
- Added a content browser to the theme editor window
- Theme asset files now show a thumbnail, captured from the preview viewport.
- Added drag drop support on the theme editor. You can now drag and drop meshes, blueprints, particle systems etc to the theme editor and a node will automatically be created
- Added more parameters to the Grid Transform Logic, similar to the parameters in the Grid Selector Logic
- City Builder: Added spatial constraint on the simple city builder
- Selectors can now query nearby markers. These are great for not spawning blocking items near doors and stairways
- Custom Builder: Added a custom grid builder that makes it easier to create your own dungeon layouts using high level blueprint functions
- Snap Builder: Fixed Snap door state issues on level reload
- Increased the default value of grid config’s Door Proximity Steps from 2 to 6 for better quality door removal by default on dungeons
- Added a new snap demo level in the quick start guide
In the floor plan, the direction toward the building wall is only in the 0 direction and the y direction and 90 degrees in both directions.
How do I get it to be made in 4 directions?
Current (0,90) Wall direction you want to change (0,90,180, -360)
Simple question: how do you properly typecast to FloorPlanConfig? Every time I cast my dungeon’s config, it fails. I’ve wasted a weekend on looking for this, but the documentation doesn’t describe it. Also, I would have searched on for the answer, but search within this forum is worthless.
waiting for marketplace update…
In Runtime/SceneProviderCommand.cpp at line 59 (before the SetMeshComponentAttributes call) just put this setting, which will enable for the non-instanced meshes to copy and use the collision settings from the Theme editor:
MeshComponent->bUseDefaultCollision = false;
This actually is a pretty cool feature, however the Instanced meshes will not follow this unfortunately. In the Runtime/DungeonInstancedMeshActor.cpp at around the line 58 (just after the SetStaticMesh() call) you can put these lines:
Component->bUseDefaultCollision = false;
UEngine::CopyPropertiesForUnrelatedObjects(Mesh->Template, Component);
This will enable for the instanced mesh components, that the collision profile (along with the rest of the mesh settings) to be inherited from the Template asset.
One note tho, that these mesh template settings you set up in the dungeon theme will not gets populated until you open up the theme asset in the editor before spawning the dungeon. This apparently is because the Runtime/DungeonMesh.cpp will initialize a default StaticMeshComponent for the Template property, and that will erase these settings. This only happens until you open the Theme Asset in the editor, when the proper Template settings gets populated, and from that point it will be accessible for the Dungeon to build the mesh with the chosen properties.
To overcome this issue; i have removed the initializations from the Runtime/DungeonMesh.cpp (just empty the constructor block). I have yet to found any problems with this modification. It makes me wonder why was the initialization neccessary for the DungeonMesh to create a new StaticMeshComponent in the first place?
Hi Mr. ! Firstly, your creation is incredible. It has inspired me very much! However, I have a question. How did you manage to create the Theme Editor for your project? You don’t have to tell me the exact secrets, I’m just looking for somewhere to start. Thank you!
You can have more than that, since you are a customer of the entire source code that you are allowed to read, (and modify for your own use) which should reveal much about the answers. The DungeonArchitectEditor/ folder will hold everything that is editor ui related, but obviously the runtime folder will also contain the classes for the individual asset types. The Graph editor (Ed Graph) related classes can be found in the Core/ folder.
Dungeon Architect is not the only plugin that utilize the editor ui in unique ways, the Able plugin is also a very interesting addition. The rest you should be able to figure out by learning the engine source code which is filled with examples to all sorts of ui panels (that is the editor is currently using).
@simpple, I just checked, it emits only on 0, 90. It requires changes to the C++ builder code. I’ll added proper wall orientations in the future update
@AngeIV I’ve submitted to Epic yesterday. I’ll keep you posted on the status
@Konflict Thank you for the tips. I’ll have a closer look at the collision flags
@MasterCheif Thank you for using DA! Like @Konflict said, you can use DA’s source code as a learning resource for your own plugins
If you want to create a new window, you’ll need to subclass from FAssetEditorToolkit (DungeonArchitectEditor\Private\Core\ThemeEditor\DungeonArchitectThemeEditor.h). You can spawn your own tabs inside this window from the RegisterTabSpawners function.
You’ll probably need some asset that you save in the content browser (like the theme file). This asset data will be a UObject (e.g. DungeonArchitectRuntime/Public/DungeonThemeAsset.h) in your runtime module. Then create two classes in the editor module so you can save this data in the content browser as an asset (DungeonArchitectEditor\Private\Core\ThemeEditor\DungeonThemeDataFactory & DungeonThemeAssetTypeActions)
The Factory class links your UObject data class with the asset. The Asset Type Action lets you customize the asset (color, name etc). you will also link the editor window with the asset so your window can be opened when double clicked
When I started DA two years ago, there wasn’t much documentation on editor plugins except for this gem: Extending the Editor
I highly recommend the video if you are doing any editor programming. Then there is always the engine source code
The latest version 2.6.0 is available in the marketplace
You’re welcome. Can you please reply to the issue with the constructor of DungeonMesh? Why the initialization of the static mesh component was required in there? I don’t see any issues by removing that constructor code block, also fix the issue i mentioned previously (the mesh’ custom properties wont be applied unless you open up manually the theme asset in editor first).