Game engine

About the project

Voor het vak AMP op school maakte wij een physics engine in javascript, op een gegeven moment werd het project nogal chaotisch omdat de lessen niet zo soepel loopte. Daarom besloot ik het hele project opnieuw te maken en te designen maar dan in typescript. Een van de grootste voordelen hiervan is dat het hele project in 1 js file wordt gecompiled. Waardoor ik niet meer bezig hoef te zijn met welk script ik importeer. Ook kan ik variabele een type meegeven, class extenden en implementeren. Dit heeft er voor gezorgt dat de huidige engine veel fijner is om te gebruiken. En een stuk logischer is om verder aan te werken.

A

school-personal, Engine

Webstorm

Typescript

Programmer

SHOWREEL

Engine core

De core van de engine is een script dat automatisch deze Engine class maakt. In de Engine class bevindt zich ook de CoreLoop. De CoreLoop is een AnimatedFrame die de Update function uitvoert in de EngineClass. De update methode is waar alles gebeurt. In de update methode loopt hij 3x door alle scene's, 1x om alle scenes te updaten. 1x om alles scenes te renderen en 1x om de LateUpdate te doen indien je op het einde nog bepaalde code wilt runnen.

Scenes

Het scene systeem maakt een canvas aan op die absolute is zodat ze over elkaar komen. elke Scene heeft ook een zIndex deze default op 0 en en dus worden ze geupdate op de volgorde dat je ze hebt gemaakt. Als je de zIndex veranderd doet hij de scene met de hogere zIndex later update. Tijdens de mainloop gebeuren er 3 dingen in de scene, De scene update elk object het voegt bijvoorbeeld de velocity toe aan de position. De scene rendered elk object en de scene doet de lateUpdate hier worden dingen gedaan die na het renderen moeten gebeuren of kan worden gebruikt om op het einde nog een effect over het scherm te doen.

GameObjects

GameObjects in de engine kunnen verschillende objecten zijn een gameobject kan bijvoorbeeld zijn, een lijn, een circle, een cube, een sprite en nog veel meer!. Tijdens de MainLoop worden ook alle gameobjects in de scene's geupdate. Eerst wordt dus de gameobject geupdate hier wordt bijvoorbeeld de velocity toegevoegd. Daarna wordt het gameobject gerendered. De gameobject heeft een reference naar de scene waarin hij zit zodat hij de scene offset kan gebruiken. En op het einde wordt de lateUpdate uitgevoerd. Dit is handig als je op het einde nog iets met het gameobject doen.

EventSystem

Het eventSysteem wordt gebruik in de engine, maar kan ook los gebruikt worden. Het Event Systeem werkt met en zonder parameters maar omdat het javascript blijft is er geen manier om dit te forceren tijdens het gebruiken hiervan. ook kan niet geforceerd worden dat je een parameter mee geeft tijdens het invoke van een event. Dit kan zowel voordelig zijn maar ook nadelig zijn. Voordelen zijn dat er meer ruimte is voor wat je meegeeft en wat je niet mee geeft. Nadeel is dat de je dus niet kan forceren dat er iets is mee gegeven. wordt en null checks moet gaan doen.

PathFinding

Een van de dingen die ik wou kunnen doen met mijn engine was path finding. Ik heb een A* path finding systeem gemaakt dat makkelijk gebruikt kan worden. Met een paar regels code kan je een path generate en verkrijgen. Wat je verder met de path doet is aan jezelf. Ik zorg ook dat ik de AI size gebruik, dus niet de position van de AI mijn zijn object size. Voor de demo die ik heb gemaakt heb ik ook een menu toegevoegd met settings zoals de AI speed, het toevoegen van objecten of het resetten van de demo.