diff --git a/docs/diagrammes/classes/classes.pdf b/docs/diagrammes/classes/classes.pdf index 5e9526a..324a2c8 100644 Binary files a/docs/diagrammes/classes/classes.pdf and b/docs/diagrammes/classes/classes.pdf differ diff --git a/docs/diagrammes/classes/classes.tex b/docs/diagrammes/classes/classes.tex index b521ecf..83fceae 100644 --- a/docs/diagrammes/classes/classes.tex +++ b/docs/diagrammes/classes/classes.tex @@ -9,60 +9,106 @@ \begin{document} \begin{tikzpicture} + %%%%%%%%%%%%%%%%%%%%%%% + %% CLASSES GÉNÉRALES %% + %%%%%%%%%%%%%%%%%%%%%%% + + % Spécifications du gestionnaire de jeu \umlclass{Manager}{ window : fenêtre\\ - clock : horloge\\ - elapsed\_time : flottant\\ resource\_manager : \texttt{ResourceManager}\\ - keys : \texttt{[booléen]}\\ - view : \texttt{View} + clock : horloge\\ + states : pile de \texttt{State} }{ start() : vide\\ - getWindow() : fenêtre\\ - getElapsedTime() : flottant\\ - getResourceManager() : \texttt{ResourceManager}\\ - isKeyPressed(key : touche) : booléen + pushState(state : \texttt{State}) : vide\\ + popState() : vide } - \umlabstract[x=-4,y=-4.5]{View}{ - manager : \texttt{Manager} - }{ - \umlvirt{frame() : vide} - } - \umluniassoc{Manager}{View} - + % Spécifications du gestionnaire de ressources \umlclass[x=4,y=-4.5]{ResourceManager}{ - textures : dictionnaire \texttt{string -> texture} + textures : dictionnaire \texttt{string -> texture}\\ + fonts : dictionnaire \texttt{string -> police} + music : musique }{ - getTexture(name : string) : texture + getTexture(name : string) : texture\\ + getFont(name : string) : texture\\ + getLevelPath(name : string) : string\\ + playMusic(name : string) : vide\\ + stopMusic() : vide } \umluniassoc{Manager}{ResourceManager} - \umlabstract[x=-4,y=-8.5]{Level}{ - name : chaîne de caractères\\ - background : sprite\\ - objects : \texttt{[Object]}\\ - zone : \texttt{[[flottant, flottant]]} + % Spécfications d'un état de jeu + \umlabstract[x=-4,y=-4.5]{State}{ + manager : \texttt{Manager} }{ + \umlvirt{enable() : vide}\\ + \umlvirt{processEvent(event : événement) : vide}\\ + \umlvirt{frame() : vide} + } + \umlunicompo{Manager}{State} + + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + %% ÉTATS DE JEU PRINCIPAUX %% + %%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % Spécifications de l'état de jeu abstrait "niveau" + % qui est une collection d'objets + \umlabstract[y=-11]{Level}{ + name : string\\ + background : sprite\\ + music : string\\ + camera : vue\\ + gravity\_direction : direction\\ + total\_time : entier\\ + players : \texttt{[Player]}\\ + objects : \texttt{[Object]}\\ + zone : \texttt{[vecteur]} + }{ + enable() : vide\\ + processEvent(event : événement) : vide\\ + load(file : string) : vide\\ + save(file : string) : vide\\ \umlvirt{frame() : vide}\\ draw() : vide\\ - load(file : fichier en lecture) : vide\\ - save(file : fichier en écriture) : vide + addObject(object : \texttt{Object})\\ + removeObject(object : \texttt{Object}) } - \umlinherit{View}{Level} + \umlinherit{State}{Level} - \umlclass[x=-7,y=-12.5]{Editor}{}{ - frame() : vide + % Spécifications de l'état de jeu "éditeur" qui permet + % de modifier des niveaux de jeu + \umlclass[x=-3.5,y=-18]{Editor}{ + selection : \texttt{[Object]} + }{ + enable() : vide\\ + processEvent(event : événement) : vide\\ + frame() : vide\\ + select(objet: \texttt{Object}) : vide\\ + selectAll() : vide\\ + clearSelection() : vide\\ } \umlinherit{Level}{Editor} - \umlclass[x=-1,y=-12.5]{Game}{}{ + % Spécifications de l'état de jeu "jeu" qui permet + % de jouer aux niveaux créés + \umlclass[x=3.5,y=-18]{Game}{ + mode : mode\\ + next\_frame\_time : temps\\ + pending\_kill : \texttt{[Object]}\\ + time\_left : flottant + }{ + enable() : vide\\ + processEvent(event : événement) : vide\\ frame() : vide\\ - update() : vide + update() : vide\\ + kill(objet : \texttt{Object}) : vide } \umlinherit{Level}{Game} - \umlabstract[x=-4,y=-19]{Object}{ + % Spécifications des objets du jeu + \umlabstract[y=-25]{Object}{ acceleration : vecteur\\ velocity : vecteur\\ position : vecteur\\ @@ -73,33 +119,108 @@ dynamic\_friction : flottant\\ layer : entier }{ - \umlvirt{draw() : vide}\\ - \umlvirt{getForces(manager : \texttt{Manager}, objects : \texttt{[Object]}) : vecteur}\\ - \umlvirt{draw(manager : \texttt{Manager}) : vide}\\ + \umlvirt{getForces(game : \texttt{Game}) : vecteur}\\ + \umlvirt{activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur}\\ \umlvirt{getAABB() : boîte}\\ - \hfill\\ - updateVelocity(manager : \texttt{Manager}, objects : \texttt{[Object]}, delta : flottant) : vide\\ - updatePosition(manager : \texttt{Manager}, objects : \texttt{[Object]}, delta : flottant) : vide\\ - detectCollision(object : \texttt{Object}) : \texttt{CollisionData}\\ - solveCollision(object : \texttt{Object}, normal : vecteur) : vide\\ + \umlvirt{getRadius() : flottant}\\ + \umlvirt{draw(level : \texttt{Level}) : vide}\\ + updateVelocity(game : \texttt{Game}) : vide\\ + updatePosition() : vide\\ + solveCollision(game : \texttt{Game}, object : \texttt{Object}, normal : vecteur) : vide\\ positionalCorrection(object : \texttt{Object}, normal : vecteur, depth : flottant) : vide\\ } - \umlunicompo{Game}{Object} - \umlunicompo{Editor}{Object} + \umlunicompo{Level}{Object} - \umlclass[x=-8,y=-26]{Player}{ + % Spécifications de l'objet "joueur" + \umlclass[x=-4,y=-31.5]{Player}{ player\_number : entier non-signé }{ - getForces(manager : \texttt{Manager}, objects : \texttt{[Object]}) : vecteur\\ - draw(manager : \texttt{Manager}) : vide\\ - getAABB() : boîte + getForces(game : \texttt{Game}) : vecteur\\ + draw(level : \texttt{Level}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur\\ + getAABB() : boîte\\ + getRadius() : flottant\\ } \umlinherit{Object}{Player} - \umlclass[y=-26]{Block}{}{ - draw(manager : \texttt{Manager}) : vide\\ - getAABB() : boîte + % Spécifications de l'objet "bloc" + \umlclass[x=4,y=-31.5]{Block}{}{ + draw(level : \texttt{Level}) : vide\\ + prepareDraw(resources : \texttt{ResourceManager}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur\\ + getAABB() : boîte\\ + getRadius() : flottant\\ } \umlinherit{Object}{Block} + + % Spécifications de l'objet "bloc de fin" permettant + % quand il est activé de terminer le niveau + \umlclass[x=0,y=-35]{FinishBlock}{}{ + prepareDraw(resources : \texttt{ResourceManager}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur + } + \umlinherit{Block}{FinishBlock} + + % Spécifications de l'objet "bloc de gravité" permettant + % quand il est activé de réorienter la gravité du niveau + \umlclass[x=8,y=-35]{GravityBlock}{ + gravity\_direction : direction + }{ + prepareDraw(resources : \texttt{ResourceManager}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur + } + \umlinherit{Block}{GravityBlock} + + % Spécifications de l'objet "bloc tueur" permettant + % quand il est activé par un joueur de le tuer + \umlclass[x=0,y=-37.5]{KillBlock}{}{ + prepareDraw(resources : \texttt{ResourceManager}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur + } + \umlinherit{Block}{KillBlock} + + % Spécifications de l'objet "bloc d'échange" permettant + % quand il est activé par un joueur d'échanger sa charge + \umlclass[x=8,y=-37.5]{SwitchBlock}{}{ + prepareDraw(resources : \texttt{ResourceManager}) : vide\\ + activate(game : \texttt{Game}, object : \texttt{Object}) : vecteur + } + \umlinherit{Block}{SwitchBlock} + + %%%%%%%%%%%%%%%%%%%%%%%%%% + %% ÉTATS DE JEU DU MENU %% + %%%%%%%%%%%%%%%%%%%%%%%%%% + + % Spécifications de l'état de jeu "menu" + % qui est le premier état au démarrage et permet + % d'afficher les différents choix de jeu + \umlclass[x=-7,y=-11]{Menu}{ + background : sprite\\ + choices : \texttt{[string]}\\ + actions : \texttt{[callback]}\\ + selection : entier non-signé + }{ + loadMainMenu() : vide\\ + loadLevelMenu() : vide\\ + loadEditorMenu() : vide\\ + launchGame(path : string) : vide\\ + launchEditor(path : string) : vide\\ + launchRules() : vide\\ + quit() : vide\\ + enable() : vide\\ + processEvent(event : événement) : vide\\ + frame() : vide + } + \umlinherit{State}{Menu} + + % Spécifications de l'état de jeu "règles" qui + % affiche l'image décrivant les règles + \umlclass[x=-14,y=-11]{Rules}{ + background : sprite\\ + }{ + processEvent(event : événement) : vide\\ + frame() : vide + } + \umlinherit{State}{Rules} \end{tikzpicture} \end{document}