I realise I haven't been on in quite awhile, but I'm still here! I've been working on the previously known Unknown Chaos project off and on. I've recently renamed the project 'UCPlayground'; the name all spelled out was too long for the engine to handle so I shortened it. Of course it's only known as the shortened named internally, it's known as 'Unknown Chaos: Playground' sometimes with and other times without the colon. I renamed it due to the fact I was actually using it as a sort of sandbox, a playground you might say. I've been using it to learn how to do certain things and how the systems work together for a rpg-like scenario.
The majority of the time I was working on it, it was porting it from Unity 5.1 in 2D to Unreal Engine 4.12 in 3D. The way UE4 does things is different than Unity so there were some challenged along the way. In the Unity version I had a hierarchy for entities with each one providing more functionality such as a name, level, vitals like health etc. This type of hierarchy wouldn't work exactly the same in UE4 due to inheritance. In Unity,
Entity was essentially a base class just deriving from
MonoBehaviour. The class would be for all entities that I wanted (characters, destructibles, spawnables, etc.). Now in UE4, there is already an established hierarchy so having
UEntity derive from UE4's base
UObject would cause problems. A character is an entity but it needs the functionality from
ACharacter as well. It can't be both at the same time without multiple issues. In the end, I refactored how things worked to fit the UE4 style more. The base entity class derived from
ACharacter meaning all entities are actually characters as well. This might change if/when I decide to write my own movement component to mimic the usefulness of the
UCharacterMovementComponent.
I wanted the functionality from the previous hierarchy to be more modular in the new version, so I refactored them into
UActorComponents. The derived classes of
AEntity currently create and set them up as needed, but more or less they can be used anywhere to give something a certain functionality. For example having a barrel with a name using the
UEntityComponent.
I added a MMO-style input system and camera control system that has WoW-like functionality. It's still quite rough around the edges but works for the most part. The only not implemented at the moment is running when both the left and right mouse is down.
The final thing I've been working on so far has been draggable widgets and an inventory system with drag/drop functionality. The item system port from Unity to UE4 was a big change. In Unity I was using SQLite and loading the items into a in-memory database using the marvellous reflection system in C#. However, this wouldn't work in UE4 and I was planning to change the save system anyways. So in UE4 items are saved using json and the items are added to an item database. Although it's still there, the item database serves a completely different function now. There are no in-memory references to the items like there was previously. Instead once the items save file is loaded, it's parsed into its many sections and the item's sections are stored in the item database as their json strings. When an item needs to be created, it takes the data in the json for that item and creates it. I figure this would be a better system than before, especially how the item system is designed and the potential for having lots of items in a game.
All draggable widgets currently implemented.
Base tooltip structure
Properties on the tooltips only show if necessary