예제 #1
0
    def _createOkButton(self) -> UITextureButton:

        buttonFileName:        str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName='HelpOkButton.png')
        pressedButtonFileName: str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName='HelpOkButtonPressed.png')
        hoveredButtonFileName: str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName='HelpOkButtonHovered.png')

        okButtonTexture:        Texture = load_texture(buttonFileName)
        okButtonPressedTexture: Texture = load_texture(pressedButtonFileName)
        okButtonHoveredTexture: Texture = load_texture(hoveredButtonFileName)

        buttonStyle: Dict = {'font_name': 'arial',
                             'font_size': 12
                             }

        okButton: UITextureButton = UITextureButton(width=35, height=35,
                                                    texture=okButtonTexture,
                                                    texture_pressed=okButtonPressedTexture,
                                                    texture_hovered=okButtonHoveredTexture,
                                                    style=buttonStyle)

        @okButton.event('on_click')
        def onClickOk(event: UIOnClickEvent):
            self._onClickOk(event)

        return okButton
예제 #2
0
    def _createHelpTextArea(self) -> CreateTextResponse:
        """
        Creates and loads the help text

        Returns:  A named tuple that has the texture pane and the text area widgets
        """
        fqFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.RESOURCES_PACKAGE_NAME,
                                                           bareFileName='Help.txt')
        with open(fqFileName) as fd:
            lines: str = fd.read()
        textArea: UITextArea = UITextArea(width=550, height=360,
                                          text=lines,
                                          text_color=color.BLACK,
                                          font_name=HelpView.FONT_NAME)

        textureFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
                                                                bareFileName='GreyPanel.png')
        background: Texture = load_texture(textureFileName)

        texturePane: UITexturePane = UITexturePane(
            textArea.with_space_around(right=20),
            tex=background,
            padding=(10, 10, 10, 10)
        )
        return CreateTextResponse(textArea=textArea, texturePane=texturePane)
예제 #3
0
    def _createDialogButtons(self) -> UIBoxLayout:
        """
        Creates and binds the dialog 'Ok' and 'Cancel' buttons

        Returns:  The button box container
        """
        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='OkButton.png')

        okButtonTexture: Texture = load_texture(fqFileName)
        fqFileName = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='OkButtonPressed.png')
        okButtonPressedTexture: Texture = load_texture(fqFileName)

        fqFileName = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='CancelButton.png')

        cancelButtonTexture: Texture = load_texture(fqFileName)

        fqFileName = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='CancelButtonPressed.png')

        cancelButtonPressedTexture: Texture = load_texture(fqFileName)

        buttonBox: UIBoxLayout = UIBoxLayout(width=300, vertical=False)
        buttonStyle: Dict = {'font_name': 'arial', 'font_size': 12}
        okButton: UITextureButton = UITextureButton(
            width=35,
            height=35,
            texture=okButtonTexture,
            texture_pressed=okButtonPressedTexture,
            style=buttonStyle)

        cancelButton: UITextureButton = UITextureButton(
            width=35,
            height=35,
            texture=cancelButtonTexture,
            texture_pressed=cancelButtonPressedTexture,
            style=buttonStyle)

        buttonBox.add(okButton.with_space_around(top=10, bottom=10, left=5))
        buttonBox.add(
            cancelButton.with_space_around(top=10, bottom=10, left=5, right=5))

        @okButton.event('on_click')
        def onClickOk(event: UIOnClickEvent):
            self._onClickOk(event)

        @cancelButton.event('on_click')
        def onClickCancel(event: UIOnClickEvent):
            self._onClickCancel(event)

        return buttonBox
예제 #4
0
def main():
    """
    Main method
    """
    LocateResources.setupSystemLogging()
    SettingsCommon.determineSettingsLocation()

    window: TestSpriteSheet = TestSpriteSheet(SCREEN_WIDTH, SCREEN_HEIGHT,
                                              SCREEN_TITLE)
    window.setup()
    arcadeRun()
