@startuml

package Objects{
    class Bullet{
        -reflectionMax : int
        +OnCollisionEnter2D() : void
        -Move() : void
    }

    class Tank{
        -number : int
        -explosionPrefab : GameObject
        +Explode() : void
        +Move() : void
        +OnCollisionEnter2D() : void
    }

    class Explosion{
        +OnExplosionHalf() : void
        +OnExplosionEnd() : void
    }

    class Cannon{
        +Shoot(): void
        +Turn() : void
    }

    class PlayerController{
        -GetKeys() : void
    }
}

package Managers{
    class EventManager{
        +TriggerEvent() : void
        +StartListening() : void
        +StopListening() : void
    }

    class GameManager{
        -CheckGameSet() : void
    }

    class UIManager{
        -OnGameSet() : void
    }
}

package UIs{
    class RetryButton{
        +OnClick() : void
    }
}

PlayerController -> Tank

Tank *- Cannon

Cannon --> Bullet

Explosion --> EventManager

GameManager --> EventManager

RetryButton --> EventManager

Tank --> EventManager

UIManager --> EventManager

@enduml