Cargo Busters
Techs Demonstrated
- C#
- Unity
- Git
Project Summary
The purpose behind "Cargo Busters" as a project is simple. It's to gain experience creating a large application. Managing complexity is the key emphasis here, and the core lesson to takeaway is of writing clean code.
This project still continues to push my problem-solving skills as I add mechanics-- from designing Ai behaviours, to creating radar systems, to maintaining signaling events, to building scalable and modular entities, to even managing hardware resources.
And most importantly, developing this project also makes me happy. ^_^
Features
Ai Behavior
Each Ai ship dynamically engages enemy ships while doing it's best not to damage friendlies. Depending on the ship's weaponry, each ship does its best to maintain a safe distance from the target during engagement.
How: Each ship has a controller that communicates with the it's own subsystems. The scanner subsystem picks up enemies, the engines subsystem provides movement, and the weapons subsystem controls firing and weapon cooldowns. This abstraction and encapsulation of the ship's subsystems keeps the controller's logic clean, which in turn allows for more complex maneuver implementations (such as maintianing a set distance from a target, or exercising smarter fire decisions).
Wave Spawning
Ships spawn into the zone each wave, and once a wave is completed then the volumne of incomming ships increase. When a variable amount of waves are completed, then the round is completed. Enemy ships get stronger each round, but the volume of ships return to a minimal level.
Upgrades
The upgrades are straight-forward, and they range from simple hull and shield and damage upgrades to increased shield regen rates and unlocking other special actions (like spending time to repair the ship or warping out of the combat zone).
Looting Disabled Ships
When a ship is disabled, it's cargo may be plundered. Simply getting close enough and completing the loot action will reward the player with resources.
How: This was a bit tricky to implement. Firstly the area around the player is monitored for lootable objects, and when is in range, the respective UI element is displayed. The looting action takes time, and the target must close to the player for the action to complete. Taking damage also cancels the looting.