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
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)
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
def main(): """ Main method """ LocateResources.setupSystemLogging() SettingsCommon.determineSettingsLocation() window: TestSpriteSheet = TestSpriteSheet(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_TITLE) window.setup() arcadeRun()
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)
def loadSound(self, bareFileName: str) -> Sound: """ Args: bareFileName: """ fqFileName: str = LocateResources.getResourcesPath( LocateResources.SOUND_RESOURCES_PACKAGE_NAME, bareFileName) sound: Sound = Sound(fqFileName) return sound
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
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
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
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)
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()
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')
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
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')
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))
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