Unhooked Engine V2

A 3D game engine created by students from CITM-UPC Terrassa.

Logo Photo

Introduction

Unhooked Engine V2, forked with Sheeesh Engine, is a 3D game engine made by two students, David Ruiz Luengo & Pau Garriga Brotons, as part of their university subject at CITM-UPC Terrassa.

Team

Meet the team:

David's Photo

David Ruiz Luengo

Github: https://github.com/xdavido

Tasks:

Pau's Photo

Pau Garriga Brotons

Github: https://github.com/DonnoNonno

Tasks:

Core Sub-systems

Our engine comprises several core sub-systems:

Last Assignment Sub-system

Particles High Level System

Last assignment was to implement a particle system inside our general engine:

The CEmitter component plays a crucial role in our game engine as it defines and oversees particle emitters. When an emitter is created, its constructor sets default values for the particles it will emit. Importantly, the emitter can be linked to a specific object in the game. The Update() and RenderParticles() methods control the regular updates and visualization of the emitter's particles. For user convenience, PrintInspector() offers an interface to adjust emitter properties, and save/load methods enable storing and retrieving the emitter's state from files.

The ModuleParticles module takes on the responsibility of globally managing the particle system. Its constructor and destructor handle the initialization and release of module resources. The update methods (PreUpdate, Update, PostUpdate) are in charge of keeping emitters updated and managing logic related to the life and explosion of fireworks. CleanUp() is used to free up memory occupied by emitters. This module also provides functionalities for saving/loading the state of the particle system to/from files. Additionally, castFirework() is a function that creates and launches fireworks with random properties.

Moving on to the ParticleSystem component, it defines the overall particle system in our game engine. The constructor initializes a system with a fixed-size list of particles. The Update() method takes care of updating particle positions and life. Emit() generates new particles with specific properties. ParticleBuffer() fills buffers with indices and vertices to represent a particle, while Render() displays active particles using OpenGL, applying interpolation to enhance visual quality. Billboard() ensures that particles always face the camera.

The cohesion of these components is achieved through ModuleParticles, which handles both the update and rendering of emitters and fireworks. ParticleSystem manages the life, emission, and rendering logic of particles. CEmitter defines the specific properties and behavior of individual particles. This system is designed with user-friendliness in mind, offering a straightforward interface to adjust particle properties in real-time. Its modular structure facilitates system expansion and maintenance. In summary, this setup provides a robust foundation for creating and managing dynamic visual effects in graphic environments or games.

Videos:

Video

One-minute speed-up video showing the Engine:

Repository

Link to the code repository and last release to download:

GitHub Repository
Latest Release

License

Unhooked Engine V2 is licensed under the MIT License:

		MIT License

		Copyright (c) 2023 Pau Garriga Brotons & David Ruiz Luengo

		Permission is hereby granted, free of charge, to any person obtaining a copy
		of this software and associated documentation files (the "Software"), to deal
		in the Software without restriction, including without limitation the rights
		to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
		copies of the Software, and to permit persons to whom the Software is
		furnished to do so, subject to the following conditions:

		The above copyright notice and this permission notice shall be included in all
		copies or substantial portions of the Software.

		THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
		IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
		FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
		AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
		LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
		OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
		SOFTWARE.