예제 #5
0
    def __init__(self, filename: str = '', scale: float = 1.0):

        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName=filename)

        super().__init__(filename=fqFileName, scale=scale)

        self._gameCoordinates: Coordinates = cast(Coordinates, None)
예제 #6
0
    def loadSound(self, bareFileName: str) -> Sound:
        """

        Args:
            bareFileName:
        """
        fqFileName: str = LocateResources.getResourcesPath(
            LocateResources.SOUND_RESOURCES_PACKAGE_NAME, bareFileName)
        sound: Sound = Sound(fqFileName)

        return sound
예제 #7
0
    def _createTextureButton(self, bareFileName: str) -> UITextureButton:

        normalFileName:  str = f'{bareFileName}.png'
        pressedFileName: str = f'{bareFileName}Pressed.png'
        hoveredFileName: str = f'{bareFileName}Hovered.png'

        fqNormalFileName:  str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=normalFileName)
        fqPressedFileName: str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=pressedFileName)
        fqHoveredFileName: str = LocateResources.getResourcesPath(LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=hoveredFileName)

        normalTexture:  Texture = load_texture(fqNormalFileName)
        pressedTexture: Texture = load_texture(fqPressedFileName)
        hoveredTexture: Texture = load_texture(fqHoveredFileName)

        button: UITextureButton = UITextureButton(texture=normalTexture,
                                                  texture_pressed=pressedTexture,
                                                  texture_hovered=hoveredTexture,
                                                  width=32, height=32)

        return button
예제 #8
0
    def _loadTorpedoExplosionTextures(self) -> TextureList:

        nColumns:  int = 3
        tileCount: int = 9
        spriteWidth:  int = 32
        spriteHeight: int = 32
        bareFileName: str = f'SuperCommanderTorpedoExplosionSpriteSheet.png'
        fqFileName:   str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=bareFileName)

        textureList: TextureList = cast(TextureList, load_spritesheet(fqFileName, spriteWidth, spriteHeight, nColumns, tileCount))

        return textureList
예제 #9
0
    def _loadWarpEffectTextures(self) -> TextureList:

        nColumns:  int = 4
        tileCount: int = 4
        spriteWidth:  int = 32
        spriteHeight: int = 32
        bareFileName: str = f'WarpEffectSpriteSheet.png'
        fqFileName:   str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=bareFileName)

        textureList: TextureList = cast(TextureList, load_spritesheet(fqFileName, spriteWidth, spriteHeight, nColumns, tileCount))

        return textureList
    def _loadTorpedoExplosionTextures(self) -> TextureList:

        textureList: TextureList = TextureList([])

        for explosionColor in KlingonTorpedoExplosionColor:

            bareFileName: str = f'KlingonTorpedoExplosion{explosionColor.value}.png'
            fqFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME, bareFileName=bareFileName)

            texture = load_texture(fqFileName)

            textureList.append(texture)

        return textureList
예제 #11
0
    def __init__(self):

        LocateResources.setupSystemLogging()

        super().__init__()

        self.logger: Logger = getLogger(PyTrekView.MADE_UP_PRETTY_MAIN_NAME)

        self.background:  Texture    = cast(Texture, None)
        self._enterprise: Enterprise = cast(Enterprise, None)
        # If you have sprite lists, you should create them here and set them to None
        # self.physicsEngine: PhysicsEngineSimple = cast(PhysicsEngineSimple, None)

        self._intelligence: Intelligence = cast(Intelligence, None)
        self._computer:     Computer     = cast(Computer, None)
        self._gameEngine:   GameEngine   = cast(GameEngine, None)
        self._gameState:    GameState    = cast(GameState, None)
        self._gameSettings: GameSettings = cast(GameSettings, None)

        self._galaxy:       Galaxy       = cast(Galaxy, None)
        self._quadrant:     Quadrant     = cast(Quadrant, None)

        self._quadrantMediator:   QuadrantMediator   = cast(QuadrantMediator, None)
        self._galaxyMediator:     GalaxyMediator     = cast(GalaxyMediator, None)
        self._enterpriseMediator: EnterpriseMediator = cast(EnterpriseMediator, None)

        self._statusConsole:    StatusConsole    = cast(StatusConsole, None)
        self._messageConsole:   MessageConsole   = cast(MessageConsole, None)

        self._eventEngine: EventEngine = cast(EventEngine, None)

        #
        # I am cheating here because I know arcade use PIL under the covers
        #
        fqFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.FONT_RESOURCES_PACKAGE_NAME,
                                                           bareFileName=FIXED_WIDTH_FONT_FILENAME)
        ImageFont.truetype(fqFileName)
