mirror of
				https://github.com/boudji-ludwig-pett/cnam-geometry-dash.git
				synced 2025-06-27 11:58:51 +02:00 
			
		
		
		
	docs: UML updates (#58)
This commit is contained in:
		
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.5 MiB | 
| @@ -147,7 +147,8 @@ TextureImporter: | |||||||
|     secondaryTextures: [] |     secondaryTextures: [] | ||||||
|     spriteCustomMetadata: |     spriteCustomMetadata: | ||||||
|       entries: [] |       entries: [] | ||||||
|     nameFileIdTable: {} |     nameFileIdTable: | ||||||
|  |       Logo_0: 1404028623067837608 | ||||||
|   mipmapLimitGroupName:  |   mipmapLimitGroupName:  | ||||||
|   pSDRemoveMatte: 0 |   pSDRemoveMatte: 0 | ||||||
|   userData:  |   userData:  | ||||||
|   | |||||||
| @@ -155,7 +155,7 @@ RectTransform: | |||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|   m_AnchorMin: {x: 0.5, y: 0.5} |   m_AnchorMin: {x: 0.5, y: 0.5} | ||||||
|   m_AnchorMax: {x: 0.5, y: 0.5} |   m_AnchorMax: {x: 0.5, y: 0.5} | ||||||
|   m_AnchoredPosition: {x: 0, y: -110} |   m_AnchoredPosition: {x: 8.3, y: -154.1} | ||||||
|   m_SizeDelta: {x: 160, y: 30} |   m_SizeDelta: {x: 160, y: 30} | ||||||
|   m_Pivot: {x: 0.5, y: 0.5} |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
| --- !u!114 &39408930 | --- !u!114 &39408930 | ||||||
| @@ -562,6 +562,7 @@ RectTransform: | |||||||
|   - {fileID: 666344588} |   - {fileID: 666344588} | ||||||
|   - {fileID: 39408929} |   - {fileID: 39408929} | ||||||
|   - {fileID: 1809963736} |   - {fileID: 1809963736} | ||||||
|  |   - {fileID: 780585405} | ||||||
|   m_Father: {fileID: 0} |   m_Father: {fileID: 0} | ||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|   m_AnchorMin: {x: 0, y: 0} |   m_AnchorMin: {x: 0, y: 0} | ||||||
| @@ -605,7 +606,7 @@ RectTransform: | |||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|   m_AnchorMin: {x: 0.5, y: 0.5} |   m_AnchorMin: {x: 0.5, y: 0.5} | ||||||
|   m_AnchorMax: {x: 0.5, y: 0.5} |   m_AnchorMax: {x: 0.5, y: 0.5} | ||||||
|   m_AnchoredPosition: {x: 0, y: -45} |   m_AnchoredPosition: {x: 8.3, y: -95.7} | ||||||
|   m_SizeDelta: {x: 160, y: 30} |   m_SizeDelta: {x: 160, y: 30} | ||||||
|   m_Pivot: {x: 0.5, y: 0.5} |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
| --- !u!114 &666344589 | --- !u!114 &666344589 | ||||||
| @@ -702,6 +703,81 @@ CanvasRenderer: | |||||||
|   m_PrefabAsset: {fileID: 0} |   m_PrefabAsset: {fileID: 0} | ||||||
|   m_GameObject: {fileID: 666344587} |   m_GameObject: {fileID: 666344587} | ||||||
|   m_CullTransparentMesh: 1 |   m_CullTransparentMesh: 1 | ||||||
|  | --- !u!1 &780585404 | ||||||
|  | GameObject: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   serializedVersion: 6 | ||||||
|  |   m_Component: | ||||||
|  |   - component: {fileID: 780585405} | ||||||
|  |   - component: {fileID: 780585407} | ||||||
|  |   - component: {fileID: 780585406} | ||||||
|  |   m_Layer: 5 | ||||||
|  |   m_Name: GameObject | ||||||
|  |   m_TagString: Untagged | ||||||
|  |   m_Icon: {fileID: 0} | ||||||
|  |   m_NavMeshLayer: 0 | ||||||
|  |   m_StaticEditorFlags: 0 | ||||||
|  |   m_IsActive: 1 | ||||||
|  | --- !u!224 &780585405 | ||||||
|  | RectTransform: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 780585404} | ||||||
|  |   m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} | ||||||
|  |   m_LocalPosition: {x: 0, y: 0, z: 0} | ||||||
|  |   m_LocalScale: {x: 1, y: 1, z: 1} | ||||||
|  |   m_ConstrainProportionsScale: 0 | ||||||
|  |   m_Children: [] | ||||||
|  |   m_Father: {fileID: 481473977} | ||||||
|  |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|  |   m_AnchorMin: {x: 0.5, y: 0.5} | ||||||
|  |   m_AnchorMax: {x: 0.5, y: 0.5} | ||||||
|  |   m_AnchoredPosition: {x: 8.3, y: 82.4} | ||||||
|  |   m_SizeDelta: {x: 206.4181, y: 202.9899} | ||||||
|  |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
|  | --- !u!114 &780585406 | ||||||
|  | MonoBehaviour: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 780585404} | ||||||
|  |   m_Enabled: 1 | ||||||
|  |   m_EditorHideFlags: 0 | ||||||
|  |   m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} | ||||||
|  |   m_Name:  | ||||||
|  |   m_EditorClassIdentifier:  | ||||||
|  |   m_Material: {fileID: 0} | ||||||
|  |   m_Color: {r: 1, g: 1, b: 1, a: 1} | ||||||
|  |   m_RaycastTarget: 1 | ||||||
|  |   m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} | ||||||
|  |   m_Maskable: 1 | ||||||
|  |   m_OnCullStateChanged: | ||||||
|  |     m_PersistentCalls: | ||||||
|  |       m_Calls: [] | ||||||
|  |   m_Sprite: {fileID: 1404028623067837608, guid: 7941bec4ab82ba5f8a978cf1b4d91010, type: 3} | ||||||
|  |   m_Type: 0 | ||||||
|  |   m_PreserveAspect: 0 | ||||||
|  |   m_FillCenter: 1 | ||||||
|  |   m_FillMethod: 4 | ||||||
|  |   m_FillAmount: 1 | ||||||
|  |   m_FillClockwise: 1 | ||||||
|  |   m_FillOrigin: 0 | ||||||
|  |   m_UseSpriteMesh: 0 | ||||||
|  |   m_PixelsPerUnitMultiplier: 1 | ||||||
|  | --- !u!222 &780585407 | ||||||
|  | CanvasRenderer: | ||||||
|  |   m_ObjectHideFlags: 0 | ||||||
|  |   m_CorrespondingSourceObject: {fileID: 0} | ||||||
|  |   m_PrefabInstance: {fileID: 0} | ||||||
|  |   m_PrefabAsset: {fileID: 0} | ||||||
|  |   m_GameObject: {fileID: 780585404} | ||||||
|  |   m_CullTransparentMesh: 1 | ||||||
| --- !u!1 &948896765 | --- !u!1 &948896765 | ||||||
| GameObject: | GameObject: | ||||||
|   m_ObjectHideFlags: 0 |   m_ObjectHideFlags: 0 | ||||||
| @@ -953,7 +1029,7 @@ RectTransform: | |||||||
|   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} |   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} | ||||||
|   m_AnchorMin: {x: 0.5, y: 0.5} |   m_AnchorMin: {x: 0.5, y: 0.5} | ||||||
|   m_AnchorMax: {x: 0.5, y: 0.5} |   m_AnchorMax: {x: 0.5, y: 0.5} | ||||||
|   m_AnchoredPosition: {x: 0, y: 15.000004} |   m_AnchoredPosition: {x: 8.3, y: -40.7} | ||||||
|   m_SizeDelta: {x: 160, y: 30} |   m_SizeDelta: {x: 160, y: 30} | ||||||
|   m_Pivot: {x: 0.5, y: 0.5} |   m_Pivot: {x: 0.5, y: 0.5} | ||||||
| --- !u!114 &1587889809 | --- !u!114 &1587889809 | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								Documentation/Screenshots/gameplay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Documentation/Screenshots/gameplay.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 387 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Documentation/Screenshots/home-page.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Documentation/Screenshots/home-page.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 619 KiB | 
							
								
								
									
										
											BIN
										
									
								
								Documentation/Screenshots/levels-selection.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Documentation/Screenshots/levels-selection.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 589 KiB | 
