From febf549c90959b1cbe18fd67c3348930fc7bb8fe Mon Sep 17 00:00:00 2001 From: Loek Le Blansch Date: Wed, 2 Oct 2024 18:55:29 +0200 Subject: more class diagram --- docs/class-diag.puml | 99 ++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 23 deletions(-) diff --git a/docs/class-diag.puml b/docs/class-diag.puml index fb77035..a475575 100644 --- a/docs/class-diag.puml +++ b/docs/class-diag.puml @@ -1,26 +1,33 @@ @startuml +' TODO: +' - state snapshots (memento) +' - send commands from GUI + !theme plain -skinparam linetype ortho -skinparam classAttributeIconSize 0 +skinparam Linetype ortho +skinparam ClassAttributeIconSize 0 skinparam ClassFontStyle bold skinparam DefaultFontName Inter skinparam DefaultFontSize 14 skinparam MaxMessageSize 200 -skinparam Nodesep 25 +' skinparam Nodesep 25 skinparam Padding 2 -skinparam Ranksep 50 +' skinparam Ranksep 50 skinparam RoundCorner 0 +skinparam PackageStyle rectangle +hide <> stereotype +hide <> members class main as "main()" hide main circle hide main members exception Exception { - Exception(const char* fmt, ...) - +what() : const char* - #error : char* - #va_format(va_list args, const char* fmt) + + Exception(const char* fmt, ...) + + what() : const char* + # error : char* + # va_format(va_list args, const char* fmt) } class FileReader <> { @@ -28,27 +35,38 @@ class FileReader <> { } interface File { - #open(string url) - +close() - +read() : string - #clone() const : File* + # open(string url) + + close() + + read() : string + # clone() const : File* } class LocalFile { - -static instance : LocalFile + - instance : LocalFile <> } class HTTPFile { - -static instance : HTTPFile + - instance : HTTPFile <> } class Canvas { + get_tile(x, y) + set_tile(x, y) + - tiles : Tile[] +} + +class Artists { + - artists : Artist[] +} + +class World { + + load : + - artists : Artists + - canvas : Canvas } class Tile -class TileFactory +class TileAppearance class TileBehavior @@ -60,14 +78,35 @@ class YellowTileBehavior class Artist class Deserializer -class ArtistDeserializer -class CanvasDeserializer +class ArtistsDeserializer { + + set_target(Artists &) + -- + + add_artist(float, float, float, float) +} +class CanvasDeserializer { + + set_target(Canvas &) + -- + + set_meta_rows(unsigned int) + + set_meta_cols(unsigned int) + + add_meta_type(string, Color, unsigned int) + + add_tile(unsigned int, unsigned int, string) +} -package CPR { } +struct Color { + red : unsigned int + green : unsigned int + blue : unsigned int +} + +package CPR { + class Response <> + class Url <> +} package SDL2 { } interface Parser { - +parse(File) + + parse(File) + + heuristic(File) : unsigned int } class CSVParser @@ -76,9 +115,13 @@ class TXTParser File <|.. LocalFile File <|.. HTTPFile + File <. FileReader File .> FileReader -Canvas "1" -> "*" Tile + +Canvas "1" -> "*" Tile +Artists "1" -> "*" Artist + TileBehavior <|-- GrayTileBehavior TileBehavior <|-- RedTileBehavior TileBehavior <|-- BlueTileBehavior @@ -88,14 +131,24 @@ Parser <|-- CSVParser Parser <|-- TXTParser Parser <|-- XMLParser -Deserializer <|-- ArtistDeserializer +Deserializer <|-- ArtistsDeserializer Deserializer <|-- CanvasDeserializer -HTTPFile ..> CPR +HTTPFile --> CPR.Response +CPR.Response - CPR.Url + +ArtistsDeserializer <... Artists +CanvasDeserializer <... Canvas + +World <-- Artists +World <-- Canvas -TileFactory --> Tile +CanvasDeserializer .r Color +File <.. Parser +' LAYOUT +ArtistsDeserializer -r[hidden] CanvasDeserializer @enduml -- cgit v1.2.3