
Fungal
Fungal is a third person action game inspired by Max Payne 3. It was created in 14 weeks half time using our own engine.
Contributions
-
Character Controller
-
Functional rigid bodies
-
Joints
-
Destructable Objects
-
Mesh Colliders
-
Revamped triggered events
Character Controller
I implemented PhysX during our last project "Spite: Absolution" but it was very barebones and its only use was raycasting, simple collision detection and triggers. Since this game required direct control of the player character I started of by implementing a PhysX Character Controller. The player and NPC's all have an ENTT component that holds a wraoper class to ease the use of the CCT.

Rigid bodies
The simulation of rigid bodies was created during our last project "Spite:Absolution" but never found any use due to bugs with the position, rotation and scale of static colliders. These faults were caused by exported objects from Unity had a different local position compared to primitives created in engine. When this was solved I created a component that acted as a wrapper for all rigid bodies.

Joints
We wanted to player to be able to interract more with his surrounding. I was tasked with the creation PhysX simulated joints. I imported relevant joint data from Unity such as angular/linear drag, the transform of the anchor point and limits to the rotation of the body and put it all together in the Physics Factory I wrote.
Destructable Objects
With rigid bodies working correctly I wanted to play around with it more than just having the player run into boxes and having the tumble over. I created a component that could be placed on any entity which would cause it to explode when shot. All data related to the explosion are loaded in through JSON on startup such as number of fragments, collider size, force and spawn radius. When shot the center of the parent object is seleced as a spawn point and we randomize positions in a uniform sphere around the radius and pushed outwards using the rigid body interface shown earlier.
Mesh Colliders
I created support for both convex and concave mesh colliders. The vertex data for the convex meshes are imported from Unity while concave meshes are created using the model data from our own .fbx files directly in the engine. The engine supports mesh colliders with more than one mesh per model and uniform scaling of the collider.
All models of the same type share an instance of a mesh collider to speed up the level loading process.

Scripted events
During our last project the implementation of an event had to be done by a programmer. With the addition of a visual scripting system in the engine the work could be done by another discipline. This changed the way triggers were activated.
When the player enters a trigger box a script component on the trigger is activated. I created a new node which allowed visual scripts to be activated from another script giving us the ability to open doors and spawn waves of enemies.

A typical script placed on a Trigger to activate another script via its unique ID

A door opening script executed from another script

A typical script placed on a Trigger to activate another script via its unique ID