

ALIEN GAME ENGINE
INTRODUCTION
Alien Engine is a Game Engine made by Víctor Segura Blanco and Oriol Capdevila Salinas forked by Pol Recasens Sarrà and Gerard Clotet Rodríguez, four studens from CITM University, Terrassa, for the Videogame Engines Subject in the 3rd grade in 2019.
The code is written in C++.
A User Interface system is included and there are many features and customizable options.


ABOUT US
Pol Recasens Sarrà

-
Component Image
-
Component Button
-
Component Canvas
-
Component InputText
-
Component CheckBox

Gerard Clotet Rodríguez

-
Component Label
-
Resource Font
-
Implemented TrueType
-
Component Button
-
Serialize UI

CORE SUBSYSTEMS
Game Objects
To implement the Game Objects, we followed the Entity Component System. The different components that can be attached to a game object are: Component Transform, Component Mesh, Component Material, Component Light and Component Camera.
Also, you can attach UI components. This will be shown below.
The image below shows the structure of the game object. There's a main class called GameObject, that has instances for every component attached. All the instances are virtual classes that inherit from the base class, called Component. This system emulates the Unity system for GameObjects.
Resource Manager
There are different types of resources: Resource Mesh, Resource Font, Resource Model, Resource Prefab and Resource Texture.
To make the code more efficient and make it faster, we implemented the Reference Counting system. This manager keeps track of every resource and we can count how many references the resource has. If a resource has references, we load it to memory and if the references down to 0, we unload it from memory.
Also, we have implemented the the Serialization system. Some times there are formats that are too slow to read. In order to fix that we store all the meshes, textures, models and fonts in our own simple format in the Library Folder, just as Unity.
The .meta is a text file that stores all the properties of a resource and its UUID, and is used as a linker between the asset and the resource.
GUI
Using the ImGui Library we could create a fast and easy to use User Interface. The method used was using a ModleUI that works as a manager for the different ImGui panels and a Panel class, which every panels inherit from it.
User Interface Sub-System
In the last assignment we have created a UI system that uses the Unity UI as a reference.
Every UI component is setted as a component for a game object. In that way, we can create different types of UI components: Component Canvas, Component Button, Component Image, Component CheckBox, Component Input Text and Component Label.
As a component, they inherit from the base class Component.
They can be created by opening the UI menu in the top bar menu.
Every component will be created without texture and in the Inspector, we have created a drag&drop system to allow the user put a texture from the assets folder to the UI component.
Also, in play mode, all the UI components that have intern logic, such as a button or a checkbox(clicking them a function is executed) have a button in the inspector panel that allows you to execute it's logic to test them or you can simply click the component in the screen.
Every UI component that has a texture, uses a Resource Texture and using the OpenGL, we can draw them.
Component Canvas
The canvas is where all the UI is setted. If there's no canvas and you create a UI component, the canvas will be created automatically. It has no texture and it works as the parent of every component of the UI.
Component Button
The component button allows you to execute a function when you press it. It is created without texture, and if you want to put a texture, you can do it by dragging it in the inspector. Also in the inspector you can change the state colors. This colors are drawn above the texture, and allows you to differentiate between idle, hover and pressed state and in the inspector you will have a button to execute it's logic(only in play mode).
Component Image
The component image is just a texture. Same as the button, you can drop the texture you want from the assets folder to the image inspector.
Component CheckBox
The component CheckBox uses the component image to change the texture between being selected or not. Clicking on it will execute a function and the checkbox will be marked. If you click on it again, the checkbox will be unchecked and leave the code as it was before clicking. Same as the button, you can change the state colors and in the inspector you will have a button to execute it's logic(only in play mode).
Component Label
For the component label we needed to include the FreeType library, which allows us to create textures from strings.
Once you create a label, in the inspector you will see an input text, where you can write the string you want for your label.
Component Input Text
The component Inpu Text uses the label component too. As the button, when you click it a function will be executed. In this case the component will start getting keyboard input. That way, you can type whatever you want (10 characters maximum) and once you press "Enter" or click on the "Done" button that will appear in the inspector, the input text will stop receiving the keyboard input. The label will be updated at the same time as you type. As other components, you can change the state colors.


Other Features
-
Time Management
-
Quadtree and Frustum Culling
-
Camera Editor
-
Scene Serialization
-
Importers (Scene, Material and Shaders)
-
Mouse Picking
-
FileSystem
VIDEO EXAMPLE
Download Now!
Installation
To install the game follow the next steps
1. Click in the link you will find in the bottom of the page
2. Download the last release
3. Once the .zip is downloaded, decompress it
4. Execute the game engine and enjoy it!
IMPORTANT: do not modify, change or add any folder or file except for
the assets folder as you might not be able to execute the engine properly. ___
Contact Us
We want to hear from you!