Technical Design Document
The most intuitive approach in this game for me was pipeline-style architecture.
The pipeline should update every tick. The time between ticks should be aggregated from data (Config and State). On an abstract level, we have three main blocks: data, view, logic. Logic changes data, view displays data.
All that's happened in the pipeline. So basically pipeline here is a sequence of view and logic components that call every tick.
The view will be Monobehaviours, logic simple C# clases, all they should implement IStageble interface and all run by TickController class. Data will be presented like ScriptableObjects
View pipeline stages
Logic pipeline stages
Specific mission logic stagesThat's definitely not all classes that have to be written for this game, but it's covered 70-80%. Some parts will change, something will be added, but the game's essential picture will be the same