classDiagram
class GridObject
class Unit
class Building
class Action
class Interact
class Attack
class Movement
class Ability
class AbilityEffect
class TurnManager
class Squad
class PlayerSquad
class AllySquad
class EnemySquad
class Spawner
class BuildingSquad
class Health
class Interactable
class EscapePod
class McGuffin
graph TD
TurnManager *-- Squad
PlayerSquad *-- Unit
EnemySquad *-- Unit
AllySquad *-- Unit
BuildingSquad *-- Building
GridObject <|-- Unit
GridObject <|-- Building
GridObject *-- Interactable
GridObject *-- Health
Unit *-- Action
Unit *-- Ability
Ability *-- AbilityEffect
Action <|-- Interact
Action <|-- Attack
Action <|-- Movement
Squad <|-- PlayerSquad
Squad <|-- AllySquad
Squad <|-- EnemySquad
Squad <|-- Spawner
Squad <|-- BuildingSquad
Interactable <|-- McGuffin
Interactable <|-- EscapePod
classDiagram
Singleton --|> CombatManager
GridObject --|> Unit
GridObject --|> Building
CombatManager --> Unit : Association
CombatManager --> CombatEventsChannelSO : invokes and listens to
CombatManager --> GameState : Association
Unit --> CombatEventsChannelSO : invokes and listens to
class GameState{
<<enum>>
PlayerTurn
EnemyTurn
EnemySpawn
}
class CombatManager{
-Dictionary<Unit,bool> playerUnits
-Dictionary<Unit,bool> enemyUnits
-CombatEventsChannelSO _CombatChannel
+Unit ActiveUnit
+int turnCount
+GameState currentState
-void PopulateCombatList()
-void SortUnitsByInitiative()
-void FindNextEnemy()
-bool CheckIfAllUnitsExhausted(Dictionary<Unit,bool>)
-void OnUnitExhaust(object, CombatEventChannelSO.OnUnitExhaustEventArgs)
-void OnUnitAPChange(object, CombatEventChannelSO.OnUnitAPGainEventArgs)
+void SetActiveUnit(Unit newActiveUnit)
-void StartEnemyTurn()
+void NextGameState()
-void EndTurn()
}
class CombatEventsChannelSO{
+event EventHandler<OnUnitExhaustEventArgs> OnUnitExhaust
+class OnUnitExhaustEventArgs
+event EventHandler<OnUnitAPGainEventArgs> OnUnitAPGain
+class OnUnitAPChangeEventArgs
+event EventHandler<OnActiveUnitChangeArgs> OnActiveUnitChange
+class OnActiveUnitChangeArgs
+event EventHandler<OnGameStateChangeEventArgs> OnGameStateChange;
+class OnGameStateChangeEventArgs
+ event EventHandler<OnTurnEndEventArgs> OnTurnEnd
+class OnTurnEndEventArgs
+void RaiseOnUnitExhaustEvent(Unit)
+void RaiseOnUnitAPGainEvent(Unit)
void RaiseActiveUnitChangeEvent(Unit)
void RaiseOnGameStateChangeEvent(GameState)
void RaiseOnTurnEndEvent(int)
}
class Unit {
-Tilemap _tilemap
-GridData _gridData
-Vector3Int _currentCellPos
+bool playerSquad
+string unitName
+CustomTile tileOverlay
+Tilemap overlayTilemap
-CombatEventsChannelSO _CombatChannel
-bool _activeUnit
+int MoveDistance
-int maxAP
+int currentAP
-void Spawn()
-void ResetAP()
-void OnUnitSelected(object, CombatEventsChannelSO.OnActiveUnitChangeArgs)
+void ExecuteAction()
-void OnTurnEnd(object, CombatEventsChannelSO.OnTurnEndEventArgs)
+void Move(List<TileInfo>)
-void UpdatePositionOnGrid()
+public List<Vector3Int> FindWalkableTiles()
}
class Singleton{
-static T instance;
+static T Instance
+static bool IsInitialized
#virtual void Awake()
#virtual void OnDestroy()
}
class GridObject {
<<Interface>>
var position
void Remove()
}
class Building{
}
classDiagram
class GridObject
class Unit
class Building
class Action
class Interact
class Attack
class Movement
class Ability
class HP_Change
class Build
class Construct
class Utility
class CrowdControl
class TurnManager
class Squad
class PlayerSquad