Experience

  • Aliaswire

    Automation Engineer Co-op

  • Torbu

    Frontend Software Engineer

  • Playstation

    Presentation Progammer Intern

Northeastern University

Northeastern Computer Science 2020-2024

2D Game Engine

CS4580 Final Project '24
Dear ImGUI/SDL3 2D Game builder featuring Entity Component System and Python Scripting.

  • Demo
    • Grid Viewport and Entity Properties
    • Collision Viewport and Spritesheet Editor
    • Tranform Properties and View Settings

Documentation

Project Documentation generated with Doxygen

Architecture

Project Documentation generated with Doxygen

Binary Files

Quick Start with MacOS

  • Post Mortem

    Positive Aspects:

    The Entity-Component-System (ECS) architecture used in this engine is very flexible for configuring entities. It provides an easy way to create new components and manage their lifecycle. The SceneView class allows for easy manipulation of entities and components, utilizing the bitmask data structure to iterate through components efficiently. This is much more efficient than the OOP approach of iterating through all entities and checking if they have the desired components covered in the Space Invaders project.

    Areas for Improvement:

    • Focus on Scripting:

      Given more time, I would prioritize enhancing the scripting capabilities of the engine. This would involve improving the integration with Python, providing more extensive scripting APIs, and enabling more seamless interaction between C++ and Python code. In the engine's current state, scripting is primarily used to create and add entities, but modifying entity properties and behaviors is limited. I would allow the update and input systems to call Python script methods to allow for more customization.

    • Adding a scene manager:

      The engine currently only supports one scene at a time. Adding a scene manager would allow for multiple scenes to be loaded and managed at once. This would allow for more complex games to be created with multiple levels and scenes.

    • Improving Box2D Physics:

      The engine currently uses a grid-based system to build the world. Each tile gets assigned a Box2D body and fixture. Box2D recommends using a single body for all connected tiles in a level. This fixes the issue of the player getting stuck on corners of tiles.

References

Resources, Articles, and Art used in this project

  • ECS David Colson Article here
  • Art Spritesheet Pixel Art here
  • UI Styles TheCherno ImGUI Styles here