@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 PreReqMenuScreen {
          - Scene scene
          - BaseActor continueKey
          - BaseActor background
          - DialogBox dialogBox
          - Table buttonTable

          + initialize()
          + addText(s: String)
          + intro()
          + update(dt: float)
          + keyDown(keyCode: int): boolean
          + touchCancelled(screenX: int, screenY: int, pointer: int, button: int): boolean
          + scrolled(amountX: float, amountY: float): boolean
        }

        PreReqMenuScreen --|> BaseScreen

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

        DataTypesScreen --|> BaseScreen

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

        StartingPythonScreen --|> BaseScreen

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

        BTSMenuScreen --|> BaseScreen

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

        DictionariesScreen --|> BaseScreen

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

        FilesScreen --|> BaseScreen

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

        OtherDataTypesScreen --|> BaseScreen

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

        ImmutableScreen --|> BaseScreen

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

        MutableScreen --|> BaseScreen

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

        StringsScreen --|> BaseScreen

@enduml