Beispiel #1
0
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)
Beispiel #3
0
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
Beispiel #4
0
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()
Beispiel #5
0
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)
Beispiel #6
0
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)