| @@ -8,11 +8,11 @@ repeat | |||||||
|     if (Le joueur percute un obstacle ?) then (Oui) |     if (Le joueur percute un obstacle ?) then (Oui) | ||||||
|         :Le joueur meurt; |         :Le joueur meurt; | ||||||
|         :Augmenter le nombre d'essais de 1; |         :Augmenter le nombre d'essais de 1; | ||||||
|         :Perdre toutes les pièces et bonus; |         :Perdre toutes les bonus; | ||||||
|     else (Non) |     else (Non) | ||||||
|         partition "Actions du joueur" { |         partition "Actions du joueur" { | ||||||
|           group Saut |           group Saut | ||||||
|             if (L'utilisateur clique sur l'écran ?) then (Oui) |             if (L'utilisateur appuie sur espace ?) then (Oui) | ||||||
|                 :Le joueur effectue un saut; |                 :Le joueur effectue un saut; | ||||||
|             endif |             endif | ||||||
|           end group |           end group | ||||||
| @@ -27,15 +27,15 @@ repeat | |||||||
|                 end group |                 end group | ||||||
|             endif |             endif | ||||||
|  |  | ||||||
|             if (Le joueur clique sur un bonus dans son inventaire ?) then (Oui) |             if (Le joueur percute un bonus ?) then (Oui) | ||||||
|                 group Activation de Bonus |                 group Activation de Bonus | ||||||
|                     :Le joueur clique sur un bonus dans l'inventaire; |                     :Le joueur clique sur un bonus dans l'inventaire; | ||||||
|                     switch (Type de bonus) |                     switch (Type de bonus) | ||||||
|                         case (Temps ralenti) |                         case (Temps ralenti) | ||||||
|                             :Activer ralentissement du temps; |                             :Activer ralentissement du temps; | ||||||
|                             :Temps ralenti : 3 secondes; |                             :Durée : 3 secondes; | ||||||
|                         case (Annulation d'obstacle) |                         case (Temps accéléré) | ||||||
|                             :Supprimer tous les obstacles; |                             :Activer accélération du temps; | ||||||
|                             :Durée : 3 secondes; |                             :Durée : 3 secondes; | ||||||
|                     endswitch |                     endswitch | ||||||
|                 end group |                 end group | ||||||
| @@ -54,9 +54,6 @@ repeat | |||||||
|                             :Quitter le niveau; |                             :Quitter le niveau; | ||||||
|                             :Retour au menu principal; |                             :Retour au menu principal; | ||||||
|                             stop |                             stop | ||||||
|                         case (Mode Checkpoint) |  | ||||||
|                             :Activer/Désactiver le mode Checkpoint; |  | ||||||
|                             :Reprendre la partie; |  | ||||||
|                         case (Volume) |                         case (Volume) | ||||||
|                             :Modifier le volume sonore; |                             :Modifier le volume sonore; | ||||||
|                             :Revenir au menu de pause; |                             :Revenir au menu de pause; | ||||||
| @@ -72,7 +69,6 @@ repeat | |||||||
|             if (Le joueur touche la zone de fin ?) then (Oui) |             if (Le joueur touche la zone de fin ?) then (Oui) | ||||||
|                 :Terminer le niveau; |                 :Terminer le niveau; | ||||||
|                 :Animation de fin de niveau; |                 :Animation de fin de niveau; | ||||||
|                 :Conserver les pièces obtenues; |  | ||||||
|                 break |                 break | ||||||
|             endif |             endif | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -11,7 +11,7 @@ repeat | |||||||
|         :Perdre toutes les pièces et bonus; |         :Perdre toutes les pièces et bonus; | ||||||
|     else (Non) |     else (Non) | ||||||
|         partition "Actions du joueur" { |         partition "Actions du joueur" { | ||||||
|             if (L'utilisateur clique sur l'écran ?) then (Oui) |             if (L'utilisateur appuie sur espace ?) then (Oui) | ||||||
|                 :Le joueur effectue un saut; |                 :Le joueur effectue un saut; | ||||||
|                 note right |                 note right | ||||||
|                 **Saut** |                 **Saut** | ||||||
| @@ -29,12 +29,12 @@ repeat | |||||||
|                 end note |                 end note | ||||||
|             endif |             endif | ||||||
|  |  | ||||||
|             if (Le joueur clique sur un bonus dans son inventaire ?) then (Oui) |             if (Le joueur percute un bonus ?) then (Oui) | ||||||
|                 :Activer un bonus; |                 :Activer un bonus; | ||||||
|                 note right |                 note right | ||||||
|                 **Activation de Bonus** |                 **Activation de Bonus** | ||||||
|                 - Déclenche l'effet du bonus sélectionné. |                 - Déclenche l'effet du bonus sélectionné. | ||||||
|                 - Exemple : Invincibilité, Double saut. |                 - Exemple : Ralentissement du temps. | ||||||
|                 end note |                 end note | ||||||
|             endif |             endif | ||||||
|         } |         } | ||||||
| @@ -44,7 +44,7 @@ repeat | |||||||
|                 :Arriver sur le menu de pause; |                 :Arriver sur le menu de pause; | ||||||
|                 note right |                 note right | ||||||
|                 **Menu de pause** |                 **Menu de pause** | ||||||
|                 - Affiche les options : Reprendre, Quitter, Mode Checkpoint, Volume. |                 - Affiche les options : Reprendre, Quitter, Volume. | ||||||
|                 end note |                 end note | ||||||
|             endif |             endif | ||||||
|         } |         } | ||||||
| @@ -53,12 +53,6 @@ repeat | |||||||
|             if (Le joueur touche la zone de fin ?) then (Oui) |             if (Le joueur touche la zone de fin ?) then (Oui) | ||||||
|                 :Terminer le niveau; |                 :Terminer le niveau; | ||||||
|                 :Afficher une animation de fin de niveau; |                 :Afficher une animation de fin de niveau; | ||||||
|                 :Conserver les pièces obtenues; |  | ||||||
|                 note right |  | ||||||
|                 **Fin du Niveau** |  | ||||||
|                 - Succès enregistré. |  | ||||||
|                 - Les pièces collectées sont sauvegardées. |  | ||||||
|                 end note |  | ||||||
|             endif |             endif | ||||||
|         } |         } | ||||||
|     endif |     endif | ||||||
|   | |||||||
| @@ -5,9 +5,9 @@ start | |||||||
| switch (Type de bonus) | switch (Type de bonus) | ||||||
|   case (Temps ralenti) |   case (Temps ralenti) | ||||||
|     :Activer ralentissement du temps; |     :Activer ralentissement du temps; | ||||||
|     :Temps ralenti : 3 secondes; |     :Durée : 3 secondes; | ||||||
|   case (Annulation d'obstacle) |   case (Temps accéléré) | ||||||
|     :Supprimer tous les obstacles; |     :Activer accélération du temps; | ||||||
|     :Durée : 3 secondes; |     :Durée : 3 secondes; | ||||||
| endswitch | endswitch | ||||||
| stop | stop | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| @startuml sub-bonus | @startuml sub-bonus | ||||||
|  |  | ||||||
| start | start | ||||||
| if (Le joueur touche un bonus ?) then (Oui) | if (Le joueur percute un bonus ?) then (Oui) | ||||||
|   :Ajouter le bonus à l'inventaire; |   :Ajouter le bonus à l'inventaire; | ||||||
| else (Non) | else (Non) | ||||||
| endif | endif | ||||||
|   | |||||||
| @@ -1,10 +0,0 @@ | |||||||
| @startuml sub-bumper |  | ||||||
|  |  | ||||||
| start |  | ||||||
| if (Le joueur touche un bumper ?) then (Oui) |  | ||||||
|   :Effectuer un grand saut; |  | ||||||
| else (Non) |  | ||||||
| endif |  | ||||||
| stop |  | ||||||
|  |  | ||||||
| @enduml |  | ||||||
| @@ -7,10 +7,6 @@ switch (Forme) | |||||||
|     :Mode fusée; |     :Mode fusée; | ||||||
|   case (Forme roue) |   case (Forme roue) | ||||||
|     :Mode roue; |     :Mode roue; | ||||||
|   case (Forme sens inversé) |  | ||||||
|     :Mode sens inversé; |  | ||||||
|   case (Forme gravité inversée) |  | ||||||
|     :Mode gravité inversée; |  | ||||||
| endswitch | endswitch | ||||||
| stop | stop | ||||||
|  |  | ||||||
|   | |||||||
| @@ -11,13 +11,10 @@ else (Quitter) | |||||||
|     :Quitter le niveau; |     :Quitter le niveau; | ||||||
|     :Retour au menu principal; |     :Retour au menu principal; | ||||||
|     stop |     stop | ||||||
| else (Mode Checkpoint) |  | ||||||
|     :Activer/Désactiver le mode Checkpoint; |  | ||||||
|     :Revenir au menu de pause; |  | ||||||
| else (Volume) | else (Volume) | ||||||
|     :Modifier le volume sonore; |     :Modifier le volume sonore; | ||||||
|     :Revenir au menu de pause; |     :Revenir au menu de pause; | ||||||
| else (Menu de sleection de niveau) | else (Menu de sélection de niveau) | ||||||
|     :Revenir au menu de selection de niveau; |     :Revenir au menu de selection de niveau; | ||||||
| endif | endif | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,10 +0,0 @@ | |||||||
| @startuml sub-pieces |  | ||||||
|  |  | ||||||
| start |  | ||||||
| if (Le joueur touche une pièce ?) then (Oui) |  | ||||||
|   :Ajouter la pièce au niveau; |  | ||||||
| else (Non) |  | ||||||
| endif |  | ||||||
| stop |  | ||||||
|  |  | ||||||
| @enduml |  | ||||||
							
								
								
									
										303
									
								
								Documentation/UML/class-diagram-light.puml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										303
									
								
								Documentation/UML/class-diagram-light.puml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,303 @@ | |||||||
|  | @startuml Geometry Dash - Diagramme de classe léger | ||||||
|  |  | ||||||
|  | skinparam style strictuml | ||||||
|  | skinparam classAttributeIconSize 0 | ||||||
|  | skinparam classFontStyle Bold | ||||||
|  | hide enum methods | ||||||
|  |  | ||||||
|  | class PlayerCamera { | ||||||
|  |     {field} + playerObject: GameObject | ||||||
|  |     {field} + normalMinYFollow: float | ||||||
|  |     {field} + shipMinYFollow: float | ||||||
|  |     {field} + smoothSpeed: float | ||||||
|  |     {field} - initialY: float | ||||||
|  |     {field} + isPlaying: bool | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - Update() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class Player { | ||||||
|  |     {field} + RigidBody: Rigidbody2D {get} {private set} | ||||||
|  |     {field} + Transform: Transform {get} {private set} | ||||||
|  |     {field} + Particle: ParticleSystem {get} {private set} | ||||||
|  |     {field} + LevelsLoader: LevelsLoader {get} {set} | ||||||
|  |     {field} + SpriteRenderer: SpriteRenderer {get} {private set} | ||||||
|  |     {field} + IsColliding: bool {get} {set} | ||||||
|  |     {field} + HasStarted: bool {get} {set} | ||||||
|  |     {field} + CanJump: bool {get} {set} | ||||||
|  |     {field} + CurrentGameMode: IGameMode {get} {set} | ||||||
|  |     {field} + SpeedMultiplier: float | ||||||
|  |  | ||||||
|  |     {method} + Awake() | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + Update() | ||||||
|  |     {method} + OnCollisionEnter2D(collision: Collision2D) | ||||||
|  |     {method} + OnCollisionExit2D(collision: Collision2D) | ||||||
|  |     {method} + OnTriggerEnter2D(collision: Collider2D) | ||||||
|  |     {method} + ChangeGameMode(newMode: IGameMode) | ||||||
|  | } | ||||||
|  | Player o--> LevelsLoader : <<References>> | ||||||
|  | Player o--> IGameMode : <<Has>> | ||||||
|  |  | ||||||
|  | class PauseMenu { | ||||||
|  |     {field} + pauseMenu: GameObject | ||||||
|  |     {field} + pauseButton: GameObject | ||||||
|  |     {field} + levelLoader: LevelLoader | ||||||
|  |     {field} + volumeSlider: Slider | ||||||
|  |  | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + ChangeVolume() | ||||||
|  |     {method} + Pause() | ||||||
|  |     {method} + Home() | ||||||
|  |     {method} + Resume() | ||||||
|  | } | ||||||
|  | PauseMenu --> LevelLoader : <<References>> | ||||||
|  | PauseMenu --> GameObject : <<References>> | ||||||
|  | PauseMenu --> Slider : <<References>> | ||||||
|  |  | ||||||
|  | class MainMenu { | ||||||
|  |     {method} + LaunchGame() | ||||||
|  |     {method} + OpenImport() | ||||||
|  |     {method} + QuitGame() | ||||||
|  |     {method} + LevelEditor() | ||||||
|  |     {method} + EditorChoice() | ||||||
|  |     {method} + CreateLevel() | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class LevelStat { | ||||||
|  |     {field} + JsonName: string {get} {set} | ||||||
|  |     {field} + totalJumps: Integer | ||||||
|  |     {field} + totalAttempts: Integer | ||||||
|  |     {field} + progressionPercent: Integer | ||||||
|  |  | ||||||
|  |     {method} + {static} CreateFromJSON(jsonString: string): LevelStat | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class LevelsLoader { | ||||||
|  |     {field} + levels: List<Level> | ||||||
|  |     {field} + levelCurrent: Level | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - LoadAllLevels() | ||||||
|  |     {method} - SaveLevelCurrent() | ||||||
|  |     {method} + NextLevel() | ||||||
|  |     {method} + PreviousLevel() | ||||||
|  |     {method} + IncreaseTotalJumps() | ||||||
|  |     {method} + IncreaseTotalAttempts() | ||||||
|  |     {method} + CalculateCurrentProgressionPercent(playerPosition: Vector3): Integer | ||||||
|  |     {method} + RefreshLevels() | ||||||
|  | } | ||||||
|  | LevelsLoader *--> Level : <<Owns>> | ||||||
|  |  | ||||||
|  | class LevelLoader { | ||||||
|  |     {field} + levelsLoader: LevelsLoader | ||||||
|  |     {field} + audioSource: AudioSource | ||||||
|  |     {field} + progressionText: Text | ||||||
|  |     {field} - groundY: float | ||||||
|  |  | ||||||
|  |     {method} - GetPrefab(type: string): GameObject | ||||||
|  |     {method} - LoadAudio() | ||||||
|  |     {method} - LoadElements() | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + Update() | ||||||
|  | } | ||||||
|  | LevelLoader o--> LevelsLoader : <<References>> | ||||||
|  | LevelLoader *--> AudioSource : <<Owns>> | ||||||
|  | LevelLoader --> Text : <<References>> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class LevelEditor { | ||||||
|  |     {field} - currentBlock: GameObject | ||||||
|  |     {field} - isPlacingBlock: bool | ||||||
|  |     {field} - currentScale: Vector3 | ||||||
|  |     {field} - scaleStep: float | ||||||
|  |     {field} + blockGroupContainer: Transform | ||||||
|  |     {field} + buttonPrefabTemplate: GameObject | ||||||
|  |     {field} - currentPage: Integer | ||||||
|  |     {field} - buttonsPerPage: Integer {constant} | ||||||
|  |     {field} - blockPrefabs: List<GameObject> | ||||||
|  |     {field} - currentButtons: List<GameObject> | ||||||
|  |     {field} - resizingTarget: GameObject | ||||||
|  |     {field} - isResizing: bool | ||||||
|  |     {field} - originalMousePos: Vector3 | ||||||
|  |     {field} - originalScale: Vector3 | ||||||
|  |     {field} - currentResizeAxis: ResizeAxis | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - LoadPrefabs() | ||||||
|  |     {method} - GenerateButtons() | ||||||
|  |     {method} - ClearCurrentButtons() | ||||||
|  |     {method} + NextPage() | ||||||
|  |     {method} + PreviousPage() | ||||||
|  |     {method} - SelectPrefab(prefab: GameObject) | ||||||
|  |     {method} - Update() | ||||||
|  |     {method} - PlaceBlock() | ||||||
|  |     {method} - TrySnapToNearbyBlock() | ||||||
|  |     {method} - InstantiateAndPrepare(prefab: GameObject, scaleOverride: Vector3?) | ||||||
|  |     {method} - HandleBlockRotation() | ||||||
|  | } | ||||||
|  | LevelEditor o--> blockGroupContainer : <<References>> | ||||||
|  | LevelEditor --> buttonPrefabTemplate : <<References>> | ||||||
|  | LevelEditor *--> blockPrefabs : <<Owns>> | ||||||
|  | LevelEditor *--> currentButtons : <<Owns>> | ||||||
|  | LevelEditor o--> currentBlock : <<References>> | ||||||
|  | LevelEditor o--> resizingTarget : <<References>> | ||||||
|  | LevelEditor *--> ResizeAxis : <<Has>> | ||||||
|  |  | ||||||
|  | enum ResizeAxis <<enumeration>> { | ||||||
|  |   None | ||||||
|  |   Horizontal | ||||||
|  |   Vertical | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class LevelElement { | ||||||
|  |     {field} + type: string | ||||||
|  |     {field} + x: float | ||||||
|  |     {field} + y: float | ||||||
|  |     {field} + scaleX: float | ||||||
|  |     {field} + scaleY: float | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class Level { | ||||||
|  |     {field} + {static} {readOnly} LAST_X: Integer = 15 | ||||||
|  |     {field} + JsonName: string {get} {set} | ||||||
|  |     {field} + TotalJumps: Integer {get} {set} | ||||||
|  |     {field} + TotalAttempts: Integer {get} {set} | ||||||
|  |     {field} + ProgressionPercent: Integer {get} {set} | ||||||
|  |     {field} + ProgressionPercentMax: Integer {get} {set} | ||||||
|  |     {field} + name: string | ||||||
|  |     {field} + musicName: string | ||||||
|  |     {field} + order: Integer | ||||||
|  |     {field} + elements: List<LevelElement> | ||||||
|  |     {field} + LastX: float {get} | ||||||
|  |  | ||||||
|  |     {method} + {static} CreateFromJSON(jsonString: string): Level | ||||||
|  | } | ||||||
|  | Level *--> LevelElement : <<Composed of>> | ||||||
|  |  | ||||||
|  | class JSONImporter { | ||||||
|  |     {field} + statusText: TMP_Text | ||||||
|  |  | ||||||
|  |     {method} - Awake() | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} + ImportJSON() | ||||||
|  |     {method} - ShowFileBrowser(): IEnumerator | ||||||
|  |     {method} - UpdateStatus(message: string, color: Color) | ||||||
|  | } | ||||||
|  | JSONImporter --> TMP_Text : <<References>> | ||||||
|  |  | ||||||
|  | class JSONExporter { | ||||||
|  |     {field} + statusText: TMP_Text | ||||||
|  |     {field} - editor: LevelEditor | ||||||
|  |     {field} - levelsFolder: string | ||||||
|  |  | ||||||
|  |     {method} - Awake() | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} + ExportJSON() | ||||||
|  |     {method} - ShowSaveDialog(): IEnumerator | ||||||
|  |     {method} - SetStatus(message: string, color: Color) | ||||||
|  | } | ||||||
|  | JSONExporter o--> LevelEditor : <<References>> | ||||||
|  | JSONExporter --> TMP_Text : <<References>> | ||||||
|  |  | ||||||
|  | class SerializableElement <<private>> { | ||||||
|  |     {field} + type: string | ||||||
|  |     {field} + x: float | ||||||
|  |     {field} + y: float | ||||||
|  |     {field} + scaleX: float | ||||||
|  |     {field} + scaleY: float | ||||||
|  | } | ||||||
|  | JSONExporter ..> SerializableElement : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelData <<private>> { | ||||||
|  |     {field} + name: string | ||||||
|  |     {field} + musicName: string | ||||||
|  |     {field} + order: Integer | ||||||
|  |     {field} + elements: SerializableElement[*] | ||||||
|  | } | ||||||
|  | LevelData *--> SerializableElement : <<Composed of>> | ||||||
|  | JSONExporter ..> LevelData : <<Uses>> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | interface IGameMode <<interface>> { | ||||||
|  |     {method} + Update(player: Player) {abstract} | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: Collision2D) {abstract} | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: Collision2D) {abstract} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class ShipGameMode implements IGameMode { | ||||||
|  |     {field} - HorizontalSpeed: float {constant} | ||||||
|  |     {field} - JumpForce: float {constant} | ||||||
|  |     {field} - JumpKey: KeyCode {constant} | ||||||
|  |     {field} - UpperAngle: float {constant} | ||||||
|  |     {field} - LowerAngle: float {constant} | ||||||
|  |     {field} - RotationTransitionDuration: float {constant} | ||||||
|  |  | ||||||
|  |     {method} + Update(player: Player) | ||||||
|  |     {method} - GetCurrentZAngle(player: Player): float | ||||||
|  |     {method} - Jump(player: Player) | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: Collision2D) | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: Collision2D) | ||||||
|  | } | ||||||
|  | ShipGameMode ..|> IGameMode | ||||||
|  | ShipGameMode ..> Player : <<Uses>> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | class NormalGameMode implements IGameMode { | ||||||
|  |     {field} - HorizontalSpeed: float {constant} | ||||||
|  |     {field} - JumpForce: float {constant} | ||||||
|  |     {field} - JumpKey: KeyCode {constant} | ||||||
|  |     {field} - isRotating: bool | ||||||
|  |     {field} - targetRotationAngle: float | ||||||
|  |     {field} - rotationSpeed: float {readOnly} | ||||||
|  |  | ||||||
|  |     {method} + Update(player: Player) | ||||||
|  |     {method} - Jump(player: Player) | ||||||
|  |     {method} - PerformRotation(player: Player) | ||||||
|  |     {method} - IsJumping(player: Player): bool | ||||||
|  |     {method} - AlignRotation(player: Player) | ||||||
|  |     {method} - UpdateParticlePositionAndRotation(player: Player) | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: Collision2D) | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: Collision2D) | ||||||
|  | } | ||||||
|  | NormalGameMode ..|> IGameMode | ||||||
|  | NormalGameMode ..> Player : <<Uses>> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ' Tags | ||||||
|  | class ShipPortal { } | ||||||
|  | class CubePortal { } | ||||||
|  | class BonusBoostSpeed { } | ||||||
|  | class BonusSlowSpeed { } | ||||||
|  | class Kill { } | ||||||
|  | class Win { } | ||||||
|  | class Ground { } | ||||||
|  | class WinnerWall { } | ||||||
|  | class Block { } | ||||||
|  | class SmallObstacle { } | ||||||
|  | class Spike { } | ||||||
|  | class Portal { } | ||||||
|  | class Bonus { } | ||||||
|  |  | ||||||
|  | Player ..> ShipPortal : <<Uses Tag>> | ||||||
|  | Player ..> CubePortal : <<Uses Tag>> | ||||||
|  | Player ..> BonusBoostSpeed : <<Uses Tag>> | ||||||
|  | Player ..> BonusSlowSpeed : <<Uses Tag>> | ||||||
|  | ShipGameMode ..> Kill : <<Uses Tag>> | ||||||
|  | ShipGameMode ..> Win : <<Uses Tag>> | ||||||
|  | ShipGameMode ..> Ground : <<Uses Tag>> | ||||||
|  | NormalGameMode ..> Kill : <<Uses Tag>> | ||||||
|  | NormalGameMode ..> Win : <<Uses Tag>> | ||||||
|  | LevelLoader ..> WinnerWall : <<Uses Prefab>> | ||||||
|  | LevelLoader ..> Ground : <<Uses Prefab>> | ||||||
|  | LevelEditor ..> Ground : <<Uses Tag>> | ||||||
|  | LevelEditor ..> Block : <<Uses Tag>> | ||||||
|  | LevelEditor ..> SmallObstacle : <<Uses Tag>> | ||||||
|  | LevelEditor ..> Spike : <<Uses Tag>> | ||||||
|  | LevelEditor ..> Portal : <<Uses Tag>> | ||||||
|  | LevelEditor ..> Bonus : <<Uses Tag>> | ||||||
|  | LevelsLoader ..> WinnerWall : <<Uses Prefab>> | ||||||
|  |  | ||||||
|  | @enduml | ||||||
| @@ -5,107 +5,581 @@ skinparam classAttributeIconSize 0 | |||||||
| skinparam classFontStyle Bold | skinparam classFontStyle Bold | ||||||
| hide enum methods | hide enum methods | ||||||
|  |  | ||||||
| class GameManager { | package UnityEngine { | ||||||
|   - score: int |     class GameObject { | ||||||
|   - isPaused: Boolean |     } | ||||||
|   + StartGame() |     class MonoBehaviour { | ||||||
|   + RestartLevel() |     } | ||||||
|   + PauseGame() |     class Rigidbody2D { | ||||||
|   + ResumeGame() |     } | ||||||
|   + UpdateScore(points: int) |     class Transform { | ||||||
|  |     } | ||||||
|  |     class ParticleSystem { | ||||||
|  |     } | ||||||
|  |     class SpriteRenderer { | ||||||
|  |     } | ||||||
|  |     class Collider2D { | ||||||
|  |     } | ||||||
|  |     class Collision2D { | ||||||
|  |     } | ||||||
|  |     class Vector3 { | ||||||
|  |     } | ||||||
|  |     class Vector2 { | ||||||
|  |     } | ||||||
|  |     class Quaternion { | ||||||
|  |     } | ||||||
|  |     class Mathf { | ||||||
|  |       {method} + Lerp(...) {static} | ||||||
|  |       {method} + Round(...) {static} | ||||||
|  |       {method} + Clamp(...) {static} | ||||||
|  |       {method} + Sin(...) {static} | ||||||
|  |       {method} + Abs(...) {static} | ||||||
|  |       {method} + DeltaAngle(...) {static} | ||||||
|  |       {method} + MoveTowardsAngle(...) {static} | ||||||
|  |       {method} + RoundToInt(...) {static} | ||||||
|  |     } | ||||||
|  |     class Time { | ||||||
|  |       {method} + deltaTime: float {static} {readOnly} | ||||||
|  |       {method} + timeScale: float {static} | ||||||
|  |     } | ||||||
|  |     class Input { | ||||||
|  |       {method} + GetKey(...) {static} | ||||||
|  |       {method} + GetKeyDown(...) {static} | ||||||
|  |       {method} + GetMouseButtonDown(...) {static} | ||||||
|  |       {method} + GetMouseButtonUp(...) {static} | ||||||
|  |       {method} + GetAxis(...) {static} | ||||||
|  |     } | ||||||
|  |     class Camera { | ||||||
|  |       {method} + main: Camera {static} {readOnly} | ||||||
|  |       {method} + ScreenToWorldPoint(...) | ||||||
|  |     } | ||||||
|  |     class Physics2D { | ||||||
|  |       {method} + OverlapBoxAll(...) {static} | ||||||
|  |       {method} + RaycastAll(...) {static} | ||||||
|  |       {method} + OverlapPoint(...) {static} | ||||||
|  |       {method} + OverlapAreaAll(...) {static} | ||||||
|  |     } | ||||||
|  |     class Resources { | ||||||
|  |       {method} + Load<T>(...) {static} | ||||||
|  |       {method} + LoadAll<T>(...) {static} | ||||||
|  |     } | ||||||
|  |     class PlayerPrefs { | ||||||
|  |       {method} + GetFloat(...) {static} | ||||||
|  |       {method} + SetFloat(...) {static} | ||||||
|  |       {method} + HasKey(...) {static} | ||||||
|  |     } | ||||||
|  |     class AudioSource { | ||||||
|  |         {method} + volume: float | ||||||
|  |         {method} + clip: AudioClip | ||||||
|  |         {method} + Play() | ||||||
|  |         {method} + Pause() | ||||||
|  |     } | ||||||
|  |     class AudioClip { | ||||||
|  |     } | ||||||
|  |     class Slider { | ||||||
|  |     } | ||||||
|  |     class Button { | ||||||
|  |     } | ||||||
|  |     class Image { | ||||||
|  |     } | ||||||
|  |     class RectTransform { | ||||||
|  |     } | ||||||
|  |     class Bounds { | ||||||
|  |     } | ||||||
|  |     class Debug { | ||||||
|  |       {method} + Log(...) {static} | ||||||
|  |       {method} + LogWarning(...) {static} | ||||||
|  |       {method} + LogError(...) {static} | ||||||
|  |     } | ||||||
|  |     class Application { | ||||||
|  |       {method} + persistentDataPath: string {static} {readOnly} | ||||||
|  |       {method} + dataPath: string {static} {readOnly} | ||||||
|  |       {method} + Quit() {static} | ||||||
|  |     } | ||||||
|  |     class Canvas { | ||||||
|  |         {method} + ForceUpdateCanvases() {static} | ||||||
|  |     } | ||||||
|  |     class UnityEngine.Object { | ||||||
|  |         {method} + FindAnyObjectByType<T>(...) {static} | ||||||
|  |     } | ||||||
|  |     class Renderer { | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | package UnityEngine.SceneManagement { | ||||||
|  |     class SceneManager { | ||||||
|  |       {method} + LoadScene(...) {static} | ||||||
|  |       {method} + LoadSceneAsync(...) {static} | ||||||
|  |       {method} + GetActiveScene(...) {static} | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | package UnityEngine.UI { | ||||||
|  |     class Text { | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | package TMPro { | ||||||
|  |     class TMP_Text { | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | package System { | ||||||
|  |     package IO { | ||||||
|  |         class Path { | ||||||
|  |           {method} + Combine(...) {static} | ||||||
|  |           {method} + GetFileNameWithoutExtension(...) {static} | ||||||
|  |         } | ||||||
|  |         class File { | ||||||
|  |           {method} + Exists(...) {static} | ||||||
|  |           {method} + ReadAllText(...) {static} | ||||||
|  |           {method} + WriteAllText(...) {static} | ||||||
|  |           {method} + Copy(...) {static} | ||||||
|  |           {method} + GetExtension(...) {static} | ||||||
|  |           {method} + GetFileName(...) {static} | ||||||
|  |           {method} + GetFileNameWithoutExtension(...) {static} | ||||||
|  |         } | ||||||
|  |         class Directory { | ||||||
|  |           {method} + Exists(...) {static} | ||||||
|  |           {method} + CreateDirectory(...) {static} | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |     package Collections { | ||||||
|  |         class IEnumerator { | ||||||
|  |         } | ||||||
|  |         package Generic { | ||||||
|  |             class List<T> { | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | package SimpleFileBrowser { | ||||||
|  |     class FileBrowser { | ||||||
|  |       {method} + WaitForLoadDialog(...) {static} | ||||||
|  |       {method} + WaitForSaveDialog(...) {static} | ||||||
|  |       {method} + Success: bool {static} {readOnly} | ||||||
|  |       {method} + Result: string[*] {static} {readOnly} | ||||||
|  |       {method} + PickMode: enumeration {static} {readOnly} | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class PlayerCamera { | ||||||
|  |     {field} + playerObject: UnityEngine.GameObject | ||||||
|  |     {field} + normalMinYFollow: float | ||||||
|  |     {field} + shipMinYFollow: float | ||||||
|  |     {field} + smoothSpeed: float | ||||||
|  |     {field} - initialY: float | ||||||
|  |     {field} + isPlaying: bool | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - Update() | ||||||
|  | } | ||||||
|  | PlayerCamera --|> UnityEngine.MonoBehaviour | ||||||
|  | PlayerCamera --> UnityEngine.GameObject : <<References>> | ||||||
|  | PlayerCamera ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | PlayerCamera ..> UnityEngine.Time : <<Uses>> | ||||||
|  | PlayerCamera ..> Player : <<Uses>> | ||||||
|  | PlayerCamera ..> ShipGameMode : <<Uses>> | ||||||
|  | PlayerCamera ..> UnityEngine.Transform : <<Uses>> | ||||||
|  | PlayerCamera ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  |  | ||||||
|  | class Player { | ||||||
|  |     {field} + RigidBody: UnityEngine.Rigidbody2D {get} {private set} | ||||||
|  |     {field} + Transform: UnityEngine.Transform {get} {private set} | ||||||
|  |     {field} + Particle: UnityEngine.ParticleSystem {get} {private set} | ||||||
|  |     {field} + LevelsLoader: LevelsLoader {get} {set} | ||||||
|  |     {field} + SpriteRenderer: UnityEngine.SpriteRenderer {get} {private set} | ||||||
|  |     {field} + IsColliding: bool {get} {set} | ||||||
|  |     {field} + HasStarted: bool {get} {set} | ||||||
|  |     {field} + CanJump: bool {get} {set} | ||||||
|  |     {field} + CurrentGameMode: IGameMode {get} {set} | ||||||
|  |     {field} + SpeedMultiplier: float | ||||||
|  |  | ||||||
|  |     {method} + Awake() | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + Update() | ||||||
|  |     {method} + OnCollisionEnter2D(collision: UnityEngine.Collision2D) | ||||||
|  |     {method} + OnCollisionExit2D(collision: UnityEngine.Collision2D) | ||||||
|  |     {method} + OnTriggerEnter2D(collision: UnityEngine.Collider2D) | ||||||
|  |     {method} + ChangeGameMode(newMode: IGameMode) | ||||||
|  | } | ||||||
|  | Player --|> UnityEngine.MonoBehaviour | ||||||
|  | Player *--> UnityEngine.Rigidbody2D : <<Owns>> | ||||||
|  | Player *--> UnityEngine.Transform : <<Owns>> | ||||||
|  | Player *--> UnityEngine.ParticleSystem : <<Owns>> | ||||||
|  | Player o--> LevelsLoader : <<References>> | ||||||
|  | Player *--> UnityEngine.SpriteRenderer : <<Owns>> | ||||||
|  | Player o--> IGameMode : <<Has>> | ||||||
|  | Player ..> UnityEngine.Resources : <<Uses>> | ||||||
|  | Player ..> UnityEngine.Debug : <<Uses>> | ||||||
|  | Player ..> ShipPortal : <<Uses>> | ||||||
|  | Player ..> CubePortal : <<Uses>> | ||||||
|  | Player ..> BonusBoostSpeed : <<Uses>> | ||||||
|  | Player ..> BonusSlowSpeed : <<Uses>> | ||||||
|  | Player ..> NormalGameMode : <<Uses>> | ||||||
|  | Player ..> UnityEngine.Collision2D : <<Uses>> | ||||||
|  | Player ..> UnityEngine.Collider2D : <<Uses>> | ||||||
|  |  | ||||||
|  | class PauseMenu { | ||||||
|  |     {field} + pauseMenu: UnityEngine.GameObject | ||||||
|  |     {field} + pauseButton: UnityEngine.GameObject | ||||||
|  |     {field} + levelLoader: LevelLoader | ||||||
|  |     {field} + volumeSlider: UnityEngine.UI.Slider | ||||||
|  |  | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + ChangeVolume() | ||||||
|  |     {method} + Pause() | ||||||
|  |     {method} + Home() | ||||||
|  |     {method} + Resume() | ||||||
|  | } | ||||||
|  | PauseMenu --|> UnityEngine.MonoBehaviour | ||||||
|  | PauseMenu --> UnityEngine.GameObject : <<References>> | ||||||
|  | PauseMenu --> LevelLoader : <<References>> | ||||||
|  | PauseMenu --> UnityEngine.UI.Slider : <<References>> | ||||||
|  | PauseMenu ..> UnityEngine.PlayerPrefs : <<Uses>> | ||||||
|  | PauseMenu ..> UnityEngine.Time : <<Uses>> | ||||||
|  | PauseMenu ..> UnityEngine.SceneManagement.SceneManager : <<Uses>> | ||||||
|  |  | ||||||
|  | class MainMenu { | ||||||
|  |     {method} + LaunchGame() | ||||||
|  |     {method} + OpenImport() | ||||||
|  |     {method} + QuitGame() | ||||||
|  |     {method} + LevelEditor() | ||||||
|  |     {method} + EditorChoice() | ||||||
|  |     {method} + CreateLevel() | ||||||
|  | } | ||||||
|  | MainMenu --|> UnityEngine.MonoBehaviour | ||||||
|  | MainMenu ..> UnityEngine.SceneManagement.SceneManager : <<Uses>> | ||||||
|  | MainMenu ..> UnityEngine.Application : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelStat { | ||||||
|  |     {field} + JsonName: string {get} {set} | ||||||
|  |     {field} + totalJumps: Integer | ||||||
|  |     {field} + totalAttempts: Integer | ||||||
|  |     {field} + progressionPercent: Integer | ||||||
|  |  | ||||||
|  |     {method} + {static} CreateFromJSON(jsonString: string): LevelStat | ||||||
|  | } | ||||||
|  | LevelStat ..> UnityEngine.JsonUtility : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelsLoader { | ||||||
|  |     {field} + levels: System.Collections.Generic.List<Level> | ||||||
|  |     {field} + levelCurrent: Level | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - LoadAllLevels() | ||||||
|  |     {method} - SaveLevelCurrent() | ||||||
|  |     {method} + NextLevel() | ||||||
|  |     {method} + PreviousLevel() | ||||||
|  |     {method} + IncreaseTotalJumps() | ||||||
|  |     {method} + IncreaseTotalAttempts() | ||||||
|  |     {method} + CalculateCurrentProgressionPercent(playerPosition: UnityEngine.Vector3): Integer | ||||||
|  |     {method} + RefreshLevels() | ||||||
|  | } | ||||||
|  | LevelsLoader --|> UnityEngine.MonoBehaviour | ||||||
|  | LevelsLoader *--> Level : <<Owns>> | ||||||
|  | LevelsLoader ..> UnityEngine.TextAsset : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.Resources : <<Uses>> | ||||||
|  | LevelsLoader ..> System.IO.Path : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.Application : <<Uses>> | ||||||
|  | LevelsLoader ..> System.IO.File : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.JsonUtility : <<Uses>> | ||||||
|  | LevelsLoader ..> LevelStat : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | LevelsLoader ..> WinnerWall : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.GameObject : <<Uses>> | ||||||
|  | LevelsLoader ..> UnityEngine.Renderer : <<Uses>> | ||||||
|  | LevelsLoader ..> System.Collections.Generic.List : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelLoader { | ||||||
|  |     {field} + levelsLoader: LevelsLoader | ||||||
|  |     {field} + audioSource: UnityEngine.AudioSource | ||||||
|  |     {field} + progressionText: UnityEngine.UI.Text | ||||||
|  |     {field} - groundY: float | ||||||
|  |  | ||||||
|  |     {method} - GetPrefab(type: string): UnityEngine.GameObject | ||||||
|  |     {method} - LoadAudio() | ||||||
|  |     {method} - LoadElements() | ||||||
|  |     {method} + Start() | ||||||
|  |     {method} + Update() | ||||||
|  | } | ||||||
|  | LevelLoader --|> UnityEngine.MonoBehaviour | ||||||
|  | LevelLoader o--> LevelsLoader : <<References>> | ||||||
|  | LevelLoader *--> UnityEngine.AudioSource : <<Owns>> | ||||||
|  | LevelLoader --> UnityEngine.UI.Text : <<References>> | ||||||
|  | LevelLoader ..> System.IO.Path : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.Resources : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.PlayerPrefs : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.GameObject : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.Quaternion : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.Transform : <<Uses>> | ||||||
|  | LevelLoader ..> WinnerWall : <<Uses>> | ||||||
|  | LevelLoader ..> Level : <<Uses>> | ||||||
|  | LevelLoader ..> Ground : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.AudioClip : <<Uses>> | ||||||
|  | LevelLoader ..> UnityEngine.Renderer : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelEditor { | ||||||
|  |     {field} - currentBlock: UnityEngine.GameObject | ||||||
|  |     {field} - isPlacingBlock: bool | ||||||
|  |     {field} - currentScale: UnityEngine.Vector3 | ||||||
|  |     {field} - scaleStep: float | ||||||
|  |     {field} + blockGroupContainer: UnityEngine.Transform | ||||||
|  |     {field} + buttonPrefabTemplate: UnityEngine.GameObject | ||||||
|  |     {field} - currentPage: Integer | ||||||
|  |     {field} - buttonsPerPage: Integer {constant} | ||||||
|  |     {field} - blockPrefabs: System.Collections.Generic.List<UnityEngine.GameObject> | ||||||
|  |     {field} - currentButtons: System.Collections.Generic.List<UnityEngine.GameObject> | ||||||
|  |     {field} - resizingTarget: UnityEngine.GameObject | ||||||
|  |     {field} - isResizing: bool | ||||||
|  |     {field} - originalMousePos: UnityEngine.Vector3 | ||||||
|  |     {field} - originalScale: UnityEngine.Vector3 | ||||||
|  |     {field} - currentResizeAxis: ResizeAxis | ||||||
|  |  | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} - LoadPrefabs() | ||||||
|  |     {method} - GenerateButtons() | ||||||
|  |     {method} - ClearCurrentButtons() | ||||||
|  |     {method} + NextPage() | ||||||
|  |     {method} + PreviousPage() | ||||||
|  |     {method} - SelectPrefab(prefab: UnityEngine.GameObject) | ||||||
|  |     {method} - Update() | ||||||
|  |     {method} - PlaceBlock() | ||||||
|  |     {method} - TrySnapToNearbyBlock() | ||||||
|  |     {method} - InstantiateAndPrepare(prefab: UnityEngine.GameObject, scaleOverride: UnityEngine.Vector3?) | ||||||
|  |     {method} - HandleBlockRotation() | ||||||
|  | } | ||||||
|  | LevelEditor --|> UnityEngine.MonoBehaviour | ||||||
|  | LevelEditor o--> blockGroupContainer : <<References>> | ||||||
|  | LevelEditor --> buttonPrefabTemplate : <<References>> | ||||||
|  | LevelEditor *--> blockPrefabs : <<Owns>> | ||||||
|  | LevelEditor *--> currentButtons : <<Owns>> | ||||||
|  | LevelEditor o--> currentBlock : <<References>> | ||||||
|  | LevelEditor o--> resizingTarget : <<References>> | ||||||
|  | LevelEditor ..> UnityEngine.GameObject : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Input : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Camera : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Physics2D : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Collider2D : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Bounds : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.SpriteRenderer : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.UI.Button : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.UI.Image : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.RectTransform : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Debug : <<Uses>> | ||||||
|  | LevelEditor ..> System.Collections.Generic.List : <<Uses>> | ||||||
|  | LevelEditor ..> UnityEngine.Resources : <<Uses>> | ||||||
|  | LevelEditor ..> Player : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> Ground : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> Portal : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> SmallObstacle : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> Spike : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> Block : <<Uses>> ' (via tags) | ||||||
|  | LevelEditor ..> Bonus : <<Uses>> ' (via tags) | ||||||
|  |  | ||||||
|  | enum ResizeAxis <<enumeration>> { | ||||||
|  |   None | ||||||
|  |   Horizontal | ||||||
|  |   Vertical | ||||||
|  | } | ||||||
|  | LevelEditor *--> ResizeAxis : <<Has>> | ||||||
|  |  | ||||||
|  | class LevelElement { | ||||||
|  |     {field} + type: string | ||||||
|  |     {field} + x: float | ||||||
|  |     {field} + y: float | ||||||
|  |     {field} + scaleX: float | ||||||
|  |     {field} + scaleY: float | ||||||
| } | } | ||||||
|  |  | ||||||
| class Level { | class Level { | ||||||
|   - name: String |     {field} + {static} {readOnly} LAST_X: Integer = 15 | ||||||
|   - musicName: String |     {field} + JsonName: string {get} {set} | ||||||
|   + StartLevel() |     {field} + TotalJumps: Integer {get} {set} | ||||||
|   + EndLevel() |     {field} + TotalAttempts: Integer {get} {set} | ||||||
|   + CheckCompletion(): Boolean |     {field} + ProgressionPercent: Integer {get} {set} | ||||||
|  |     {field} + ProgressionPercentMax: Integer {get} {set} | ||||||
|  |     {field} + name: string | ||||||
|  |     {field} + musicName: string | ||||||
|  |     {field} + order: Integer | ||||||
|  |     {field} + elements: System.Collections.Generic.List<LevelElement> | ||||||
|  |     {field} + LastX: float {get} | ||||||
|  |  | ||||||
|  |     {method} + {static} CreateFromJSON(jsonString: string): Level | ||||||
|  | } | ||||||
|  | Level *--> LevelElement : <<Composed of>> | ||||||
|  | Level ..> UnityEngine.JsonUtility : <<Uses>> | ||||||
|  | Level ..> System.Collections.Generic.List : <<Uses>> | ||||||
|  |  | ||||||
|  | class JSONImporter { | ||||||
|  |     {field} + statusText: TMPro.TMP_Text | ||||||
|  |  | ||||||
|  |     {method} - Awake() | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} + ImportJSON() | ||||||
|  |     {method} - ShowFileBrowser(): System.Collections.IEnumerator | ||||||
|  |     {method} - UpdateStatus(message: string, color: UnityEngine.Color) | ||||||
|  | } | ||||||
|  | JSONImporter --|> UnityEngine.MonoBehaviour | ||||||
|  | JSONImporter --> TMPro.TMP_Text : <<References>> | ||||||
|  | JSONImporter ..> System.Collections.IEnumerator : <<Uses>> | ||||||
|  | JSONImporter ..> SimpleFileBrowser.FileBrowser : <<Uses>> | ||||||
|  | JSONImporter ..> System.IO.Path : <<Uses>> | ||||||
|  | JSONImporter ..> System.IO.File : <<Uses>> | ||||||
|  | JSONImporter ..> UnityEngine.Color : <<Uses>> | ||||||
|  | JSONImporter ..> LevelsLoader : <<Uses>> | ||||||
|  | JSONImporter ..> UnityEngine.Object : <<Uses>> | ||||||
|  | JSONImporter ..> UnityEngine.Canvas : <<Uses>> | ||||||
|  | JSONImporter ..> UnityEngine.SceneManagement.SceneManager : <<Uses>> | ||||||
|  |  | ||||||
|  | class JSONExporter { | ||||||
|  |     {field} + statusText: TMPro.TMP_Text | ||||||
|  |     {field} - editor: LevelEditor | ||||||
|  |     {field} - levelsFolder: string | ||||||
|  |  | ||||||
|  |     {method} - Awake() | ||||||
|  |     {method} - Start() | ||||||
|  |     {method} + ExportJSON() | ||||||
|  |     {method} - ShowSaveDialog(): System.Collections.IEnumerator | ||||||
|  |     {method} - SetStatus(message: string, color: UnityEngine.Color) | ||||||
|  | } | ||||||
|  | JSONExporter --|> UnityEngine.MonoBehaviour | ||||||
|  | JSONExporter o--> LevelEditor : <<References>> | ||||||
|  | JSONExporter --> TMPro.TMP_Text : <<References>> | ||||||
|  | JSONExporter ..> System.Collections.IEnumerator : <<Uses>> | ||||||
|  | JSONExporter ..> System.Collections.Generic.List : <<Uses>> | ||||||
|  | JSONExporter ..> SimpleFileBrowser.FileBrowser : <<Uses>> | ||||||
|  | JSONExporter ..> System.IO.Path : <<Uses>> | ||||||
|  | JSONExporter ..> System.IO.File : <<Uses>> | ||||||
|  | JSONExporter ..> System.IO.Directory : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Collider2D : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Object : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.JsonUtility : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Color : <<Uses>> | ||||||
|  | JSONExporter ..> LevelsLoader : <<Uses>> | ||||||
|  | JSONExporter ..> UnityEngine.Canvas : <<Uses>> | ||||||
|  |  | ||||||
|  | class SerializableElement <<private>> { | ||||||
|  |     {field} + type: string | ||||||
|  |     {field} + x: float | ||||||
|  |     {field} + y: float | ||||||
|  |     {field} + scaleX: float | ||||||
|  |     {field} + scaleY: float | ||||||
|  | } | ||||||
|  | JSONExporter ..> SerializableElement : <<Uses>> | ||||||
|  |  | ||||||
|  | class LevelData <<private>> { | ||||||
|  |     {field} + name: string | ||||||
|  |     {field} + musicName: string | ||||||
|  |     {field} + order: Integer | ||||||
|  |     {field} + elements: SerializableElement[*] | ||||||
|  | } | ||||||
|  | LevelData *--> SerializableElement : <<Composed of>> | ||||||
|  | JSONExporter ..> LevelData : <<Uses>> | ||||||
|  |  | ||||||
|  |  | ||||||
|  | interface IGameMode <<interface>> { | ||||||
|  |     {method} + Update(player: Player) {abstract} | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D) {abstract} | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D) {abstract} | ||||||
| } | } | ||||||
|  |  | ||||||
| abstract class LevelElement { | class ShipGameMode implements IGameMode { | ||||||
|   - x: Float |     {field} - HorizontalSpeed: float {constant} | ||||||
|   - y: Float |     {field} - JumpForce: float {constant} | ||||||
| } |     {field} - JumpKey: UnityEngine.KeyCode {constant} | ||||||
|  |     {field} - UpperAngle: float {constant} | ||||||
|  |     {field} - LowerAngle: float {constant} | ||||||
|  |     {field} - RotationTransitionDuration: float {constant} | ||||||
|  |  | ||||||
| abstract class Obstacle extends LevelElement { |     {method} + Update(player: Player) | ||||||
|   + TriggerEffect(player: Player) |     {method} - GetCurrentZAngle(player: Player): float | ||||||
|  |     {method} - Jump(player: Player) | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D) | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D) | ||||||
| } | } | ||||||
|  | ShipGameMode ..|> IGameMode | ||||||
|  | ShipGameMode ..> Player : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Vector2 : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Input : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.KeyCode : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Time : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Quaternion : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.SceneManagement.SceneManager : <<Uses>> | ||||||
|  | ShipGameMode ..> UnityEngine.Collision2D : <<Uses>> | ||||||
|  | ShipGameMode ..> LevelsLoader : <<Uses>> | ||||||
|  |  | ||||||
| class Platform extends LevelElement { | class NormalGameMode implements IGameMode { | ||||||
|  |     {field} - HorizontalSpeed: float {constant} | ||||||
|  |     {field} - JumpForce: float {constant} | ||||||
|  |     {field} - JumpKey: UnityEngine.KeyCode {constant} | ||||||
|  |     {field} - isRotating: bool | ||||||
|  |     {field} - targetRotationAngle: float | ||||||
|  |     {field} - rotationSpeed: float {readOnly} | ||||||
|  |  | ||||||
|  |     {method} + Update(player: Player) | ||||||
|  |     {method} - Jump(player: Player) | ||||||
|  |     {method} - PerformRotation(player: Player) | ||||||
|  |     {method} - IsJumping(player: Player): bool | ||||||
|  |     {method} - AlignRotation(player: Player) | ||||||
|  |     {method} - UpdateParticlePositionAndRotation(player: Player) | ||||||
|  |     {method} + OnCollisionEnter(player: Player, collision: UnityEngine.Collision2D) | ||||||
|  |     {method} + OnCollisionExit(player: Player, collision: UnityEngine.Collision2D) | ||||||
| } | } | ||||||
|  | NormalGameMode ..|> IGameMode | ||||||
|  | NormalGameMode ..> Player : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Vector2 : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Input : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.KeyCode : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Mathf : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Time : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Quaternion : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.SceneManagement.SceneManager : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Collision2D : <<Uses>> | ||||||
|  | NormalGameMode ..> LevelsLoader : <<Uses>> | ||||||
|  | NormalGameMode ..> UnityEngine.Vector3 : <<Uses>> | ||||||
|  |  | ||||||
| class Spike extends Obstacle { |  | ||||||
|   + TriggerEffect(player: Player) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class Portal extends LevelElement { | ' Tags | ||||||
|   - destination: Vector2 | class ShipPortal { } | ||||||
|   - type: PortalType | class CubePortal { } | ||||||
|   + Teleport(player: Player) | class BonusBoostSpeed { } | ||||||
| } | class BonusSlowSpeed { } | ||||||
|  | class Kill { } | ||||||
|  | class Win { } | ||||||
|  | class Ground { } | ||||||
|  | class WinnerWall { } | ||||||
|  | class Block { } | ||||||
|  | class SmallObstacle { } | ||||||
|  | class Spike { } | ||||||
|  | class Portal { } | ||||||
|  | class Bonus { } | ||||||
|  |  | ||||||
| enum PortalType { | Player ..> ShipPortal : <<Uses Tag>> | ||||||
|   Normal, Gravity, Speed | Player ..> CubePortal : <<Uses Tag>> | ||||||
| } | Player ..> BonusBoostSpeed : <<Uses Tag>> | ||||||
|  | Player ..> BonusSlowSpeed : <<Uses Tag>> | ||||||
| class Bumper extends LevelElement { | ShipGameMode ..> Kill : <<Uses Tag>> | ||||||
|   - bounceForce: Float | ShipGameMode ..> Win : <<Uses Tag>> | ||||||
|   + Bounce(player: Player) | ShipGameMode ..> Ground : <<Uses Tag>> | ||||||
| } | NormalGameMode ..> Kill : <<Uses Tag>> | ||||||
|  | NormalGameMode ..> Win : <<Uses Tag>> | ||||||
| class LevelEnd extends LevelElement { | LevelLoader ..> WinnerWall : <<Uses Prefab>> | ||||||
|   + TriggerEndGame() | LevelLoader ..> Ground : <<Uses Prefab>> | ||||||
| } | LevelEditor ..> Ground : <<Uses Tag>> | ||||||
|  | LevelEditor ..> Block : <<Uses Tag>> | ||||||
| class Collectible extends LevelElement { | LevelEditor ..> SmallObstacle : <<Uses Tag>> | ||||||
|   - points: int | LevelEditor ..> Spike : <<Uses Tag>> | ||||||
|   + Collect(player: Player) | LevelEditor ..> Portal : <<Uses Tag>> | ||||||
| } | LevelEditor ..> Bonus : <<Uses Tag>> | ||||||
|  | LevelsLoader ..> WinnerWall : <<Uses Prefab>> | ||||||
| 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 LevelLoader { |  | ||||||
|   + LoadLevel(jsonPath: String): Level |  | ||||||
|   + UnloadLevel(level: Level) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class LevelParser { |  | ||||||
|   + ParseJSON(jsonData: String): Level |  | ||||||
| } |  | ||||||
|  |  | ||||||
| class MusicManager { |  | ||||||
|   - currentTrack: String |  | ||||||
|   - volume: Float |  | ||||||
|   + PlayMusic(musicPath: String) |  | ||||||
|   + StopMusic() |  | ||||||
|   + SetVolume(level: Float) |  | ||||||
| } |  | ||||||
|  |  | ||||||
| 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 | ||||||
|   | |||||||
| @@ -1,4 +1,4 @@ | |||||||
| @startuml Geometry Dash - Diagramme d'etats du joueur | @startuml Geometry Dash - Diagramme d'états du joueur | ||||||
| 
 | 
 | ||||||
| start | start | ||||||
| 
 | 
 | ||||||
| @@ -16,12 +16,6 @@ repeat | |||||||
|     switch (Forme) |     switch (Forme) | ||||||
|       case (Forme fusée) |       case (Forme fusée) | ||||||
|         :Mode fusée; |         :Mode fusée; | ||||||
|       case (Forme roue) |  | ||||||
|         :Mode roue; |  | ||||||
|       case (Forme sens inversé) |  | ||||||
|         :Mode sens inversé; |  | ||||||
|       case (Forme gravité inversée) |  | ||||||
|         :Mode gravité inversée; |  | ||||||
|     endswitch |     endswitch | ||||||
|     if (Le joueur percute un obstacle ?) then (Oui) |     if (Le joueur percute un obstacle ?) then (Oui) | ||||||
|       :Le joueur meurt; |       :Le joueur meurt; | ||||||
| @@ -38,8 +32,8 @@ repeat | |||||||
|           :Le joueur meurt; |           :Le joueur meurt; | ||||||
|           stop |           stop | ||||||
|         endif |         endif | ||||||
|       case (Annulation d'obstacle) |       case (Temps accéléré) | ||||||
|         :Supprimer tous les obstacles; |         :Activer accélération du temps; | ||||||
|         :Durée : 3 secondes; |         :Durée : 3 secondes; | ||||||
|     endswitch |     endswitch | ||||||
|   } |   } | ||||||
| @@ -4,100 +4,64 @@ left to right direction | |||||||
|  |  | ||||||
| actor Joueur as Joueur | actor Joueur as Joueur | ||||||
|  |  | ||||||
|  |  | ||||||
| rectangle "Menu principal" { | rectangle "Menu principal" { | ||||||
|   usecase "Configurer les paramètres" as ConfigurerParametres |  | ||||||
|   usecase "Accéder à la sélection des niveaux" as SelectionNiveau |   usecase "Accéder à la sélection des niveaux" as SelectionNiveau | ||||||
|   usecase "Accéder à l'éditeur de cartes" as EditeurCartes |   usecase "Accéder à l'éditeur de niveau" as EditeurNiveau | ||||||
|   usecase "Consulter les statistiques" as ConsulterStats |   usecase "Importer un niveau" as ImporterNiveau | ||||||
|   usecase "Voir les trophées et récompenses" as VoirTrophees |   usecase "Quitter le jeu" as QuitterJeu | ||||||
| } | } | ||||||
|  |  | ||||||
| rectangle "Sélection des niveaux" { | rectangle "Sélection des niveaux" { | ||||||
|   usecase "Parcourir les niveaux disponibles" as ParcourirNiveaux |   usecase "Parcourir les niveaux disponibles (passer au niveau suivant ou précédent)" as ParcourirNiveaux | ||||||
|   usecase "Afficher les détails d'un niveau" as AfficherDetailsNiveau |   usecase "Afficher les statistiques d'un niveau (nombre d'essais, nombre de sauts et progression record)" as AfficherDetailsNiveau | ||||||
|   usecase "Commencer un niveau" as CommencerNiveau |   usecase "Commencer un niveau" as CommencerNiveau | ||||||
| } | } | ||||||
|  |  | ||||||
| rectangle "Pendant un niveau" { | rectangle "Pendant un niveau" { | ||||||
|   usecase "Sauter" as Sauter |   usecase "Appuyer sur la barre d'espace" as Sauter | ||||||
|  |   usecase "Voir la progression dans le niveau" as VoirProgression | ||||||
|   usecase "Mettre le jeu en pause" as MettrePause |   usecase "Mettre le jeu en pause" as MettrePause | ||||||
| } | } | ||||||
|  |  | ||||||
| rectangle "Paramètres" { |  | ||||||
|   usecase "Régler le volume du jeu" as ReglerVolume |  | ||||||
|   usecase "Changer la musique de fond" as ChangerMusique |  | ||||||
|   usecase "Lire les instructions d'aide" as LireAide |  | ||||||
| } |  | ||||||
|  |  | ||||||
| rectangle "Création de cartes" { |  | ||||||
|   usecase "Créer une nouvelle carte" as CreerNouvelleCarte |  | ||||||
|   usecase "Modifier une carte existante" as ModifierCarte |  | ||||||
|   usecase "Tester une carte" as TesterCarte |  | ||||||
|   usecase "Partager une carte" as PartagerCarte |  | ||||||
|   usecase "Télécharger des cartes de la communauté" as TelechargerCartes |  | ||||||
| } |  | ||||||
|  |  | ||||||
| rectangle "Statistiques" { |  | ||||||
|   usecase "Afficher les statistiques globales" as AfficherStatsGlobales |  | ||||||
|   usecase "Afficher les statistiques de session" as AfficherStatsSession |  | ||||||
| } |  | ||||||
|  |  | ||||||
| rectangle "Trophées et récompenses" { |  | ||||||
|   usecase "Voir les trophées débloqués" as VoirTropheesDebloques |  | ||||||
|   usecase "Voir les pièces collectées" as VoirPieces |  | ||||||
| } |  | ||||||
|  |  | ||||||
| rectangle "Menu Pause" { | rectangle "Menu Pause" { | ||||||
|   usecase "Continuer" as Continuer |   usecase "Continuer" as Continuer | ||||||
|   usecase "Redémarrer la partie" as RedemarrerPartie |   usecase "Revenir au menu principal" as RevenirMenuPrincipal | ||||||
|   usecase "Retour à la sélection des maps" as RetourSelection |   usecase "Régler le volume de la musique" as ReglerVolumeMusique | ||||||
|  |   usecase "Voir le nombre d'essais, nombre de sauts et progression record" as StatistiquesNiveau | ||||||
| } | } | ||||||
|  |  | ||||||
| Joueur --> ConfigurerParametres : <<extends>> | rectangle "Création de niveaux" { | ||||||
| Joueur --> SelectionNiveau : <<extends>> |   usecase "Créer un nouveau niveau" as CreerNouveauNiveau | ||||||
| Joueur --> EditeurCartes : <<extends>> |   usecase "Modifier un niveau existante" as ModifierNiveau | ||||||
| Joueur --> ConsulterStats : <<extends>> |   usecase "Tester un niveau" as TesterNiveau | ||||||
| Joueur --> VoirTrophees : <<extends>> |   usecase "Exporter un niveau" as ExporterNiveau | ||||||
|  | } | ||||||
|  |  | ||||||
| SelectionNiveau --> ParcourirNiveaux : <<include>> | Joueur --> SelectionNiveau : <<extends>> | ||||||
| ParcourirNiveaux --> AfficherDetailsNiveau : <<extends>> | Joueur --> EditeurNiveau : <<extends>> | ||||||
| ParcourirNiveaux --> CommencerNiveau : <<extends>> | Joueur --> ImporterNiveau : <<extends>> | ||||||
|  | Joueur --> QuitterJeu : <<extends>> | ||||||
|  |  | ||||||
|  | SelectionNiveau --> AfficherDetailsNiveau : <<include>> | ||||||
|  | SelectionNiveau --> ParcourirNiveaux : <<extends>> | ||||||
|  | SelectionNiveau --> CommencerNiveau : <<extends>> | ||||||
|  |  | ||||||
| CommencerNiveau --> Sauter : <<extends>> | CommencerNiveau --> Sauter : <<extends>> | ||||||
|  | CommencerNiveau --> VoirProgression : <<include>> | ||||||
| CommencerNiveau --> MettrePause : <<extends>> | CommencerNiveau --> MettrePause : <<extends>> | ||||||
|  |  | ||||||
| ConfigurerParametres --> ReglerVolume : <<extends>> |  | ||||||
| ConfigurerParametres --> ChangerMusique : <<extends>> |  | ||||||
| ConfigurerParametres --> LireAide : <<extends>> |  | ||||||
|  |  | ||||||
| EditeurCartes --> CreerNouvelleCarte : <<extends>> |  | ||||||
| EditeurCartes --> ModifierCarte : <<extends>> |  | ||||||
| EditeurCartes --> TelechargerCartes : <<extends>> |  | ||||||
| CreerNouvelleCarte --> TesterCarte : <<extends>> |  | ||||||
| ModifierCarte --> TesterCarte : <<extends>> |  | ||||||
| CreerNouvelleCarte --> PartagerCarte : <<extends>> |  | ||||||
| ModifierCarte --> PartagerCarte : <<extends>> |  | ||||||
|  |  | ||||||
| TesterCarte--> Sauter : <<extends>> |  | ||||||
| TesterCarte--> MettrePause : <<extends>> |  | ||||||
|  |  | ||||||
| ConsulterStats --> AfficherStatsGlobales : <<extends>> |  | ||||||
| ConsulterStats --> AfficherStatsSession : <<extends>> |  | ||||||
|  |  | ||||||
| VoirTrophees --> VoirTropheesDebloques : <<extends>> |  | ||||||
| VoirTrophees --> VoirPieces : <<extends>> |  | ||||||
|  |  | ||||||
| MettrePause --> Continuer : <<extends>> | MettrePause --> Continuer : <<extends>> | ||||||
| MettrePause --> RedemarrerPartie : <<extends>> | MettrePause --> RevenirMenuPrincipal : <<extends>> | ||||||
| MettrePause --> RetourSelection : <<extends>> | MettrePause --> ReglerVolumeMusique : <<extends>> | ||||||
|  | MettrePause --> StatistiquesNiveau : <<include>> | ||||||
|  |  | ||||||
| RedemarrerPartie --> Sauter : <<extends>> | EditeurNiveau --> CreerNouveauNiveau : <<extends>> | ||||||
| RedemarrerPartie --> MettrePause : <<extends>> | EditeurNiveau --> ModifierNiveau : <<extends>> | ||||||
|  |  | ||||||
| Continuer --> Sauter : <<extends>> | CreerNouveauNiveau --> TesterNiveau  : <<extends>> | ||||||
| Continuer --> MettrePause : <<extends>> | ModifierNiveau --> TesterNiveau : <<extends>> | ||||||
|  |  | ||||||
| RetourSelection --> ParcourirNiveaux : <<include>> | CreerNouveauNiveau --> ExporterNiveau  : <<extends>> | ||||||
|  | ModifierNiveau --> ExporterNiveau  : <<extends>> | ||||||
|  |  | ||||||
| @enduml | @enduml | ||||||
|   | |||||||
| @@ -7,7 +7,7 @@ Les modélisations UML du projet sont générés à partir des fichiers `.puml` | |||||||
| - [Diagramme de classes](./UML/class-diagram.puml) | - [Diagramme de classes](./UML/class-diagram.puml) | ||||||
| - [Diagramme d'activités](./UML/activity-diagram/activity-diagram.puml) | - [Diagramme d'activités](./UML/activity-diagram/activity-diagram.puml) | ||||||
| - [Diagramme de cas d'utilisation](./UML/use-case-diagram.puml) | - [Diagramme de cas d'utilisation](./UML/use-case-diagram.puml) | ||||||
| - [Diagramme d'états](./UML/state-diagram/state-diagram.puml) | - [Diagramme d'états](./UML/state-diagram.puml) | ||||||
|  |  | ||||||
| ## Diagramme de Gantt | ## Diagramme de Gantt | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,3 +35,11 @@ cd cnam-geometry-dash | |||||||
|  |  | ||||||
| # Ouvrir le projet avec Unity Hub | # Ouvrir le projet avec Unity Hub | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  | ## Screenshots | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user