@startuml

class BaseScreen {
    - mainStage: Stage
    - uiStage: Stage
    - uiTable: Table

    + BaseScreen()
    + initialize(): void
    + update(dt: float): void
    + create(): void
    + render(dt: float): void
    + resize(width: int, height: int): void
    + pause(): void
    + resume(): void
    + dispose(): void
    + show(): void
    + hide(): void
    + keyDown(keycode: int): boolean
    + keyUp(keycode: int): boolean
    + keyTyped(c: char): boolean
    + mouseMoved(screenX: int, screenY: int): boolean
    + scrolled(amount: int): boolean
    + touchDown(screenX: int, screenY: int, pointer: int, button: int): boolean
    + touchDragged(screenX: int, screenY: int, pointer: int): boolean
    + touchUp(screenX: int, screenY: int, pointer: int, button: int): boolean
  }

class ComputerPrologue {
          - scene: Scene
          - continueKey: BaseActor
          - dialogBox: DialogBox
          - background: Background

          + initialize()
          + cPrologue()
          + render()
          + update(dt: float)
          + keyDown(keyCode: int): boolean
          + touchCancelled(screenX: int, screenY: int, pointer: int, button: int): boolean
          + scrolled(amountX: float, amountY: float): boolean
        }

        ComputerPrologue --|> BaseScreen

        class CreditScreen {
          - background: BaseActor
          - credit_title: BaseActor
          - personLabel1: BaseActor
          - personLabel2: BaseActor

          + initialize(): void
          + credits(): void
          + update(dt: float): void
          + keyDown(keyCode: int): boolean
          + touchCancelled(screenX: int, screenY: int, pointer: int, button: int): boolean
          + scrolled(amountX: float, amountY: float): boolean
        }

        CreditScreen --|> BaseScreen

        class LoginScreen {
          - validLogin: ValidLogin
          - stage: Stage
          - screenViewport: ScreenViewport
          - img: Texture
          - batch: SpriteBatch

          + LoginScreen()
          + initialize()
          + create()
          + update(dt: float)
          + show()
          + render(delta: float)
          + resize(width: int, height: int)
          + pause()
          + resume()
          + hide()
          + dispose()
          + touchCancelled(screenX: int, screenY: int, pointer: int, button: int): boolean
          + scrolled(amountX: float, amountY: float): boolean
        }

        LoginScreen --|> BaseScreen

        class ValidLogin {
          - errLabel: VisLabel
          - text: String
          - color: Color
          - button: VisTextButton
          - errorMessageLabel: VisLabel
          - style: String

          + ValidLogin()
          + VisTextButton(text: String)
          + VisTable(true: boolean)
          + add(actor: Actor): void
          + SimpleFormValidator(button: VisTextButton, errorMessageLabel: VisLabel, style: String)
          + notEmpty(textField: VisValidatableTextField, message: String): void
          + changed(event: ChangeEvent, actor: Actor): void
        }

        ValidLogin --|> VisWindow
        'ValidLogin --> TableUtils
        'ValidLogin --> VisTextButton
        'ValidLogin --> VisValidatableTextField
        'ValidLogin --> VisLabel
        'ValidLogin --> VisTable
        'ValidLogin --> SimpleFormValidator
        'ValidLogin --> ChangeListener
        'ValidLogin --> Actor
        'ValidLogin --> Color
        'ValidLogin --> Dialogs

        class MenuScreen {
          +initialize()
          +update(float dt)
          +keyDown(int keyCode): boolean
          +touchCancelled(int screenX, int screenY, int pointer, int button): boolean
          +scrolled(float amountX, float amountY): boolean
        }

        MenuScreen --|> BaseScreen

        class HistoryOfCompAndProgScreen {
          +initialize()
          +update(dt: float)
          +touchCancelled(screenX: int, screenY: int, pointer: int, button: int): boolean
          +scrolled(amountX: float, amountY: float): boolean
       }

       HistoryOfCompAndProgScreen --|> BaseScreen

@enduml