diff options
Diffstat (limited to 'docs')
-rw-r--r-- | docs/class-diag.puml | 96 |
1 files changed, 62 insertions, 34 deletions
diff --git a/docs/class-diag.puml b/docs/class-diag.puml index f695ed3..30e4a71 100644 --- a/docs/class-diag.puml +++ b/docs/class-diag.puml @@ -210,6 +210,7 @@ rectangle Group_Pathfinding as "Pathfinding" <<group>> { PathfindingContext -> Pathfinder } rectangle Group_Model as "Model" <<group>> { + together { class Museum { + people : People + canvas : Canvas @@ -218,16 +219,31 @@ rectangle Group_Model as "Model" <<group>> { -- + paused : bool + update() + - tick_interval = 15ms <<constexpr>> + -- + skip_forward() + skip_backward() + - jump : int -- - - jump : unsigned long + - snapshot_ticks = 50 <<constexpr>> + - history : stack<vec<Memento>> + - save_snapshot() : vec<Memento> + - restore_snapshot(const vec<Memento> &) -- - working : bool - worker : thread * - work() } + interface Memento { + } + } together { + class CanvasDataMemento { + - data : CanvasData + } + class TileDataMemento { + - data : TileData + } class Canvas { + Canvas(Museum &) -- @@ -240,6 +256,9 @@ rectangle Group_Model as "Model" <<group>> { -- + tile_color : TileColorFactory + tile_behavior : TileBehaviorFactory + -- + + save() : vec<Memento> + + restore(const vec<Memento> &) -- - tiles : vector<Tile *> - museum : Museum & @@ -248,6 +267,11 @@ rectangle Group_Model as "Model" <<group>> { + rows : unsigned int + columns : unsigned int } + } + together { + class ArtistDataMemento { + - data : ArtistData + } class People { + People(Museum &) + update(tick : bool) @@ -255,14 +279,29 @@ rectangle Group_Model as "Model" <<group>> { + add_artist(ArtistData) + remove_artist(Artist &) + get_artists() : forward_list<Artist *> + -- + + save() : vec<Memento> + + restore(const vec<Memento> &) -- - artists : forward_list<Artist *> - artist_count : size_t - museum : Museum & } - interface Memento { + class Artist { + + update(tick : bool) + + step : bool + + color : Color + + data : ArtistData + -- + - data : ArtistData + - museum : Museum & + } + struct ArtistData { + + x : float + + y : float + + vx : float + + vy : float } - People -r[hidden] Canvas } together { class Tile { @@ -281,40 +320,25 @@ rectangle Group_Model as "Model" <<group>> { + y : unsigned int + type : string } - class Artist { - + update(tick : bool) - + step : bool - + color : Color - + data : ArtistData - -- - - data : ArtistData - - museum : Museum & - } - struct ArtistData { - + x : float - + y : float - + vx : float - + vy : float } + together { class TileColorFactory <<factory>> { + get_color(string) : Color <<static>> + register_color(string, Color) <<static>> } - class TileBehaviorFactory <<factory>> { - + TileBehaviorFactory(Museum &) - + create(string) : uniq<TileBehavior> - -- - - museum : Museum & - } - } - struct Color { red : unsigned int green : unsigned int blue : unsigned int } - + } together { + class TileBehaviorFactory <<factory>> { + + TileBehaviorFactory(Museum &) + + create(string) : uniq<TileBehavior> + -- + - museum : Museum & + } interface TileBehavior { + step(Artist *) + update(Tile &) @@ -329,19 +353,19 @@ rectangle Group_Model as "Model" <<group>> { - type = "" <<constexpr>> } class StepTileBehavior { - - type = "G" : <<constexpr>> + - type = "G" <<constexpr>> } class DeleteArtistTileBehavior { - - type = "R" : <<constexpr>> + - type = "R" <<constexpr>> } class SetNeighborTileBehavior { - - type = "B" : <<constexpr>> + - type = "B" <<constexpr>> -- - dx : int - dy : int } class CreateArtistTileBehavior { - - type = "Y" : <<constexpr>> + - type = "Y" <<constexpr>> -- - last_interactions : unsigned int } @@ -362,7 +386,7 @@ rectangle Group_Model as "Model" <<group>> { Canvas --> TileBehaviorFactory People --> Artist - Tile -> TileData + Tile --> TileData Artist -l> ArtistData Canvas -> CanvasData @@ -386,9 +410,13 @@ rectangle Group_Model as "Model" <<group>> { Tile --> "state" TileBehavior Tile .[norank].> TileBehaviorFactory - Memento <|.[norank]. TileData - Memento <|.[norank]. ArtistData - Memento <|.[norank]. CanvasData + Memento <|.. TileDataMemento + Memento <|.. ArtistDataMemento + Memento <|.. CanvasDataMemento + Museum -[norank]-> Memento + People -[norank]-> ArtistDataMemento + Canvas -[norank]-> CanvasDataMemento + Canvas -[norank]-> TileDataMemento ' LAYOUT Artist -r[hidden] Tile |