Exemple #1
0
    def __init__(self, size):
        Template.__init__(self, size)
        self.size = size
        self.block = 64
        self.dt = 0.
        self.map1 = Map(self.size, (40, 40), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.map2 = Map(self.size, (40, 40), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.menu = Map(self.size, (2, 14), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.menu_list = []
        self.palette = self.setup_menu()
        self.palette.xy = [250, 0]
        self.clip = pg.Rect(0, 0, self.size[0], self.size[1])
        self.c_pos = self.clip.topleft
        self.current_tile = None
        self.show_foreground = -1
        self.right_m_button = False
        self.right_m_pos = None
        self.m_pos = None
        self.fill = False
        self.m_select_rect = pg.Rect(1, 1, 1, 1)
        self.button1 = Button((120, 20), (129, 1), "Menu")
        self.drop_menu = Menu((120, 160), (129, 21))
        self.drop_menu.add_buttons(4, ["Save", "Load", "Palette", "Info"])
        self.drop_menu.set_bg_color(CONCRETE)
        self.load_menu = self.setup_loadmenu()
        self.floating_text = FloatingText("no text", self.size)
        self.setup()

        self.selected_map = self.map1
Exemple #2
0
    def init_variables(self):
        # Переменная времени
        self.clock = pygame.time.Clock()

        # Создание экземпляров классов
        self.menu = Menu(self.screen)
        self.script = Script(self.screen)
Exemple #3
0
 def setup_loadmenu(self):
     folder = Path("./save")
     filelist = [f.basename() for f in folder.files("*.sav")]
     amount = len(filelist)
     menu = Menu((240, amount*21), (250, 21))
     menu.add_buttons(amount, filelist)
     menu.set_bg_color(WHITE)
     return menu
Exemple #4
0
 def __init__(self, size):
     Template.__init__(self, size)
     self.name = "World Editor 1.1"
     self.size = size
     self.block = 32
     self.dt = 0.
     self.empty_tile = pg.image.load("./tiles/Empty_tile_32p.png").convert_alpha()
     self.map_bg = Map("Background", self, self.size, (120,80), self.block, self.empty_tile)
     self.map_mg = Map("Middleground", self, self.size, (120,80), self.block, self.empty_tile)
     self.map_fg = Map("Foreground", self, self.size, (120,80), self.block, self.empty_tile)
     self.poi_map = Map("POI Map", self, self.size, (120,80), self.block, self.empty_tile)
     self.poi_menu = Map("POI Menu", self, self.size, (4,1), self.block, self.empty_tile)
     self.menus = [Map("Menu", self, self.size, (2,14), self.block, self.empty_tile)]
     self.pal_menu = Menu((128, 40), (0,21))
     self.pal_menu.add_buttons(2, ["New", "Pal-1"])
     self.pal_menu.set_bg_color(SUBBUTTON_COLOR)
     self.menu = self.menus[0]
     self.menu.xy[1] += 20
     self.men_list = []
     self.sprite_map = self.setup_spritemap()
     self.sprite_map.xy = [250,0]
     self.clip = pg.Rect(0,0, self.size[0],self.size[1])
     self.c_pos = self.clip.topleft
     self.show_full_map = False
     self.show_poi = False
     self.full_map = None
     self.current_tile = None
     self.current_menu = None
     self.ground_state = None
     self.right_m_pos = None
     self.right_m_button = False
     self.fill = False
     self.m_pos = None
     self.m_select_rect = pg.Rect(1,1,1,1)
     self.menu_button = Button((120, 20), (129,1), "Menu")
     self.pal_button = Button((128,20), (0,0), "Palette")
     self.drop_menu = Menu((120, 160), (129, 21))
     self.drop_menu.add_buttons(5, ["Save", "Load", "Sprites", "See Map", "Info"])
     self.drop_menu.set_bg_color(SUBBUTTON_COLOR)
     self.load_menu = self.setup_loadmenu()
     self.floating_text = FloatingText("no text", self.size)
     self.info_panel = Panel((self.size[0] - self.size[0]/3, self.size[1] - self.size[1]/3), (self.size[0]/6, self.size[1]/6))
     self.info_panel.setup_text([self.name, "Made by Aurelio Aguirre", "", "Use WASD to move around.", "Use E to toggle the Foreground.", "Use R to toggle the Middleground.", "Use Q to toggle the Point of Interest map."])
     self.setup()
     self.setup_poi()
     self.selected_map = self.map_bg
     self.alternative = ALTERNATIVE_MODE
     self.enable_alternative_mode()
Exemple #5
0
 def __init__(self):
     Events.__init__(self)
     self.gravity = Vector(0.0, 0.1)
     self.init_graphics()
     self.init_sound()
     Menu.init_menus(self)
     self.current_menu = "welcome_menu"
     self.camera = 0
     self.clock = pygame.time.Clock()
     self.time = pygame.time
     self.last_time = 0
     self.take_screenshot = False
     self.ingame = False
     SoundEffect.play_music("menu.mp3")
     self.next_step = self.menu_handler
     self.load_background("welcome")
Exemple #6
0
 def __init__(self):
     Events.__init__(self)
     self.gravity = Vector(0.0, 0.1)
     self.init_graphics()
     self.init_sound()
     Menu.init_menus(self)
     self.current_menu = "welcome_menu"
     self.camera = 0
     self.clock = pygame.time.Clock()
     self.time = pygame.time
     self.last_time = 0
     self.take_screenshot = False
     self.ingame = False
     SoundEffect.play_music("menu.mp3")
     self.next_step = self.menu_handler
     self.load_background("welcome")
Exemple #7
0
    def __init__(self, size):
        Template.__init__(self, size)
        self.size = size
        self.block = 64
        self.dt = 0.
        self.map1 = Map(self.size, (40,40), self.block, "./tiles/Empty_tile_64p.png")
        self.map2 = Map(self.size, (40,40), self.block, "./tiles/Empty_tile_64p.png")
        self.menu = Map(self.size, (2,14), self.block, "./tiles/Empty_tile_64p.png")
        self.menu_list = []
        self.palette = self.setup_menu()
        self.palette.xy = [250,0]
        self.clip = pg.Rect(0,0, self.size[0],self.size[1])
        self.c_pos = self.clip.topleft
        self.current_tile = None
        self.show_foreground = -1
        self.right_m_button = False
        self.right_m_pos = None
        self.m_pos = None
        self.fill = False
        self.m_select_rect = pg.Rect(1,1,1,1)
        self.button1 = Button((120, 20), (129,1), "Menu")
        self.drop_menu = Menu((120, 160), (129, 21))
        self.drop_menu.add_buttons(4, ["Save", "Load", "Palette", "Info"])
        self.drop_menu.set_bg_color(CONCRETE)
        self.load_menu = self.setup_loadmenu()
        self.floating_text = FloatingText("no text", self.size)
        self.setup()

        self.selected_map = self.map1
Exemple #8
0
 def setup_loadmenu(self):
     folder = Path("./save")
     filelist = [f for f in folder.files("*.sav")]
     amount = len(filelist)
     menu = Menu((240, amount * 21), (250, 21))
     menu.add_buttons(amount, filelist)
     menu.set_bg_color(CONCRETE)
     return menu
Exemple #9
0
    def __init__(self):
        super(Window, self).__init__()
        self.setWindowTitle("PyTextSpeech")
        self.resize(400, 400)
        self.parent = ""

        self.volume = 0
        self.rate = 0
        self.engine = QSpeak()
        self.doc = Document()
        self.mn = Menu()
        self.text_to_read = QTextEdit()
        self.vlayout = QVBoxLayout()
        self.sliders = SliderGrop()

        self.cmbgrop = ComboGrop()

        self.lbtn = Boton()
        self.doc.parent = self
        self.lbtn.btnSpeak.clicked.connect(self.Speak)
        self.lbtn.btnPause.clicked.connect(self.Pause)
        self.lbtn.btnResume.clicked.connect(self.Resume)
        self.lbtn.btnStop.clicked.connect(self.Stop)

        self.sliders.slider_volume.valueChanged.connect(self.SliderVolume)
        self.sliders.slider_rate.valueChanged.connect(self.SliderRate)

        self.cmbgrop.cmbVoice.currentTextChanged.connect(self.Voice)
        self.cmbgrop.cmbLanguage.currentTextChanged.connect(self.Locale)

        self.mn.Pdf.triggered.connect(self.Abrir_Pdf)
        self.mn.Texto.triggered.connect(self.Abrir_Text)

        self.LoadLanguage()
        self.LoadVoices()

        self.cmbgrop.cmbVoice.setCurrentIndex(9)
        self.cmbgrop.cmbLanguage.setCurrentIndex(18)

        self.vlayout.addWidget(self.mn)
        self.vlayout.addWidget(self.text_to_read)

        self.vlayout.addLayout(self.sliders)
        self.vlayout.addLayout(self.cmbgrop)
        self.vlayout.addLayout(self.lbtn)

        self.setLayout(self.vlayout)
Exemple #10
0
 def in_game_menu_loop(self):
     m = Menu(self.engine)
     m.menu_pause()
     while True:
         s = m.update()
         m.render()
         self.engine.render()
         if s['clicked'] is not None: break
     if s['clicked'] == 'Options':
         pass
     else:
         return s['clicked']
Exemple #11
0
    def menu_loop(self):
        m = Menu(self.engine)
        m.menu_start()
        while True:
            s = m.update()
            m.render()
            self.engine.render()
            if s['clicked'] is not None:
                break
        if s['clicked'] in ['Campaign', 'Skirmish']:
            game = Game('Test 1', FutureWar)
            worldmap = Map.from_csv("World map", "textures", MAP_PATH + r"\worldmap.csv")
            #worldmap = Map.from_csv("World map", "textures", MAP_PATH + r"\smallmap.csv")
            print("worldmap width = ", worldmap.width)
            print("worldmap height = ", worldmap.height)
            world = game.set_world(worldmap)

            player = game.create_player("Bob", "RedScum", Colors.YELLOW, 100, 100, 0, 0)
            game.create_player("Hicks", "BlueAngels", Colors.SKY_BLUE, 0, 0, 0, 0)
            game.create_player("Neutral", "BlueAngels", Colors.GREY, 20, 20, 0, 0)
            
            game.create_unit("Bob", "Soldier", 1, 1, 1.0)
            game.create_unit("Bob", "Elite", 3, 3, 0.5)
            game.create_unit("Bob", "Heavy", 2, 5, 0.5)
            game.create_unit("Neutral", "Defender", 20, 20, 1.0)
            
            #plant = Building(Hicks, x=4, y=4, profile=FutureWar.get_profile("barracks"), constructed=1, plife=0.50)
            #s1 = Unit(Hicks, x=9, y=9, profile=FutureWar.get_profile("soldier"), plife=0.50)
            #writeln(f"plant life = {plant.life}")
            
            self.camera = Camera(800, 600, world, player, self.engine)
            self.handler = InputHandler(self.camera, auto_scroll_zone=-1)
            self.audio = AudioHandler(AUDIO_PATH)
            #self.audio.play("ds.ogg")
            r = self.game_loop(game)
            return r
        elif s['clicked'] == 'Options':
            pass
        elif s['clicked'] == 'Quit':
            return False
Exemple #12
0
 def run(self):  # 2. Implement run()
     get_all_memes(ALL_MEMES_FILE, ALL_MEMES)
     app = QApplication(sys.argv)
     ex = Menu(ALL_MEMES, IMAGE_FILE, DRIVER, CREDENTIALS)
     return self.app.exec_()  # 3. End run() with this line
Exemple #13
0
class Main(Template):
    def __init__(self, size):
        Template.__init__(self, size)
        self.name = "World Editor 1.1"
        self.size = size
        self.block = 32
        self.dt = 0.
        self.empty_tile = pg.image.load("./tiles/Empty_tile_32p.png").convert_alpha()
        self.map_bg = Map("Background", self, self.size, (120,80), self.block, self.empty_tile)
        self.map_mg = Map("Middleground", self, self.size, (120,80), self.block, self.empty_tile)
        self.map_fg = Map("Foreground", self, self.size, (120,80), self.block, self.empty_tile)
        self.poi_map = Map("POI Map", self, self.size, (120,80), self.block, self.empty_tile)
        self.poi_menu = Map("POI Menu", self, self.size, (4,1), self.block, self.empty_tile)
        self.menus = [Map("Menu", self, self.size, (2,14), self.block, self.empty_tile)]
        self.pal_menu = Menu((128, 40), (0,21))
        self.pal_menu.add_buttons(2, ["New", "Pal-1"])
        self.pal_menu.set_bg_color(SUBBUTTON_COLOR)
        self.menu = self.menus[0]
        self.menu.xy[1] += 20
        self.men_list = []
        self.sprite_map = self.setup_spritemap()
        self.sprite_map.xy = [250,0]
        self.clip = pg.Rect(0,0, self.size[0],self.size[1])
        self.c_pos = self.clip.topleft
        self.show_full_map = False
        self.show_poi = False
        self.full_map = None
        self.current_tile = None
        self.current_menu = None
        self.ground_state = None
        self.right_m_pos = None
        self.right_m_button = False
        self.fill = False
        self.m_pos = None
        self.m_select_rect = pg.Rect(1,1,1,1)
        self.menu_button = Button((120, 20), (129,1), "Menu")
        self.pal_button = Button((128,20), (0,0), "Palette")
        self.drop_menu = Menu((120, 160), (129, 21))
        self.drop_menu.add_buttons(5, ["Save", "Load", "Sprites", "See Map", "Info"])
        self.drop_menu.set_bg_color(SUBBUTTON_COLOR)
        self.load_menu = self.setup_loadmenu()
        self.floating_text = FloatingText("no text", self.size)
        self.info_panel = Panel((self.size[0] - self.size[0]/3, self.size[1] - self.size[1]/3), (self.size[0]/6, self.size[1]/6))
        self.info_panel.setup_text([self.name, "Made by Aurelio Aguirre", "", "Use WASD to move around.", "Use E to toggle the Foreground.", "Use R to toggle the Middleground.", "Use Q to toggle the Point of Interest map."])
        self.setup()
        self.setup_poi()
        self.selected_map = self.map_bg
        self.alternative = ALTERNATIVE_MODE
        self.enable_alternative_mode()

    def update(self, dt):
        self.dt = dt
        self.map_bg.update(dt)
        if not self.alternative:
            self.map_fg.update(dt)
            self.map_mg.update(dt)
            self.sprite_map.update(dt)
            self.menu.update(dt)
        self.poi_map.update(dt)
        self.poi_menu.update(dt)
        self.floating_text.update(dt)
        if self.drop_menu.buttons[0].active:
            self.savemap()
            self.drop_menu.buttons[0].active = False
        if self.drop_menu.buttons[2].active:
            self.selected_map = self.sprite_map
        else:
            self.selected_map = self.map_bg
        if not self.alternative:
            if self.pal_button.active:
                if self.pal_menu.clickinfo != None:
                    if self.pal_menu.clickinfo == "New":
                        self.new_palette()
                    else:
                        self.switch_palette(text=self.pal_menu.clickinfo)
                    self.pal_menu.clickinfo = None
        if self.map_bg.clipped:
            self.map_fg.map.set_clip()
            self.map_mg.map.set_clip()
            self.poi_map.map.set_clip()
            self.map_bg.clipped = False
        if self.c_pos != self.clip.topleft:
            self.c_pos = (self.c_pos[0] - self.map_bg.xy[0], self.c_pos[1] - self.map_bg.xy[1])
            self.clip.topleft = self.c_pos
        self.menu_button.update(self.dt)
        self.mouse_select()

    def draw(self):
        self.screen.fill(BLACK)

        # MAPs
        # Background
        self.map_bg.draw(self.screen, self.clip)
        if not self.alternative:
            # Middleground
            if self.ground_state == "MG":
                self.map_mg.xy = self.map_bg.xy
                self.map_mg.draw(self.screen, self.clip)

            # Foreground
            if self.ground_state == "FG":
                self.map_fg.xy = self.map_bg.xy
                self.map_fg.draw(self.screen, self.clip)

        # POI Map
        if self.show_poi:
            self.poi_map.xy = self.map_bg.xy
            self.poi_map.draw(self.screen, self.clip)

        # GUI
        if not self.alternative:
            self.menu.draw(self.screen)
        if self.show_poi:
            self.poi_menu.draw(self.screen)
        self.menu_button.draw(self.screen)
        if not self.alternative:
            self.pal_button.draw(self.screen)
        if self.menu_button.active:
            self.drop_menu.draw(self.screen)
        if self.pal_button.active:
            self.pal_menu.draw(self.screen)
        if self.drop_menu.buttons[1].active:
            self.load_menu.draw(self.screen)
        if self.drop_menu.buttons[2].active:
            self.sprite_map.draw(self.screen)
        if self.right_m_button:
            screen_rect = self.m_select_rect.copy()
            screen_rect.x += self.map_bg.xy[0]
            screen_rect.y += self.map_bg.xy[1]
            pg.draw.rect(self.screen, WHITE, screen_rect, 1)
        if self.show_full_map:
            if self.full_map:
                self.screen.blit(self.full_map, (0,0))
        self.info_panel.draw(self.screen)
        self.floating_text.draw(self.screen)

########################## Setup methods #######################################

    def enable_alternative_mode(self):
        if self.alternative:
            bgimage = pg.image.load("./img/CI Main 128.png").convert_alpha()
            self.map_bg = Map("Static Image", self, self.size, (120,80), 128, bgimage)
            self.map_bg.setup(BG_COLOR, alt=True)
            self.alternative = True

    def setup_loadmenu(self):
        folder = Path("./save")
        filelist = [f.basename() for f in folder.files("*.sav")]
        amount = len(filelist)
        menu = Menu((240, amount*21), (250, 21))
        menu.add_buttons(amount, filelist)
        menu.set_bg_color(WHITE)
        return menu

    def setup(self):
        self.map_bg.setup(BG_COLOR)
        self.map_fg.setup(FG_COLOR, 200)
        self.map_mg.setup(MG_COLOR, 200)
        self.menu.setup(PAL_COLOR)
        self.poi_map.setup(POI_MAP, alpha=150)
        self.poi_menu.setup(POI_MENU)

    def setup_poi(self):
        wall = pg.image.load("./tiles/Wall32.png").convert_alpha()
        door = pg.image.load("./tiles/Door32.png").convert_alpha()
        poi = pg.image.load("./tiles/POI32.png").convert_alpha()
        delete = pg.image.load("./tiles/Eliminate32.png").convert_alpha()
        self.poi_dict = OrderedDict((("Poi Wall", wall), ("Poi Door", door), ("Poi Symbol", poi), ("Delete", delete)))
        p = [i for i in self.poi_dict.keys()]
        for num, tile in enumerate(self.poi_menu.group):
            tile.image = self.poi_dict[p[num]]
            tile.rect = tile.image.get_rect()
            tile.rect.topleft = ((self.block*num), 1)
            tile.filename = p[num]
            tile.dirty = 1
        xplace = self.size[0] - self.block*4
        self.poi_menu.xy = [xplace, 1]

    def setup_spritemap(self):
        sheet = SpriteSheet("img/magecity_64p.png", 64, (0,0), (8,44))
        self.men_list = sum(sheet.image_list, [])
        length = len(self.men_list)
        size = (10, int(length/10))
        menu = Map("Palette", self, self.size, size, self.block, self.empty_tile)
        menu.setup(WHITE)
        for i, tile in enumerate(menu.group):
            tile.filename = "{}".format(i)
            tile.image = self.men_list[i]
            if i+1 >= length:
                break
        return menu

#################### Key and Mouse Methods #####################################

    def key_down(self, key):
        if key == K_ESCAPE:
            print("Quitting...")
            self.game_on == False
            self.end_game()

        if key == K_e:
            if self.ground_state == None or self.ground_state == "MG":
                self.ground_state = "FG"
            else:
                self.ground_state = None

        if key == K_r:
            if self.ground_state == None or self.ground_state == "FG":
                self.ground_state = "MG"
            else:
                self.ground_state = None

        if key == K_q:
            self.show_poi = not self.show_poi
            self.current_tile = None

        if key in (K_w, K_UP):
            self.selected_map.move["up"] = True
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = True
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = True
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = True

    def key_up(self, key):
        if key in (K_w, K_UP):
            self.selected_map.move["up"] = False
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = False
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = False
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = False

    def mouse_down(self, button, pos):
        not_menu = True
        if button == 1:
            # First we check for the unique states, Info Panel and Full Map.
            if not self.info_panel.display:
                if not self.show_full_map:
                    # Now we check for menu buttons being clicked, and switch our
                    # not_menu switch if they are. From here the rest is handled by update.
                    if self.menu_button.click(pos):
                        not_menu = False
                    elif self.pal_button.click(pos):
                        not_menu = False
                    if self.menu_button.active:
                        if self.drop_menu.click(pos):
                            not_menu = False
                    if self.pal_button.active:
                        if self.pal_menu.click(pos):
                            not_menu = False
                    # Assuming we are in our main menu we check for the the buttons being clicked.
                    # This part is allowed to happen WHILE maps are also being manipulated. (not_menu is not switched)
                    if self.drop_menu.buttons[1].active:
                        if self.load_menu.click(pos):
                            self.loadmap(self.load_menu.clickinfo)
                    elif self.drop_menu.buttons[3].active:
                        self.show_map()
                        self.drop_menu.buttons[3].active = False
                    elif self.drop_menu.buttons[4].active:
                        self.info_panel.display_panel()
                        self.drop_menu.buttons[4].active = False
                    # Here we look for our Maps. Basically we are moving a tile from one map to another.
                    # We just need to pick the right one, and they should all overwrite each other.
                    # In other words, only one map is active at a time.
                    if not_menu:
                        if self.drop_menu.buttons[2].active: # Tiles are showing.
                            self.find_tile(pos, self.sprite_map, self.menu)
                        elif self.show_poi: # POI Map is up.
                            self.find_tile(pos, self.poi_menu, self.poi_map)
                        elif self.ground_state == "FG": # we are on the Foreground map.
                            self.find_tile(pos, self.menu, self.map_fg)
                        elif self.ground_state == "MG": # We are on the middleground map.
                            self.find_tile(pos, self.menu, self.map_mg)
                        else: # We default to the Background map.
                            self.find_tile(pos, self.menu, self.map_bg)
                else:
                    # While the full map is up, any left mouse click will deactivate it.
                    self.show_full_map = False
            else:
                self.info_panel.click(pos)

        if button == 3:
            if not self.show_full_map:
                self.right_m_button = True
                self.right_m_pos = pos
            else:
                self.take_image(self.full_map)

    def mouse_up(self, button, pos):
        if button == 3:
            self.right_m_button = False
            self.right_m_pos = pos
            new_rect = self._invert_rect(self.m_select_rect)

            if self.show_poi:
                self.group_select(new_rect, self.poi_map.group)
            elif self.ground_state == "FG":
                self.group_select(new_rect, self.map_fg.group)
            elif self.ground_state == "MG":
                self.group_select(new_rect, self.map_mg.group)
            else:
                self.group_select(new_rect, self.map_bg.group)

    def mouse_motion(self, button, pos, rel):
        self.m_pos = pos

    def mouse_select(self):
        if self.right_m_button:
            old_pos = (self.right_m_pos[0] - self.map_bg.xy[0], self.right_m_pos[1] - self.map_bg.xy[1])
            new_pos = (self.m_pos[0] - self.map_bg.xy[0], self.m_pos[1] - self.map_bg.xy[1])
            self.m_select_rect = pg.Rect(1,1,1,1)
            xoff, yoff = new_pos[0] - old_pos[0], new_pos[1] - old_pos[1]
            self.m_select_rect.inflate_ip(xoff, yoff)
            self.m_select_rect.topleft = old_pos

    def _invert_rect(self, rect):
            new_rect = pg.Rect(1,1,1,1)
            new_rect.size = rect.size
            if rect.width < 0:
                new_rect.width *= -1
            if rect.height < 0:
                new_rect.height *= -1
            if rect.left > rect.right:
                new_rect.left = rect.right
            else:
                new_rect.left = rect.left
            if rect.top > rect.bottom:
                new_rect.top = rect.bottom
            else:
                new_rect.top = rect.top
            return new_rect

###################### Button Activated Methods ################################

    def group_select(self, rect, group):
        for sprite in group:
            if sprite.rect.colliderect(rect):
                self.change_tile(sprite)

    def find_tile(self, pos, menu, bg_map):
        found = False
        for tile in menu.group:
            map_pos = (pos[0] - menu.xy[0], pos[1] - menu.xy[1])
            if tile.rect.collidepoint(map_pos):
                found = True
                menu.fill = True
                menu.select_rect(tile.rect)
                menu.draw_border = True
                self.current_tile = tile
                self.current_menu = menu.name
            if found:
                break
        if not found:
            for tile in bg_map.group:
                map_pos = (pos[0] - bg_map.xy[0], pos[1] - bg_map.xy[1])
                if tile.rect.collidepoint(map_pos):
                    self.change_tile(tile)
                    bg_map.clear_map()
        return found

    def change_tile(self, tile):
        if self.current_tile != None:
            if self.current_tile.filename != "Delete":
                tile.filename = self.current_tile.filename
                tile.image = self.current_tile.image
                tile.dirty = 1
            else:
                print("Removing Tile!")
                tile.filename = "Empty_tile"
                tile.image = self.empty_tile
                tile.dirty = 1

    def new_palette(self):
        self.menus.append(Map("Menu", self, self.size, (2,14), self.block, self.empty_tile))
        self.menus[-1].setup(WHITE)

        size = self.pal_menu.size
        self.pal_menu.change_size((size[0], size[1]+20))
        num = len(self.menus)
        self.pal_menu.add_buttons(1, ["Pal-{}".format(num)])
        self.switch_palette(ind=-1)

    def switch_palette(self, ind=None, text=None):
        if ind:
            self.menu = self.menus[ind]
        elif text:
            self.menu = self.menus[int(text[-1])-1]

# <-------This Needs adjustment, needs to differentiate between Layers-------->
    def show_map(self):
        full_map = pg.Surface((40*64, 40*64))
        for tile in self.map_bg.group:
            full_map.blit(tile.image, tile.rect.topleft)
        for tile in self.map_mg.group:
            if tile.filename != "Empty_tile":
                full_map.blit(tile.image, tile.rect.topleft)
        for tile in self.map_fg.group:
            if tile.filename != "Empty_tile":
                full_map.blit(tile.image, tile.rect.topleft)
        self.full_map = pg.transform.smoothscale(full_map, self.size)
        self.show_full_map = True

    def take_image(self, surf):
        folder = Path("./image")
        amount = len(folder.files("*.jpg"))
        filename = "{}{}{}{}".format(folder, "/map", amount, ".jpg")
        pg.image.save(surf, filename)

    def savemap(self):
        if not self.alternative:
            saving = SaveMap()
            saving.add_map(self.map_bg)
            saving.add_map(self.map_mg)
            saving.add_map(self.map_fg)
            saving.add_map(self.poi_map)
            saving.write_to_file()
        else:
            saving = SaveMap()
            saving.add_map(self.poi_map)
            saving.write_to_file()

    def loadmap(self, filename):
        load = LoadMap(filename)
        maplist = []
        for m in load.maps.values():
            a_map = Map(m["info"]["name"], self, m["info"]["size"], m["info"]["grid"], m["info"]["block"], self.empty_tile)
            if m["info"]["name"] == "Foreground" or m["info"]["name"] == "Middleground":
                a_map.setup(m["info"]["color"], 200)
            elif m["info"]["name"] == "POI Map":
                a_map.setup(m["info"]["color"], 150)
            else:
                a_map.setup(m["info"]["color"])
            for t in a_map.group:
                for i in m["tiles"]:
                    if list(t.rect.topleft) in m["tiles"][i]:
                        t.filename = i
                        if i[0] == "P":
                            t.image = self.poi_dict[i]
                            t.dirty = 1
                        else:
                            t.image = self.men_list[int(i)]
                            t.dirty = 1
            maplist.append(a_map)
        for j in maplist:
            if j.name == "Background":
                self.map_bg = j
            if j.name == "Middleground":
                self.map_mg = j
            if j.name == "Foreground":
                self.map_fg = j
            if j.name == "POI Map":
                self.poi_map = j
        print("Loading from file...")
Exemple #14
0
from gui import Menu, OneFileSelect, FolderSelect, OutFolderSelect, Input

from features.pdf.merge_pdf import process as merge_pdf
from features.pdf.split_pdf import split_pdf as split_pdf

pdf_menu = Menu.add_cascade("PDF")

pdf_menu.add_command(
    name="合成PDF",
    description="合成指定文件夹中的所有PDF文件",
    components=[
        FolderSelect(button_text="PDF文件夹"),
        OutFolderSelect()
    ],
    run_func=merge_pdf
)

pdf_menu.add_command(
    name="拆分PDF",
    description="根据指定规则拆分PDF文件\n如:1,2-4,5 将文件拆分为3个文件\n默认一个页面拆分为单一文件",
    components=[
        Input(button_text="拆分规则", default_value=""),
        OneFileSelect(button_text="PDF文件", file_types="pdf"),
        OutFolderSelect(),
    ],
    run_func=split_pdf
)
Exemple #15
0
class Main(Template):
    def __init__(self, size):
        Template.__init__(self, size)
        self.size = size
        self.block = 64
        self.dt = 0.
        self.map1 = Map(self.size, (40, 40), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.map2 = Map(self.size, (40, 40), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.menu = Map(self.size, (2, 14), self.block,
                        "./tiles/Empty_tile_64p.png")
        self.menu_list = []
        self.palette = self.setup_menu()
        self.palette.xy = [250, 0]
        self.clip = pg.Rect(0, 0, self.size[0], self.size[1])
        self.c_pos = self.clip.topleft
        self.current_tile = None
        self.show_foreground = -1
        self.right_m_button = False
        self.right_m_pos = None
        self.m_pos = None
        self.fill = False
        self.m_select_rect = pg.Rect(1, 1, 1, 1)
        self.button1 = Button((120, 20), (129, 1), "Menu")
        self.drop_menu = Menu((120, 160), (129, 21))
        self.drop_menu.add_buttons(4, ["Save", "Load", "Palette", "Info"])
        self.drop_menu.set_bg_color(CONCRETE)
        self.load_menu = self.setup_loadmenu()
        self.floating_text = FloatingText("no text", self.size)
        self.setup()

        self.selected_map = self.map1

    def update(self, dt):
        self.dt = dt
        self.map1.update(dt)
        self.menu.update(dt)
        self.palette.update(dt)
        self.floating_text.update(dt)
        if self.drop_menu.buttons[0].clicked:
            self.savemap()
            self.drop_menu.buttons[0].clicked = False
        if self.drop_menu.buttons[2].clicked:
            self.selected_map = self.palette
        else:
            self.selected_map = self.map1
        if self.map1.clipped:
            self.map2.map.set_clip()
            self.map1.clipped = False
        if self.c_pos != self.clip.topleft:
            self.c_pos = (self.c_pos[0] - self.map1.xy[0],
                          self.c_pos[1] - self.map1.xy[1])
            self.clip.topleft = self.c_pos
        self.button1.update(self.dt)
        self.mouse_select()

    def draw(self):
        self.screen.fill(BLACK)

        # MAP
        # Background
        self.map1.draw(self.screen, self.clip)

        # Foreground
        if self.show_foreground > 0:
            self.map2.xy = self.map1.xy
            self.map2.draw(self.screen, self.clip)

        # GUI
        self.menu.draw(self.screen, None)
        self.button1.draw(self.screen)
        if self.button1.clicked:
            self.drop_menu.draw(self.screen)
        if self.drop_menu.buttons[1].clicked:
            self.load_menu.draw(self.screen)
        if self.drop_menu.buttons[2].clicked:
            self.palette.draw(self.screen)
        if self.right_m_button:
            screen_rect = self.m_select_rect.copy()
            screen_rect.x += self.map1.xy[0]
            screen_rect.y += self.map1.xy[1]
            pg.draw.rect(self.screen, WHITE, screen_rect, 1)

        self.floating_text.draw(self.screen)

########################## Setup methods #######################################

    def setup_loadmenu(self):
        folder = Path("./save")
        filelist = [f for f in folder.files("*.sav")]
        amount = len(filelist)
        menu = Menu((240, amount * 21), (250, 21))
        menu.add_buttons(amount, filelist)
        menu.set_bg_color(CONCRETE)
        return menu

    def setup(self):
        self.map1.setup(TEAL)
        self.map2.setup(CONCRETE, 200)
        self.menu.setup(CYAN)

    def setup_menu(self):
        sheet = SpriteSheet("./img/magecity_64p.png", 64, (0, 0), (8, 44))
        self.menu_list = sum(sheet.image_list, [])
        length = len(self.menu_list)
        size = (10, length / 10)
        menu = Map(self.size, size, self.block, "./tiles/Empty_tile_64p.png")
        menu.setup(CYAN)
        i = 1
        for tile in menu.group:
            tile.filename = "maptile{}".format(i)
            tile.image = self.menu_list[i]
            if i + 1 >= len(self.menu_list):
                break
            else:
                i += 1
        return menu

#################### Key and Mouse Methods #####################################

    def key_down(self, key):
        if key == K_ESCAPE:
            print "Quitting..."
            self.game_on == False
            self.end_game()

        if key == K_e:
            self.show_foreground *= -1

        if key in (K_w, K_UP):
            self.selected_map.move["up"] = True
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = True
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = True
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = True

    def key_up(self, key):
        if key in (K_w, K_UP):
            self.selected_map.move["up"] = False
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = False
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = False
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = False

    def mouse_down(self, button, pos):
        not_menu = True
        if button == 1:
            if self.button1.click(pos):
                not_menu = False
            if self.button1.clicked:
                if self.drop_menu.click(pos):
                    not_menu = False
            if self.drop_menu.buttons[1].clicked:
                if self.load_menu.click(pos):
                    self.loadmap()
            if not_menu:
                if self.drop_menu.buttons[2].clicked:
                    self.find_tile(pos, self.palette, self.menu)
                elif self.show_foreground > 0:
                    self.find_tile(pos, self.menu, self.map2)
                else:
                    self.find_tile(pos, self.menu, self.map1)
        if button == 3:
            self.right_m_button = True
            self.right_m_pos = pos

    def mouse_up(self, button, pos):
        if button == 3:
            self.right_m_button = False
            self.right_m_pos = pos
            new_rect = self._invert_rect(self.m_select_rect)

            if self.show_foreground < 0:
                self.group_select(new_rect, self.map1.group)
            else:
                self.group_select(new_rect, self.map2.group)

    def mouse_motion(self, button, pos, rel):
        self.m_pos = pos

    def mouse_select(self):
        if self.right_m_button:
            old_pos = (self.right_m_pos[0] - self.map1.xy[0],
                       self.right_m_pos[1] - self.map1.xy[1])
            new_pos = (self.m_pos[0] - self.map1.xy[0],
                       self.m_pos[1] - self.map1.xy[1])
            self.m_select_rect = pg.Rect(1, 1, 1, 1)
            xoff, yoff = new_pos[0] - old_pos[0], new_pos[1] - old_pos[1]
            self.m_select_rect.inflate_ip(xoff, yoff)
            self.m_select_rect.topleft = old_pos

    def _invert_rect(self, rect):
        new_rect = pg.Rect(1, 1, 1, 1)
        new_rect.size = rect.size
        if rect.width < 0:
            new_rect.width *= -1
        if rect.height < 0:
            new_rect.height *= -1
        if rect.left > rect.right:
            new_rect.left = rect.right
        else:
            new_rect.left = rect.left
        if rect.top > rect.bottom:
            new_rect.top = rect.bottom
        else:
            new_rect.top = rect.top
        return new_rect


###################### Button Activated Methods ################################

    def group_select(self, rect, group):
        for sprite in group:
            if sprite.rect.colliderect(rect):
                self.change_tile(sprite)

    def find_tile(self, pos, menu, bg_map):
        found = False
        for tile in menu.group:
            map_pos = (pos[0] - menu.xy[0], pos[1] - menu.xy[1])
            if tile.rect.collidepoint(map_pos):
                found = True
                menu.fill = True
                menu.selected = tile
                self.current_tile = tile
        if not found:
            for tile in bg_map.group:
                map_pos = (pos[0] - bg_map.xy[0], pos[1] - bg_map.xy[1])
                if tile.rect.collidepoint(map_pos):
                    self.change_tile(tile)
                    bg_map.clear_map()

    def change_tile(self, tile):
        if self.current_tile != None:
            tile.filename = self.current_tile.filename
            tile.image = self.current_tile.image
            tile.dirty = 1

    def savemap(self):
        size = tuple_mult((40, 40), self.block)
        save = SaveMap("savemap", size, self.block, "./img/magecity_64p.png",
                       self.map1.group, self.map2.group)
        save.write_to_file()
        self.floating_text.set_text("Map Saved", True)

    def loadmap(self):
        select = None
        for button in self.load_menu.buttons:
            if button.clicked:
                select = button.text
        if select != None:
            load = LoadMap(select)
            self.map1.group = load.bg_group
            self.map2.group = load.fg_group
            self.floating_text.set_text("Map Loaded", True)
Exemple #16
0
    def logic_update(self, EVENTS):
        for x in range(len(self.STAGE)):
            self.STAGE[x].logic_update(EVENTS)

        self.EvaluateSkip(EVENTS)
        if (self.phrase == "Authors"):
            if (self.LETRASA.End()):
                self.LETRASB.StartMove()
            if (self.LETRASB.End()):
                self.phrase = "Wait 2 quit"
                self.auxiliarA = 80
        elif (self.phrase == "Wait 2 quit"):
            self.auxiliarA -= 1
            if (self.auxiliarA == 0):
                self.LETRASA.QuitLetters()
                self.LETRASB.QuitLetters()

                self.phrase = "Game title start"
        elif (self.phrase == "Game title start"):
            STAGE_WIDTH, STAGE_HEIGHT = pygame.display.get_surface().get_size()

            self.GAME_NAME = game_title.GameTitle()
            self.GAME_NAME.set_position((0, 0))
            self.GAME_NAME.set_position(
                (STAGE_WIDTH / 2 - self.GAME_NAME.aumento / 2,
                 STAGE_HEIGHT / 2 - self.GAME_NAME.H / 2))

            self.AddToStage(self.GAME_NAME, "Game Name")

            self.phrase = "Game title"
            self.auxiliarA = 40
        elif (self.phrase == "Game title"):
            self.auxiliarA -= 1
            if (self.auxiliarA == 0):
                self.RemoveFromStage("Autors A")
                self.RemoveFromStage("Autors B")

                self.GAME_NAME.start()
                self.phrase = "Game title is"

        elif (self.phrase == "Game title is"):
            if (self.GAME_NAME.status == "End"):
                self.__started = True
                print "Adding menu"
                self.phrase = "Menu"
                STAGE_WIDTH, STAGE_HEIGHT = pygame.display.get_surface(
                ).get_size()

                submenu = Menu.Menu2((0, 0))

                submenu.AddOption("Local", MenuActions.NOSET, {})
                submenu.AddOption("National", MenuActions.NOSET, {})
                submenu.AddOption("International", MenuActions.NOSET, {})
                submenu.StartOptions()
                submenu.addReturnButton(misc.back_arrow, MenuActions.CLOSEMENU,
                                        {})

                menu1 = Menu.Menu2(
                    (STAGE_WIDTH / 2 - 150, STAGE_HEIGHT / 2 - 150))
                menu1.AddOption(dat.GetWord("nueva partida"),
                                MenuActions.STARTGAME, {})
                menu1.AddOption(dat.GetWord("cargar partida"),
                                MenuActions.NOSET, {})
                menu1.AddOption(dat.GetWord("unirse a partida"),
                                MenuActions.NOSET, {})
                menu1.AddOption(dat.GetWord("mejores puntajes"),
                                MenuActions.OPENMENU, submenu)
                menu1.StartOptions()
                menu1.block()
                self.__waitToUnclock = 20

                self.AddToStage(menu1, "Menu principal")
                self.subMenus.append(menu1)

                self.MENU = menu1
        elif (self.phrase == "Menu"):
            if (self.__waitToUnclock > 1):
                self.__waitToUnclock -= 1
            else:
                self.__waitToUnclock -= 1
                self.MENU.unblock()
            ToDo = self.MENU.getCurrentAction()

            self.evaluate(ToDo)

        elif (self.phrase == "Menu change"):
            STAGE_WIDTH, STAGE_HEIGHT = pygame.display.get_surface().get_size()

            RightMenu = self.subMenus[len(self.subMenus) - 1]
            LeftMenu = self.subMenus[len(self.subMenus) - 2]
            if (RightMenu.GetX() >= STAGE_WIDTH / 2 - 150):
                RightMenu.moveLeft()
                LeftMenu.moveLeft()
            else:
                self.MENU = self.subMenus[len(self.subMenus) - 1]
                self.phrase = "Menu"
                self.MENU.unblock()

        elif (self.phrase == "Menu return"):
            STAGE_WIDTH, STAGE_HEIGHT = pygame.display.get_surface().get_size()

            RightMenu = self.subMenus[len(self.subMenus) - 1]
            LeftMenu = self.subMenus[len(self.subMenus) - 2]

            if (LeftMenu.GetX() <= STAGE_WIDTH / 2 - 150):
                RightMenu.moveRight()
                LeftMenu.moveRight()
            else:
                self.RemoveFromStage("Sub menu " + str(len(self.subMenus) - 1))
                del self.subMenus[len(self.subMenus) - 1]

                self.MENU = self.subMenus[len(self.subMenus) - 1]
                self.MENU.unblock()
                self.phrase = "Menu"
        elif (self.phrase == "Create Game transition"):
            STAGE_WIDTH, STAGE_HEIGHT = pygame.display.get_surface().get_size()

            form = self.GetStageReferenceByName("New game form")

            form.GetObject().Move(
                STAGE_WIDTH / 2 - form.GetObject().GetGlobalSize()[0] / 2, 10)

            self.phrase = "Create Game moving"
        elif (self.phrase == "Create Game moving"):
            self.MENU.moveLeft()

            form = self.GetStageReferenceByName("New game form")

            if (form.GetObject().GetMoving() == 0):
                self.phrase = "Create game finished"
        elif (self.phrase == "Create game finished"):

            form = self.GetStageReferenceByName("New game form")

            if (form.GetObject().ComeBack()):
                self.phrase = "Create game return"
                STAGE_WIDTH = pygame.display.get_surface().get_size()[0]

                form.GetObject().Move(STAGE_WIDTH + 500, 10)

        elif (self.phrase == "Create game return"):
            self.MENU.moveRight()
            STAGE_WIDTH = pygame.display.get_surface().get_size()[0]

            form = self.GetStageReferenceByName("New game form")

            if (self.MENU.GetX() >= STAGE_WIDTH / 2 - 150):
                self.phrase = "Menu"
                self.MENU.unblock()
Exemple #17
0
class Game(object):
    # Инициализация класса при создании экземпляра
    def __init__(self):
        self.init_window()
        self.init_variables()

    # Метод настроек окон игры
    def init_window(self):
        # Размеры экрана
        self.WIDTH = 1200
        self.HEIGHT = 800
        self.SIZE = (self.WIDTH, self.HEIGHT)

        # Экран
        self.screen = pygame.display.set_mode(self.SIZE)

        # Экземпляр класса с состояниями циклов и экранов игры
        self.loop = Loop()

    # Метод инициализации переменных
    def init_variables(self):
        # Переменная времени
        self.clock = pygame.time.Clock()

        # Создание экземпляров классов
        self.menu = Menu(self.screen)
        self.script = Script(self.screen)

    # Метод обработки событий
    def events(self):
        # Цикл обработки событий
        for event in pygame.event.get():
            # MOUSEBUTTONDOWN
            # 1 - нажатие левой кнопки мыши
            # 2 - нажатие колёсика мыши
            # 3 - нажатие правой кнопки мыши
            # 4 - движение колёсика вперёд
            # 5 - движение колёсика назад

            # Обработка события выхода из игры
            if event.type == pygame.QUIT:
                self.loop.main_loop = False

            # Обработка событий экрана меню
            if self.loop.menu:
                # Обработка событий нажатия на мышь
                if event.type == pygame.MOUSEBUTTONDOWN:
                    self.menu.mousebuttondown(event, self.loop)

            # Обработка событий экрана игры
            if self.loop.game:
                # Обработка событий нажатия на клавиши
                if event.type == pygame.KEYDOWN:
                    self.script.keydown(event)
                # Обработка событий нажатия на мышь
                if event.type == pygame.MOUSEBUTTONDOWN:
                    self.script.mousebuttondown(event)

    # Метод обновления данных
    def update(self):
        # Вызов метода обработки событий
        self.events()

    # Метод отрисовки данных
    def render(self):
        # Рендер экрана меню
        if self.loop.menu:
            # Цвет фона
            self.screen.fill((100, 100, 100))

            # Методы отображения данных классов
            self.menu.update()

        # Рендер экрана игры
        if self.loop.game:
            # Цвет фона
            self.screen.fill((0, 0, 0))

            # Методы отображения данных классов
            self.script.update()

        # Отрисовка данных
        pygame.display.flip()
        # Количество кадров в секунду
        self.clock.tick(60)
Exemple #18
0
class Main(Template):
    def __init__(self, size):
        Template.__init__(self, size)
        self.size = size
        self.block = 64
        self.dt = 0.
        self.map1 = Map(self.size, (40,40), self.block, "./tiles/Empty_tile_64p.png")
        self.map2 = Map(self.size, (40,40), self.block, "./tiles/Empty_tile_64p.png")
        self.menu = Map(self.size, (2,14), self.block, "./tiles/Empty_tile_64p.png")
        self.menu_list = []
        self.palette = self.setup_menu()
        self.palette.xy = [250,0]
        self.clip = pg.Rect(0,0, self.size[0],self.size[1])
        self.c_pos = self.clip.topleft
        self.current_tile = None
        self.show_foreground = -1
        self.right_m_button = False
        self.right_m_pos = None
        self.m_pos = None
        self.fill = False
        self.m_select_rect = pg.Rect(1,1,1,1)
        self.button1 = Button((120, 20), (129,1), "Menu")
        self.drop_menu = Menu((120, 160), (129, 21))
        self.drop_menu.add_buttons(4, ["Save", "Load", "Palette", "Info"])
        self.drop_menu.set_bg_color(CONCRETE)
        self.load_menu = self.setup_loadmenu()
        self.floating_text = FloatingText("no text", self.size)
        self.setup()

        self.selected_map = self.map1

    def update(self, dt):
        self.dt = dt
        self.map1.update(dt)
        self.menu.update(dt)
        self.palette.update(dt)
        self.floating_text.update(dt)
        if self.drop_menu.buttons[0].clicked:
            self.savemap()
            self.drop_menu.buttons[0].clicked = False
        if self.drop_menu.buttons[2].clicked:
            self.selected_map = self.palette
        else:
            self.selected_map = self.map1
        if self.map1.clipped:
            self.map2.map.set_clip()
            self.map1.clipped = False
        if self.c_pos != self.clip.topleft:
            self.c_pos = (self.c_pos[0] - self.map1.xy[0], self.c_pos[1] - self.map1.xy[1])
            self.clip.topleft = self.c_pos
        self.button1.update(self.dt)
        self.mouse_select()

    def draw(self):
        self.screen.fill(BLACK)

        # MAP
        # Background
        self.map1.draw(self.screen, self.clip)

        # Foreground
        if self.show_foreground > 0:
            self.map2.xy = self.map1.xy
            self.map2.draw(self.screen, self.clip)

        # GUI
        self.menu.draw(self.screen, None)
        self.button1.draw(self.screen)
        if self.button1.clicked:
            self.drop_menu.draw(self.screen)
        if self.drop_menu.buttons[1].clicked:
            self.load_menu.draw(self.screen)
        if self.drop_menu.buttons[2].clicked:
            self.palette.draw(self.screen)
        if self.right_m_button:
            screen_rect = self.m_select_rect.copy()
            screen_rect.x += self.map1.xy[0]
            screen_rect.y += self.map1.xy[1]
            pg.draw.rect(self.screen, WHITE, screen_rect, 1)

        self.floating_text.draw(self.screen)

########################## Setup methods #######################################

    def setup_loadmenu(self):
        folder = Path("./save")
        filelist = [f for f in folder.files("*.sav")]
        amount = len(filelist)
        menu = Menu((240, amount*21), (250, 21))
        menu.add_buttons(amount, filelist)
        menu.set_bg_color(CONCRETE)
        return menu

    def setup(self):
        self.map1.setup(TEAL)
        self.map2.setup(CONCRETE, 200)
        self.menu.setup(CYAN)

    def setup_menu(self):
        sheet = SpriteSheet("./img/magecity_64p.png", 64, (0,0), (8,44))
        self.menu_list = sum(sheet.image_list, [])
        length = len(self.menu_list)
        size = (10, length/10)
        menu = Map(self.size, size, self.block, "./tiles/Empty_tile_64p.png")
        menu.setup(CYAN)
        i = 1
        for tile in menu.group:
            tile.filename = "maptile{}".format(i)
            tile.image = self.menu_list[i]
            if i+1 >= len(self.menu_list):
                break
            else:
                i += 1
        return menu

#################### Key and Mouse Methods #####################################

    def key_down(self, key):
        if key == K_ESCAPE:
            print "Quitting..."
            self.game_on == False
            self.end_game()

        if key == K_e:
            self.show_foreground *= -1

        if key in (K_w, K_UP):
            self.selected_map.move["up"] = True
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = True
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = True
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = True

    def key_up(self, key):
        if key in (K_w, K_UP):
            self.selected_map.move["up"] = False
        if key in (K_a, K_LEFT):
            self.selected_map.move["left"] = False
        if key in (K_s, K_DOWN):
            self.selected_map.move["down"] = False
        if key in (K_d, K_RIGHT):
            self.selected_map.move["right"] = False

    def mouse_down(self, button, pos):
        not_menu = True
        if button == 1:
            if self.button1.click(pos):
                not_menu = False
            if self.button1.clicked:
                if self.drop_menu.click(pos):
                    not_menu = False
            if self.drop_menu.buttons[1].clicked:
                if self.load_menu.click(pos):
                    self.loadmap()
            if not_menu:
                if self.drop_menu.buttons[2].clicked:
                    self.find_tile(pos, self.palette, self.menu)
                elif self.show_foreground > 0:
                    self.find_tile(pos, self.menu, self.map2)
                else:
                    self.find_tile(pos, self.menu, self.map1)
        if button == 3:
            self.right_m_button = True
            self.right_m_pos = pos

    def mouse_up(self, button, pos):
        if button == 3:
            self.right_m_button = False
            self.right_m_pos = pos
            new_rect = self._invert_rect(self.m_select_rect)

            if self.show_foreground < 0:
                self.group_select(new_rect, self.map1.group)
            else:
                self.group_select(new_rect, self.map2.group)

    def mouse_motion(self, button, pos, rel):
        self.m_pos = pos

    def mouse_select(self):
        if self.right_m_button:
            old_pos = (self.right_m_pos[0] - self.map1.xy[0], self.right_m_pos[1] - self.map1.xy[1])
            new_pos = (self.m_pos[0] - self.map1.xy[0], self.m_pos[1] - self.map1.xy[1])
            self.m_select_rect = pg.Rect(1,1,1,1)
            xoff, yoff = new_pos[0] - old_pos[0], new_pos[1] - old_pos[1]
            self.m_select_rect.inflate_ip(xoff, yoff)
            self.m_select_rect.topleft = old_pos

    def _invert_rect(self, rect):
            new_rect = pg.Rect(1,1,1,1)
            new_rect.size = rect.size
            if rect.width < 0:
                new_rect.width *= -1
            if rect.height < 0:
                new_rect.height *= -1
            if rect.left > rect.right:
                new_rect.left = rect.right
            else:
                new_rect.left = rect.left
            if rect.top > rect.bottom:
                new_rect.top = rect.bottom
            else:
                new_rect.top = rect.top
            return new_rect

###################### Button Activated Methods ################################

    def group_select(self, rect, group):
        for sprite in group:
            if sprite.rect.colliderect(rect):
                self.change_tile(sprite)

    def find_tile(self, pos, menu, bg_map):
        found = False
        for tile in menu.group:
            map_pos = (pos[0] - menu.xy[0], pos[1] - menu.xy[1])
            if tile.rect.collidepoint(map_pos):
                found = True
                menu.fill = True
                menu.selected = tile
                self.current_tile = tile
        if not found:
            for tile in bg_map.group:
                map_pos = (pos[0] - bg_map.xy[0], pos[1] - bg_map.xy[1])
                if tile.rect.collidepoint(map_pos):
                    self.change_tile(tile)
                    bg_map.clear_map()

    def change_tile(self, tile):
        if self.current_tile != None:
            tile.filename = self.current_tile.filename
            tile.image = self.current_tile.image
            tile.dirty = 1

    def savemap(self):
        size = tuple_mult((40,40), self.block)
        save = SaveMap("savemap", size, self.block, "./img/magecity_64p.png",
                        self.map1.group, self.map2.group)
        save.write_to_file()
        self.floating_text.set_text("Map Saved", True)

    def loadmap(self):
        select = None
        for button in self.load_menu.buttons:
            if button.clicked:
                select = button.text
        if select != None:
            load = LoadMap(select)
            self.map1.group = load.bg_group
            self.map2.group = load.fg_group
            self.floating_text.set_text("Map Loaded", True)