Genre: Dungeon Crawler
Production time: 10 weeks, 50%
Team size: 20
Engine: Sås Engine (Custom engine)
For this project I implemented navmeshes, integrated my component system from Znoosing Zoombie, created a way for us to save components, and implemented 3D intersections.
An system for detecting intersections between basic primitives. This system supports boxes, capsules, spheres, and raycasts. Some intersections are fairly easy to detect, such as sphere-sphere, needing only to compare the radius and the distance, and sphere-capsule, being a distance check between a point and a line. The box intersections proved more difficult, but could mostly be solved by moving the other object into the cube's space and performing an intersection test against an AABB (Axis-Aligned Bounding Box) instead. This wasn't possible for a box-box test forcing me to implement a solution using the Separating Axis Theorem.
A technique that creates a believable path through a navmesh. We had already implemented A* and navmeshes as part of my classes at TGA, but only in the form of node to node navigation, causing a zigzag path. A solution to this is using a funneling algorithm. I implemented this following a blog post by Mikko Mononen, wherein you traverse the corners of each node to find where the path bends. You then insert points in these places which you connect to form a final path. A problem with this is that actors will hug the edges of the navmesh, so I implemented my own solution for moving the actors closer to the center by scaling the portals based on the size of the actor.