Click edit button to change this text. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.

IGArt Custom Engine

IGArt is a custom 2D engine focused on platformers, with the ability to create other 2D games. It features: a component system, multiple scenes, a scene editor, parent-child relationships, gizmos, a spline tool, a behaviour tree editor, a particle editor, a terrain tool, and much more. The engine runs on PC and PSVita.

SplineTool

Responsibilities

  • Implementing core engine structure.
  • Implementing the scene editor (hierarchy and properties panels).
  • Implementing mouse picking.
  • Implementing gizmos.
  • Implementing the 2D animation system.

Details

Role: Engine & Editor Programmer

Development Time: 14 Weeks

Team Size: 9

BehaviourTreeEditor

My Main Features

Scene Graph

The scene graph in IGArt is a tree representing a set of parent-child relationships. At the top of the tree are the parent-less objects, or those that are direct children of the scene. Parents have a pointer to their children, and every frame, the tree is recursively walked, updating the transform matrices of any entities marked by the dirty flag pattern. The code for this can be found in the Github link above.

Editor & Gizmos

The editor of IGArt has a simple class structure. The main editor class contains a vector of EditorWindows, a base class for any window to be shown in the Editor. The Editor class iterates through this vector each frame, and each EditorWindow subclass executes it’s own functionality from there. For the GUI, we made use of ImGui, as it’s simplicity matched our designs. Likewise, we used ImGuizmos for gizmos.

Sprite Animation

The sprite animation component in IGArt takes a sprite sheet and atlas file output from Spine, and parses at run-time in the editor. The relevant data is serialized along with the scene when it is saved, excluding the texture. When the data is loaded along with the scene, the animation component requests the engine to load the texture, and then allows for animation playback.