예제 #12
0
    def __init__(self, viewCompleteCallback: Callable):

        super().__init__()

        self._viewCompleteCallback: Callable = viewCompleteCallback
        fqFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
                                                           bareFileName='GalaxyScanBackground.png')

        self.texture = load_texture(fqFileName)

        # Reset the viewport, necessary if we have a scrolling game, and we need
        # to reset the viewport back to the start, so we can see what we draw.
        # set_viewport(0, QUADRANT_GRID_WIDTH - 1, 0, QUADRANT_GRID_HEIGHT - 1)
        self._gameState: GameState          = GameState()
        self._mediator:  GalaxyViewMediator = GalaxyViewMediator()
예제 #13
0
    def setup(self):
        """
        Set up the game here. Call this function to restart the game.
        """

        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='QuadrantBackground.png')
        self.background = load_texture(fqFileName)

        self._gameSettings = GameSettings()
        self._gameState = GameState()
        self._gameEngine = GameEngine()
        self._intelligence = Intelligence()
        self._computer = Computer()
        self._galaxy = Galaxy()

        self._quadrantMediator = QuadrantMediator()

        self._enterprise: Enterprise = self._gameState.enterprise

        self._quadrant: Quadrant = self._galaxy.currentQuadrant

        self._quadrant.klingonCount = 0
        self._quadrant.commanderCount = 0
        self._quadrant.superCommanderCount = 0

        currentSectorCoordinates: Coordinates = self._intelligence.generateSectorCoordinates(
        )

        self._gameState.currentQuadrantCoordinates = self._galaxy.currentQuadrant.coordinates
        self._gameState.currentSectorCoordinates = currentSectorCoordinates

        self._quadrantMediator.enterQuadrant(quadrant=self._quadrant,
                                             enterprise=self._enterprise)

        self._enterpriseMediator: EnterpriseMediator = EnterpriseMediator(
            view=self, warpTravelCallback=self._noOp)

        self._statusConsole = StatusConsole(gameView=self)
        self._messageConsole = MessageConsole()

        self._makeEnemySpriteLists()

        self._makeGamePiecePalette()
        self.logger.info(f'Setup Complete')
예제 #14
0
    def _loadFirePhaserTextures(self) -> TextureList:

        nColumns: int = 3
        tileCount: int = 17
        spriteWidth: int = 231
        spriteHeight: int = 134
        bareFileName: str = f'PhaserSpriteSheet.png'
        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName=bareFileName)

        textureList: TextureList = cast(
            TextureList,
            load_spritesheet(fqFileName, spriteWidth, spriteHeight, nColumns,
                             tileCount))

        return textureList
