My main objectives were to develop enemy AI, the upgrade system, and the upgrades themselves.
Enemy AI is relatively simple. The most basic enemies simply rush toward the player. From there, variations can be created: some will shoot projectiles, while others will charge at the player.
To manage enemies, a pooling system was implemented. Since it was my first time using this approach, it initially introduced some challenges, but they were quickly resolved.
The upgrade system is quite simple: upgrades are stored in a data table containing their information (such as whether they affect the player or projectiles).
When leveling up, a UI appears with three containers offering different upgrades. These upgrades are determined using an array that is shuffled at each new level. Based on the name and recipient of the upgrade, the relevant information is sent to the appropriate system.