def drawingMenu(gamespace, maps, mainMenu, drawingMenu, undolist): ''' Drawing menu ''' viewscreen = gamespace.viewscreen displaySurf = viewscreen.displaySurf #initial animation animateMenuForward(displaySurf, drawingMenu) global width width = WIDTH_LOWER_LIMIT.copy() while True: for event in pygame.event.get(): quitCheck(event) if escapeCheck(event): mainMenu.buttonUnclicked('Draw') animateMenuBackward(displaySurf, mainMenu, drawingMenu) shapeWidthReset(drawingMenu) return elif (event.type == MOUSEMOTION): if viewscreen.viewscreenRect.collidepoint(event.pos): vs.viewscreenHover(event.pos, gamespace) elif (event.type == MOUSEBUTTONDOWN): if viewscreen.viewscreenRect.collidepoint(event.pos): vs.viewscreenHandler(event, gamespace, maps, undolist) else: drawingMenuSubFunction(event, gamespace, maps, mainMenu, drawingMenu, undolist)
def characterCreator(gamespace, maps, mainMenu, characterCreatorWithColor, undoList): ''' Character Creator ''' characterCreator, colorMenu = characterCreatorWithColor viewscreen = gamespace.viewscreen displaySurf = viewscreen.displaySurf global characterSize, newCharacterName characterSize = 1 newCharacterName = None exited = False #initial animation animateMenuForward(displaySurf, characterCreatorWithColor) while True: for event in pygame.event.get(): quitCheck(event) # If 'Escape' is pressed close the menu and reset everything if escapeCheck(event) or exited: mainMenu.buttonUnclicked('CharacterCreator') animateMenuBackward(displaySurf, mainMenu, characterCreatorWithColor) characterCreator.imageList["Size"].update(1) characterCreator.buttonList['CharacterName'].reset() pygame.draw.rect( characterCreator.surface, characterCreator.color, characterCreator.buttonList['CharacterIcon'].rect) return elif (event.type == MOUSEMOTION): if viewscreen.viewscreenRect.collidepoint(event.pos): vs.viewscreenHover(event.pos, gamespace) elif event.type == MOUSEBUTTONDOWN: if viewscreen.viewscreenRect.collidepoint(event.pos): vs.viewscreenHandler(event, gamespace, maps, undoList) elif characterCreator.getButtonCollision(event.pos): exited = characterMenuHandler(gamespace, characterCreator, event.pos) elif colorMenu.getButtonCollision(event.pos): gamespace.characterColor = colorMenu.buttonList[ colorMenu.getButtonCollision(event.pos)].color characterCreator.imageList['ColorImage'].update( gamespace.characterColor, True)
def distanceMeasure(gamespace, mainMenu): '''Tool to get distance in non-euclidean space''' distanceToolColor = RED map = gamespace.map map_Initial = map.mapSurface.copy() clicked = False while True: for event in pygame.event.get(): quitCheck(event) if event.type == MOUSEBUTTONDOWN: startpos = map.mapCoord(event.pos) startBox = map.getBoxAtCoord(event.pos) clicked = True elif event.type == MOUSEMOTION and clicked: endpos = map.mapCoord(event.pos) endBox = map.getBoxAtCoord(event.pos) dist = nonEuclideanDistance(startBox, endBox) distBox = FONT.render(str(dist), 1, BLACK) distBoxRect = distBox.get_rect(topleft = map.mapCoord(event.pos)) distBoxRect.top += 10 distBoxRect.left -= 10 map = gamespace.map map.mapSurface = map_Initial.copy() map.addCircle(distanceToolColor, startpos, 3) map.addLine(distanceToolColor, startpos, endpos) map.addCircle(distanceToolColor, endpos, 3) map.mapSurface.blit(distBox, distBoxRect) gamespace.drawViewscreen() elif event.type == MOUSEBUTTONUP and clicked: map.mapSurface = map_Initial.copy() gamespace.drawViewscreen() mainMenu.buttonUnclicked('Distance') return
def loadGame(gamespace, maps, mainMenu, loadMenu): loadMenuSuper, loadMenuSub = loadMenu displaySurf = gamespace.viewscreen.displaySurf Exited = False #we want a small dict just for keeping track of a few variables that we'll need to #swap back and fourth with the subfunction loadMenuDict = { "SelectedGame": False, "PressedButton": None, "EventPosition": None, "LoadGameOffset": 0, "LoadGameOffsetLimit": 0 } loadMenuSubCreator(loadMenuSub, loadMenuDict) loadMenuSubDraw(loadMenu, displaySurf, loadMenuDict) while True: for event in pygame.event.get(): quitCheck(event) if escapeCheck(event) or Exited == True: mainMenu.buttonUnclicked('Load') gamespace.drawViewscreen() return elif (event.type == MOUSEBUTTONDOWN): if loadMenuSuper.getButtonCollision(event.pos): loadMenuDict["PressedButton"] = loadMenuSuper.buttonList[ loadMenuSuper.getButtonCollision(event.pos)].name loadMenuDict["EventPosition"] = event.pos Exited = loadMenuHandler(displaySurf, maps, loadMenu, loadMenuDict) mainMenu.buttonUnclicked('Load') gamespace.drawViewscreen()
def saveGame(gamespace, maps, mainMenu, saveMenu): displaySurf = gamespace.viewscreen.displaySurf Exited = False pygame.display.update(displaySurf.blit(saveMenu.surface, saveMenu.rect)) while True: for event in pygame.event.get(): quitCheck(event) if escapeCheck(event) or Exited == True: mainMenu.buttonUnclicked('Save') gamespace.drawViewscreen() saveMenu.buttonList['SaveName'].reset() return elif (event.type == MOUSEBUTTONDOWN): if saveMenu.getButtonCollision(event.pos): pressedButton = saveMenu.buttonList[ saveMenu.getButtonCollision(event.pos)].name Exited = saveMenuHandler(gamespace, maps, saveMenu, pressedButton)
def moveCharacter(name, mousePosition, gamespace, newCharacter=False): fpsClock = pygame.time.Clock() (xpos1, ypos1) = mousePosition characterSpace = gamespace.characterSpace displaySurf = gamespace.viewscreen.displaySurf character = characterSpace.list[name] if newCharacter: characterRect = character.rects[1] else: characterRect = characterSpace.viewscreenCoord(character.rects[1]) initialCharacterRect = characterRect.copy() #if the character doesn't move characterImage = character.images[1] #A current character (newCharacter = False) needs to be taken off the surface characterSpace.clearFromField(name) gamespace.drawViewscreen() displaySurfCopy = displaySurf.copy() moved = False #boolean stating if the character was successfully moved to a new location newCharNotMoved = False while True: for event in pygame.event.get(): quitCheck(event) if (event.type == MOUSEMOTION): #blank out the Character's last location pygame.display.update( displaySurf.blit(displaySurfCopy, characterRect, characterRect)) xpos2, ypos2 = event.pos xchange, ychange = xpos2 - xpos1, ypos2 - ypos1 characterRect.left += xchange characterRect.top += ychange pygame.display.update( displaySurf.blit(characterImage, characterRect)) xpos1, ypos1 = xpos2, ypos2 elif event.type == MOUSEBUTTONUP: #if the character is dropped off the viewscreen, #remove from characterSpace and take off map if event.pos[0] >= gamespace.viewscreen.width: if not newCharacter: characterSpace.list.pop(name) else: newCharNotMoved = True pygame.display.update( displaySurf.blit(displaySurfCopy, characterRect, characterRect)) #else, determine if the location is occupied #if not move character to that location else: if not characterSpace.occupied( characterSpace.mapCoord(characterRect)): character.relocate( characterSpace.mapCoord(characterRect).topleft) moved = True #moved or not a current character should be readded to the surface #if the character is new and the space is occupied (moved = False), #then we don't want them to be added to the surface if not newCharacter or moved: characterSpace.addToField(name) elif newCharacter and not moved: newCharNotMoved = True #if the character was not moved we need to make sure it returns #to the correct spot if newCharNotMoved: character.rects[1] = initialCharacterRect.copy() gamespace.drawViewscreen() return moved fpsClock.tick(45)