@startuml

title Diagramme UML des Cyberpac 2077

java.awt.event.KeyListener <|-- engine.GameController
engine.GameController <|.. jeu.Controller
engine.Game <|.. jeu.Jeu
javax.swing.JPanel <|-- engine.DrawingPanel
engine.GameController  <|-- engine.GameEngineGraphical
engine.Game <|-- engine.GameEngineGraphical
engine.GamePainter <|--  engine.GameEngineGraphical
engine.GraphicalInterface <|-- engine.GameEngineGraphical
engine.DrawingPanel <|-- engine.GraphicalInterface
engine.GamePainter <|-- engine.DrawingPanel
environment.Coordonnees <|-- entity.Entity
entity.Character <|-- environment.Physique

loaders.CharacterLoader <|-- jeu.Jeu
jeu.Painter <|-- loaders.CharacterLoader
entity.Character <|-- jeu.Jeu
jeu.Painter <|-- entity.Character
entity.Monster <|-- environment.Physique
entity.Character <|-- loaders.CharacterLoader

interface engine.GameController {
+ Cmd getCommand()
}

class engine.GraphicalInterface {
- DrawingPanel panel
+ <<Create>> GraphicalInterface(GamePainter,GameController)
+ void paint()
}

class engine.DrawingPanel {
- {static} long serialVersionUID
- GamePainter painter
- BufferedImage nextImage
- BufferedImage currentImage
- int width
+ <<Create>> DrawingPanel(GamePainter)
+ void drawGame()
+ void paint(Graphics)
}

class start.Main {
+ {static} void main(String[])
}
interface engine.GamePainter {
+ {abstract}void draw(BufferedImage)
+ {abstract}int getWidth()
+ {abstract}int getHeight()
}
interface engine.Game {
+ void evolve(Cmd)
+ boolean isFinished()
}
class engine.GameEngineGraphical {
- Game game
- GamePainter gamePainter
- GameController gameController
- GraphicalInterface gui
+ <<Create>> GameEngineGraphical(Game,GamePainter,GameController)
+ void run()
}
class entity.Character {
- double masse
- double impulsionSaut
- HashMap tableCommand
- int alpha
- int nbLifePoints
- double entityWIDTH
- double entityHEIGHT
- double vitesseActuX
- double vitesseActuZ
+ void deplacements()
+ void resetCommand()
+ void getGameCommand()
+ void attaque()
+ void evolveCharacter()
+ void collisionsGestion()
+ int getNbLifePoints()
+ void setNbLifePoints(int)
+ int getAlpha()
+ double getM()
+ double getVitesseActuX()
+ double getVitesseActuZ()
}
class entity.Monster{
+ void deplacements()
+ void attaque()
}


abstract class entity.Entity{
- HitBox hitBox
- double vitesseMax
- Coordonnees coord
- double entityWIDTH
- double entityHEIGHT
+ void deplacements()
+ Coordonnes getCoord()
+ void attaque()
}
entity.Entity <|.. entity.Character
entity.Entity <|.. entity.Monster



class environment.Obstacle{
}

class environment.Hitbox{
- HashMap<String, Coordonnees> extremites
+ public {static} Boolean Collision()
}
class environment.Coordonnees{
- int x
- int z
+ {static} int distance(Object,Object)
+ double getX()
+ double getZ()
}

class loaders.CharacterLoader{
    - Character gameCharacter
    - String skinPath
    - Image imageCharacter
    + void refreshImage()
    + Character getGameCharacter()
    + String getSkinPath()
    + Image getImageCharacter()
    + void setSkinPath(String)
}


class jeu.Painter{
# {static} int WIDTH
# {static} int HEIGHT
+ <<Create>> Painter()
+ void draw(BufferedImage)
- void drawCharacter(Graphics2D,Character,Image)
- void drawSol(Graphics2D)
- void drawObstacle(Graphics2D)
+ int getWidth()
+ int getHeight()
}
class jeu.Controller {
- boolean isRightPressed, isLeftPressed, isSpacePressed
+ <<Create>> Controller()
+ HashMap<String,Boolean> getCommand()
+ void keyPressed(KeyEvent)
+ void keyReleased(KeyEvent)
+ void keyTyped(KeyEvent)
}
class jeu.Jeu{
+ <<Create>> Jeu(String)
+ void evolve(Cmd)
- HashMap directionJeu
+ boolean isFinished()
- Character gameCharacter
- CharacterLoader gameCharacterLoader
}
class environment.Physique{
- double g
}

@enduml