Unreal C++ Game Systems
The systems in this project are written in pure C++, including the widgets. There are no blueprint functions or implementations of any sort. There are only design blueprints.

All the systems include compiling tests to prevent design errors, for example, setting an incorrect widget class will result in compile error or leaving an important variable empty will also result in compilation failure (the blueprint will not save and will not compile).
Inventory system. Supports the following:
   *. Item tooltips.
   *. Stacking items.
   *. Dragging items around.
   *. Removing gaps in inventory.
   *. Sorting by names.
   *. Search.
Simple dialog system.
Widgets framework. Supports:
   *. Dragging widgets around.
   *. Widget settings, each widget can have its own settings.
   *. Opening/closing multiple widgets.
   *. Game remains responsive to input while widgets are open (game and UI mode).

The current possible settings for widgets are:
   *. Scale.
   *. Changing text size.
   *. Changing text color.
All the settings are saved persistently, and do not reset.

Important to note all calculations are resolution independent. The UI will work for any resolution and the location will persist even if we change the resolutions or work in non-standard resolutions.

Update: The framework now supports placing the cursor on the location where the widget opens.
Quest dialog. Supports:
   *. Quest name.
   *. Description.
   *. Rewards + tooltip for the rewards.
   
Supports the following settings:
   *. Scale.
   *. Changing quest name text size.
   *. Changing description size.
   *. Changing quest name border color.
   *. Changing objectives border color.
   *. Changing description border color.
   *. Changing rewards border color.
All the settings are saved persistently, and do not reset.
Quest log. Supports:
   *. Selecting a quest and seeing all its data.
   *. On-Hud tracking.
   
Supports the following settings:
   *. Scale.
   *. Changing description size.
   *. Changing active quests border color.
   *. Changing quest name border color.
   *. Changing objectives border color.
   *. Changing description border color.
   *. Changing rewards border color.
All the settings are saved persistently, and do not reset.
Quest System. Supports (currently, still under development):
   *. Location quests.
   *. Collection.
   *. Interaction.

All items which are required for the quest (quest items) are removed from the inventory when the quest is completed.
Exp system.

Supports the following settings:
   *. Dragging (can be moved around the HUD).   
   *. Scale.
   *. Hiding/showing the experience text.
   

Quest system has been extended to give experience upon quests completion, and the UI for quest dialog has been adjusted accordingly.

Basic combat system. Supports:
   *. Basic melee attack.
   *. Targeting.

Supports the following settings:
   *. Dragging (target window can be moved on HUD).   
   *. Scale.
   *. Hiding/showing the target health text.

Quest system has been extended to include quests with killing target. In addition, experience system has been extended to grant experience upon enemy defeat.

Basic health system. Supports:
   *. Dragging.
   *. Scaling.
   *. Changing health text size.
   *. Hiding/showing the health text.

Inventory system has been extended to include items to restore health.

Containers system.

Supports all the features of the inventory widget.

Interaction system has been extended to include "open", "close" and "empty" messages.


Crafting system. Supports:
   *. Recipes are organized by categories.
   *. Can set the number of items to be crafted. The number cannot be set to be greater than the actual maximum number of items you can craft.
   *. Recipes can be searched.
   *. Have maximum crafting button.
   *. Selecting a recipe shows how many of the required ingredients you have in your inventory.

Supports the UI framework of moving the widget and rescaling it.

Interaction system has been extended to include "craft" message.

The crafting table mesh used for the system is of my own making, both in design and in creating the actual mesh (created in Blender).

Storage system.

Supports same functionality as the inventory.

Storage is saved per-storage object, meaning can have multiple storage chests, each with its own size and memory.

Supports the UI framework of moving the widget and rescaling it.

The storage chest mesh used for the system is of my own making, both in design and in creating the actual mesh (created in Blender). In addition, the storage chest has been rigged to run the open and closing animations when we interact with it.

Inventory Update

The inventory system has been extended with new meshes, and new textures to replace the text that was previously used in the inventory slots.

All the other functionalities of the inventory have not been changed.

The meshes are my creation, the textures (icons) are from the net.

Storage Update

The storage system has been updated with new meshes and animations.
In addition, it can now play animation of interaction and end of interaction (opening/closing the storage box).

All the other functionalities of the storage have not been changed.

The meshes and rigging are my work.

Shop system. Supports:
   *. Buying item and selling.
   *. Items with limited stock.
   *. Same items can be assigned to the shop with different prices.
   *. Unlimited stock items.
   *. Buying items in bulk. Notice you cannot input number greater than the actual maximum amount you can buy (limited by both the amount of gold player has and the NPC stock of that item).

Supports the UI framework of moving the widget and rescaling it.

Interaction system has been extended to include "shop" message.

The coin mesh used for the system (adds gold on pickup) was created by me.

Time travel system. Supports:
   *. Travel to future/present.  
   *. Items break/repair based on whether we are in future/present.
   *. Collision changes based on the time period.
   *. Sun and sky changes during transition.

Everything in this system is made by me.

The time travel bar can be dragged and repositioned around the screen.