top of page

Imperius

Imperius is a personal project meant to showcase my skills and knowledge
- Using different software architecture and design patterns such as MVVM, Singleton, Observer, and principles such as OOP
- Use of CI/CD tools and continuous testing using Jenkins and NUnit (Unity Test Framework)
- Expandable and reusable systems such as the Attack system usable by the enemies and the player alike

Software design patterns and principles

In the project I apply OOP (Object Oriented Programing) principles to follow a code standard, keep the code modular and extendable. I followed four classic points:
I use encapsulation for every class, allowing only private access to variables and only public functions can interact with them, such as in the class Health, the currentHealth variable can only be changed via either public void TakeDamage() or public void Heal().

OOP

image.png
I use inheritance to avoid repeating logic. For example I use a Singleton base class that handles instance creation and persistence (DontDestroyOnLoad) which all singletons inherit from.
I use polymorphism which allows a class to work with any subclass of a base class by calling functions defined in the base class. For example in the attack system, an AttackHanlder class can call the ExecuteAttack() function on any subclass of Attack, such as MeleeAttack or RangedAttack, without needing to know the specific type.
Group 1.png
And I use abstraction to simplify interactions between classes. Allowing them to use another's functions without needing to know any internal implementation. For example again the AttackHandler can simply call ExecuteAttack without knowing the details of how each attack works. Or Attack doesn't have to know the currentHealth to try to do damage.
Link to the Attack System:

CI/CD pipeline

image.png

Jenkins

In the project, I set up a small Jenkins pipeline to automate the build process. It compiles the Unity project, runs all editor and playmode tests (UTF), and then packages the build into a zip file. While deployment isn’t needed for a small project like mine, I understand how Jenkins can also handle that step.

Major Systems

Reusable Attack System

I wanted to showcase some of the major systems that I made in this project, starting off with the attack system. It allows for the making of any different kind of attack, for now I've made ranged and melee. All of them being usable by the attack handler by simply calling ExecuteAttack().
image.png
image.png
The Ranged attack allows for any projectile of any amount to be shot in any direction with whatever speed and downwards force, allowing for full flexibility.
image.png
And for melee it allows for the activation of any thing that could do damage in some area (sword, scythe, etc.) and transmitting damage while it's being "swung".
Also, both the player and all enemies are using this attack system, with their own player/enemy attack handlers.

The project is of course still in progress and with time I'll add as much as I can!

bottom of page