예제 #15
0
    def setup(self):

        SettingsCommon.determineSettingsLocation()

        # self._backgroundSprite: QuadrantBackground = QuadrantBackground()

        fqFileName: str = LocateResources.getResourcesPath(resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
                                                           bareFileName='QuadrantBackground.png')
        self.background = load_texture(fqFileName)
        # Create the 'physics engine'
        # self.physicsEngine = PhysicsEngineSimple(self._enterprise, self._hardSpriteList)

        # These singletons are initialized for the first time
        self._gameSettings = GameSettings()     # Be able to read the preferences file
        self._gameState    = GameState()        # Set up the game parameters which uses the above
        self._gameEngine   = GameEngine()       # Then the engine needs to be initialized
        self._intelligence = Intelligence()
        self._computer     = Computer()
        self._galaxy       = Galaxy()           # This essentially finishes initializing most of the game

        self._messageConsole: MessageConsole = MessageConsole()
        self._eventEngine:    EventEngine    = EventEngine(self._messageConsole)

        self._statusConsole:  StatusConsole = StatusConsole(gameView=self)       # UI elements
        self._soundMachine:   SoundMachine = SoundMachine()

        self._enterprise: Enterprise = self._gameState.enterprise

        # Important mediators
        self._enterpriseMediator: EnterpriseMediator = EnterpriseMediator(view=self, warpTravelCallback=self._enterpriseHasWarped)
        self._quadrantMediator:   QuadrantMediator   = QuadrantMediator()
        self._galaxyMediator:     GalaxyMediator     = GalaxyMediator()

        self._quadrant: Quadrant = self._galaxy.currentQuadrant

        self._gameState.currentQuadrantCoordinates = self._galaxy.currentQuadrant.coordinates

        # And finally the rest of the UI elements
        self._quadrantMediator.enterQuadrant(quadrant=self._quadrant, enterprise=self._enterprise)

        self.logger.info(f'{self._enterprise=}')
        self.logger.info(f'{self._quadrant=}')
        self.logger.info(f'Setup Complete')
예제 #16
0
    def __init__(self, window: Window, completeCallback: DialogCallback):

        super().__init__(window=window)

        self._callback: DialogCallback = completeCallback
        self.logger: Logger = getLogger(__name__)
        self._uiManager: UIManager = UIManager()

        self._uiManager.enable()

        self.background_color = color.BLUE

        self._warpFactorInput: UIInputText = cast(UIInputText, None)
        self._xCoordinateInput: UIInputText = cast(UIInputText, None)
        self._yCoordinateInput: UIInputText = cast(UIInputText, None)

        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName='EmptySpace.png')

        self._inputTexture: Texture = load_texture(fqFileName)

        # Create a vertical BoxGroup to align label text items
        self._vBox: UIBoxLayout = UIBoxLayout(vertical=True)

        warpFactorInputBox: UIBoxLayout = self._createWarpFactorInputBox()
        quadrantInputBox: UIBoxLayout = self._createInputQuadrant()
        buttonBox: UIBoxLayout = self._createDialogButtons()

        self._vBox.add(
            warpFactorInputBox.with_border(
                width=1, color=color.WHITE).with_space_around(bottom=10))
        self._vBox.add(
            quadrantInputBox.with_border(
                width=1, color=color.WHITE).with_space_around(bottom=10))
        self._vBox.add(buttonBox.with_border(width=1, color=color.WHITE))

        self._uiManager.add(
            UIAnchorWidget(anchor_x="center_x",
                           anchor_y="bottom",
                           align_y=10,
                           child=self._vBox))
예제 #17
0
    def _loadPhotonTorpedoExplosions(self) -> TextureList:
        """
        Cache the torpedo explosion textures

        Returns:  The texture list
        """
        nColumns: int = 8
        tileCount: int = 21
        spriteWidth: int = 128
        spriteHeight: int = 128
        bareFileName: str = f'PhotonTorpedoExplosionSpriteSheet.png'
        fqFileName: str = LocateResources.getResourcesPath(
            resourcePackageName=LocateResources.IMAGE_RESOURCES_PACKAGE_NAME,
            bareFileName=bareFileName)

        explosions: TextureList = cast(
            TextureList,
            load_spritesheet(fqFileName, spriteWidth, spriteHeight, nColumns,
                             tileCount))

        return explosions