The Action Component is heavily inspired by the Gameplay Ability System that Unreal Engine provides, but I did not want to have to tackle it's complexity for this assignment, which led me to creating my own much smaller version of it, that still allowed me to easily add and remove actions that the player can perform. This allowed me to quickly iterate and improve the player's actions.
As Ghostrunner featured many interesting and fun movement mechanics, it only made sense that this clone should also have them. Which led to implementing Wall Running, Sliding, Dashing and even Grappling. Out of all I would say that sliding was the hardest to implement as it required me to brush up on my math skills and consider many different scenarios, like what if the player is sliding up/down a slope.
Initially I wanted to build this onto a bigger game-like project with multiple levels and a boss fight at the end but I after starting to design the other levels and other assignments started to come, I realised that I may have overscoped the project, which led me to dial it back down. Eventhough after downscoping the project heavily, I still wanted to implement a save system that way in the future I can keep on working on this project. So I developed a system that would allow actors to be saved, as well combat enounters, actions that the player had gained and currency. Oh also there were checkpoints around the Levels, that would dictate where the player would spawn.
During the development of this project I was able to learn many lessons, as it somewhat large in scope. The main lesson that I learned was early on, I had just implemented the Wall Running and Dash mechanics, as well as some of the combat and I was starting to add the sliding, when I realised that I was doing something really bad. My code was a mess, my Character class was huge and unnecessarily complex. When I came to that realisation I decided to make everything more modular and implement the Action Component and rewrite the Character class with future AI-opponents in mind. This taught me that while getting things running quick and dirty can be beneficial, you should also try to keep the code clean and reusable if you can, that way you will save yourself a lot of time and effort.