The TAIM engine

“A duck shoots a laser… perfect!”

Quick Facts


Type of project:
Solo, Coursework
Date Produced:
late 2020
APIs used:
ENet (Network)
OpenGL (Graphics)
FMod (Audio)
Bullet (Physics)
ImGUI (GUI)

Video


Key features


  • The C++ engine uses commercial middleware which would be used to produce a simple game.
  • The game features a duck that shoots targets, with multiplayer being multiple ducks shooting targets.
  • The engine includes animation, local networking, physics and level switching.
  • It uses common design patterns including flyweight, command (events) and singleton.
  • The engine scored 88% for the module.

the full story


The coursework instructed us to make a 3D, network-capable engine which will be used to produce a game. This was used for common situations of a client/employer wanting the end product via a deadline. Another aspect of this was to look into data-oriented design, where data outside of the engine dictates the game inside the engine.

The engine fulfilled what was planned in a unreal prototype video of my concept, which was shooting targets. This was enhanced in the engine with additional features like animation when a target is hit, camera switching, level switching, sounds and network-capability.

On the development side, nearly all of the game was dictated using JSON-format text files with “components” like colliders and Audio players. These components were also relaxed with what’s required. For example, the “transform” component can use any combination of position, scale and rotation. the Input module (used for inputting from the mouse and keyboard) was designed so that if the input codes change, it does not affect the whole system as they read from a defined dictionary.

The engine fulfilled it’s purpose while adding additional features via a data-oriented approach and design patterns. Flyweight was used for saving performance on setting up multiple models. All modules of the engine responded to the Event system where each module can be independent. It was graded 88% and received good feedback.

Testimonial


“Great use of design patterns with Flyweight, Command, Singleton, Event Queue and Component patterns all present and used well. Great use of classes, an input system with created keycodes, an event system with object-oriented events and function pointers and an entity component based system.”

Lecturers at Coventry University

additional resources


Repository link to “The TAIM engine” in Github:

https://github.com/TaylorRings-MagicEmporium/The-TAIM-Engine