From b8d946a4f14f7e32df9f3ddc325931283b771d8e Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Fri, 25 Oct 2024 18:47:14 +0200 Subject: update class diagram & readme --- docs/class-diag.puml | 96 +++++++++++++++++++++++++++++++++------------------- readme.md | 15 ++++++-- 2 files changed, 74 insertions(+), 37 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" <> { PathfindingContext -> Pathfinder } rectangle Group_Model as "Model" <> { + together { class Museum { + people : People + canvas : Canvas @@ -218,16 +219,31 @@ rectangle Group_Model as "Model" <> { -- + paused : bool + update() + - tick_interval = 15ms <> + -- + skip_forward() + skip_backward() + - jump : int -- - - jump : unsigned long + - snapshot_ticks = 50 <> + - history : stack> + - save_snapshot() : vec + - restore_snapshot(const vec &) -- - 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" <> { -- + tile_color : TileColorFactory + tile_behavior : TileBehaviorFactory + -- + + save() : vec + + restore(const vec &) -- - tiles : vector - museum : Museum & @@ -248,6 +267,11 @@ rectangle Group_Model as "Model" <> { + 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" <> { + add_artist(ArtistData) + remove_artist(Artist &) + get_artists() : forward_list + -- + + save() : vec + + restore(const vec &) -- - artists : forward_list - 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" <> { + 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 <> { + get_color(string) : Color <> + register_color(string, Color) <> } - class TileBehaviorFactory <> { - + TileBehaviorFactory(Museum &) - + create(string) : uniq - -- - - museum : Museum & - } - } - struct Color { red : unsigned int green : unsigned int blue : unsigned int } - + } together { + class TileBehaviorFactory <> { + + TileBehaviorFactory(Museum &) + + create(string) : uniq + -- + - museum : Museum & + } interface TileBehavior { + step(Artist *) + update(Tile &) @@ -329,19 +353,19 @@ rectangle Group_Model as "Model" <> { - type = "" <> } class StepTileBehavior { - - type = "G" : <> + - type = "G" <> } class DeleteArtistTileBehavior { - - type = "R" : <> + - type = "R" <> } class SetNeighborTileBehavior { - - type = "B" : <> + - type = "B" <> -- - dx : int - dy : int } class CreateArtistTileBehavior { - - type = "Y" : <> + - type = "Y" <> -- - last_interactions : unsigned int } @@ -362,7 +386,7 @@ rectangle Group_Model as "Model" <> { Canvas --> TileBehaviorFactory People --> Artist - Tile -> TileData + Tile --> TileData Artist -l> ArtistData Canvas -> CanvasData @@ -386,9 +410,13 @@ rectangle Group_Model as "Model" <> { 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 diff --git a/readme.md b/readme.md index 42c9aaf..93cbf4a 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,14 @@ -# TODO +This is a standard CMake project. To build (using Ninja), run: -- update class diagram -- triple check class diagram +``` +$ cmake -B build -G Ninja +$ ninja -C build +``` + +This project uses the following third-party dependencies, which must be +installed globally before building this project: + +- [SDL3](https://github.com/libsdl-org/SDL) 3.1.3 +- [cpr](https://github.com/libcpr/cpr) 1.11.0 +- [pugixml](https://github.com/zeux/pugixml) 1.14 -- cgit v1.2.3