docs(class-diagram): complete class diagram (#35)

Co-authored-by: Djelal Boudji <dboudji@unistra.fr>
This commit is contained in:
djelalb 2025-02-03 16:56:26 +01:00 committed by GitHub
parent af64c2e0f4
commit 51404e5cc6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,89 +5,107 @@ skinparam classAttributeIconSize 0
skinparam classFontStyle Bold skinparam classFontStyle Bold
hide enum methods hide enum methods
class Player { class GameManager {
{field} + JUMP_FORCE: Double {readOnly} - score: int
{field} + SPEED: Double {readOnly} - isPaused: Boolean
{field} + SPEED: Double {readOnly} + StartGame()
+ RestartLevel()
+ PauseGame()
+ ResumeGame()
+ UpdateScore(points: int)
}
{method} + jump() class Level {
{method} + isJumping(): boolean - name: String
{method} + OnCollisionEnter2D(collision : Collision2D) - musicPath: String
{method} + OnCollisionExit2D(collision : Collision2D) + StartLevel()
+ EndLevel()
+ CheckCompletion(): Boolean
} }
abstract class LevelElement { abstract class LevelElement {
{field} + x: Integer - x: Float
{field} + y: Integer - y: Float
{method} + getImagePath(): String {abstract}
} }
class Obstacle extends LevelElement { abstract class Obstacle extends LevelElement {
+ TriggerEffect(player: Player)
} }
class Platform extends Obstacle { class Platform extends LevelElement {
} }
class Spike extends Obstacle { class Spike extends Obstacle {
+ TriggerEffect(player: Player)
} }
class Portal extends LevelElement { class Portal extends LevelElement {
- destination: Vector2
- type: PortalType
+ Teleport(player: Player)
}
enum PortalType {
Normal, Gravity, Speed
} }
class Bumper extends LevelElement { class Bumper extends LevelElement {
- bounceForce: Float
+ Bounce(player: Player)
} }
class LevelEnd extends LevelElement { class LevelEnd extends LevelElement {
+ TriggerEndGame()
} }
abstract class Level { class Collectible extends LevelElement {
{field} + jsonPath: String - points: int
{field} + name: String + Collect(player: Player)
{field} + musicPath: String
{field} + progression: Integer
{field} + totalJumps: Integer
{field} + totalAttempts: Integer
{field} + killedCount: Integer
{method} + placeElements()
{method} + placeElement(levelElement: LevelElement) {static}
} }
class LevelStats extends Stats { class Player {
- JUMP_FORCE: static const Float = 26.6581
- SPEED: static const Float = 8.6
- rigidBody: Rigidbody2D
- isColliding: Boolean
- isGrounded: Boolean
- gravityScale: Float
+ Jump()
+ IsJumping(): Boolean
+ OnCollisionEnter2D(collision: Collision2D)
+ OnCollisionExit2D(collision: Collision2D)
+ ChangeGravity()
+ Die()
+ Respawn()
+ CollectItem(item: Collectible)
} }
class LevelFactory { class LevelLoader {
{method} + createLevel(jsonPath): Level + LoadLevel(jsonPath: String): Level
+ UnloadLevel(level: Level)
} }
class Game { class LevelParser {
+ ParseJSON(jsonData: String): Level
} }
Level *--> "- *\nLevelElements" LevelElement : <<Owns>> class MusicManager {
Game *--> "- *\nlevels" Level : <<Owns>> - currentTrack: String
Game *--> "- 1\nlevels" LevelFactory : <<Owns>> - volume: Float
+ PlayMusic(musicPath: String)
' { + StopMusic()
' "name": "Back on Track", + SetVolume(level: Float)
' "music" }
' "elements": [
' {
' "type": "Spike",
' "position": {
' "x": 0,
' "y": 0
' },
' }
' ]
' }
GameManager *--> Level : <<Manages>>
GameManager --> LevelLoader : <<Uses>>
LevelLoader --> LevelParser : <<Uses>>
Level *--> LevelElement : <<Contains>>
GameManager *--> Player : <<Owns>>
GameManager --> MusicManager : <<Controls>>
Player --> LevelEnd : <<Triggers>>
Player --> Portal : <<Interacts>>
Player --> Collectible : <<Collects>>
Obstacle --> Player : <<Affects>>
@enduml @enduml