320 lines
13 KiB
Python
320 lines
13 KiB
Python
import sys
|
|
|
|
import pygame
|
|
from pyvidplayer2 import Video
|
|
|
|
from gui import gui
|
|
import mame
|
|
from config import cfg, get_emu
|
|
|
|
# BLACK = (0, 0, 0)
|
|
# WHITE = (255, 255, 255)
|
|
# GREY = (70, 70, 70)
|
|
# DARKGREY = (50, 50, 50)
|
|
|
|
|
|
class app(object):
|
|
def __init__(self):
|
|
if get_emu("EmulatorType") == "MAME":
|
|
self.roms = mame.MameROMs(cfg["datadir"], cfg["HideMature"], get_emu())
|
|
if get_emu("EmulatorType") == "MESS":
|
|
self.roms = mess.MessROMs(cfg["datadir"], get_emu())
|
|
if get_emu("EmulatorType") == "CSV":
|
|
self.roms = csvfile.csvROMs(cfg["datadir"], get_emu())
|
|
|
|
self.update_menus()
|
|
|
|
pygame.init()
|
|
pygame.font.init()
|
|
|
|
iconsurface = pygame.image.load("arcade.png")
|
|
pygame.display.set_icon(iconsurface)
|
|
|
|
if cfg["FullScreen"]:
|
|
self.screen = pygame.display.set_mode((cfg["ResolutionX"], cfg["ResolutionY"]), pygame.FULLSCREEN)
|
|
else:
|
|
self.screen = pygame.display.set_mode((cfg["ResolutionX"], cfg["ResolutionY"]))
|
|
|
|
self.font = pygame.font.Font(pygame.font.match_font(cfg["Font"]), cfg["FontSize"])
|
|
|
|
self.status_surface = pygame.Surface((cfg["ResolutionX"], self.font.get_height())) # pylint: disable=E1121
|
|
|
|
self.oldmouse = pygame.mouse.set_visible(False)
|
|
|
|
pygame.key.set_repeat(100, 30)
|
|
|
|
self.listwidth = int(cfg["ResolutionX"] / 2)
|
|
|
|
self.gui = guimodule.gui(self.screen)
|
|
|
|
self.gui.add_menu(
|
|
0,
|
|
0,
|
|
self.listwidth,
|
|
cfg["ResolutionY"] - self.font.get_height(),
|
|
border=False,
|
|
data=self.roms,
|
|
fg=(255, 255, 255),
|
|
bg=(0, 0, 0),
|
|
name="MainList",
|
|
startitem=get_emu("CurrentGame"),
|
|
itemattop=get_emu("GameAtTop"),
|
|
)
|
|
|
|
self.gui.render()
|
|
|
|
def update_menus(self):
|
|
rootmenu = [
|
|
"Show Artwork",
|
|
"Categories",
|
|
"Sort",
|
|
"Hide Clones" if get_emu("ShowClones") else "Show Clones",
|
|
"Change Emulator",
|
|
"Quit",
|
|
]
|
|
sortmenu = ["Name Asc", "Name Dec", "Year Asc", "Year Dec"]
|
|
emulatormenu = get_emulators()
|
|
self.menus = {
|
|
"rootmenu": rootmenu,
|
|
"sortmenu": sortmenu,
|
|
"emulatormenu": emulatormenu,
|
|
"categorymenu": self.roms.categories,
|
|
}
|
|
|
|
def run(self):
|
|
keyup = False
|
|
quitcount = 0
|
|
|
|
while True:
|
|
event = self.gui.waitevent()
|
|
if event:
|
|
if event.type == pygame.QUIT:
|
|
break
|
|
if event.type == pygame.KEYDOWN:
|
|
keyup = False
|
|
if event.key == pygame.K_ESCAPE and self.gui.currentobject == 1: # Main List
|
|
quitcount += 1
|
|
if quitcount == cfg["QuitKeyPresses"]:
|
|
break
|
|
elif event.key == pygame.K_ESCAPE:
|
|
quitcount = 0
|
|
if self.gui.currentobject > 1:
|
|
self.gui.deletelastobject()
|
|
else:
|
|
quitcount = 0
|
|
if event.key in cfg["KeySelect"] and self.gui.currentobject == 1:
|
|
if sys.platform == "darwin":
|
|
print("Running %s" % self.roms[self.gui.getcurrentitem()].name)
|
|
run_emulator(get_emu("EmulatorType"), get_emu("EXE"), self.roms[self.gui.getcurrentitem()].name)
|
|
elif event.key in cfg["KeyGameHistory"] and self.gui.currentobject == 1:
|
|
history = self.roms.get_history(self.roms[self.gui.getcurrentitem()])
|
|
if history:
|
|
self.gui.add_notepad(
|
|
-1, -1, 800, 600, history, True, WHITE, DARKGREY, "history", "Game History"
|
|
)
|
|
elif event.key in cfg["KeyGameInfo"] and self.gui.currentobject == 1:
|
|
info = self.roms.get_info(self.roms[self.gui.getcurrentitem()])
|
|
if info:
|
|
self.gui.add_notepad(
|
|
-1, -1, 800, 600, info, True, WHITE, DARKGREY, "info", "Game Information"
|
|
)
|
|
elif event.key in cfg["KeyPopup"] and self.gui.currentobject == 1:
|
|
self.gui.add_menu(40, 40, -1, -1, self.menus["rootmenu"], True, WHITE, GREY, "rootmenu", 0)
|
|
elif event.key in cfg["KeyPopup"] and self.gui.currentobject > 1:
|
|
self.gui.deletelastobject()
|
|
elif event.key in cfg["KeyShowArtwork"]:
|
|
pass
|
|
# TODO: copy from below
|
|
elif event.key in cfg["KeySelect"]:
|
|
currentitem = self.gui.getcurrentitem()
|
|
menuname = self.gui.getmenuname()
|
|
item = self.menus[menuname][currentitem]
|
|
if menuname == "rootmenu":
|
|
if item == "Quit":
|
|
break
|
|
elif item == "Show Artwork":
|
|
print("hello")
|
|
aw = self.roms.get_artwork(self.roms[self.gui.getcurrentitem(0)])
|
|
if aw != []:
|
|
self.gui.add_image_notepad(
|
|
-1, -1, 800, 600, aw, True, WHITE, DARKGREY, "artwork", "Artwork"
|
|
)
|
|
elif item == "Categories":
|
|
self.gui.add_menu(
|
|
80,
|
|
45,
|
|
-1,
|
|
-(self.screen.get_height() - 45 - (self.font.get_height() * 2) - 8),
|
|
self.menus["categorymenu"],
|
|
True,
|
|
WHITE,
|
|
GREY,
|
|
"categorymenu",
|
|
0,
|
|
)
|
|
elif item == "Sort":
|
|
self.gui.add_menu(
|
|
80, 45, -1, -1, self.menus["sortmenu"], True, WHITE, GREY, "sortmenu", 0
|
|
)
|
|
elif item == "Show Clones":
|
|
set_emu("ShowClones", True)
|
|
self.update_menus()
|
|
self.roms.filter()
|
|
self.gui.deleteallmenus()
|
|
self.gui.setcurrentitem(0)
|
|
elif item == "Hide Clones":
|
|
set_emu("ShowClones", False)
|
|
self.update_menus()
|
|
self.roms.filter()
|
|
self.gui.deleteallmenus()
|
|
self.gui.setcurrentitem(0)
|
|
elif item == "Change Emulator":
|
|
self.gui.add_menu(
|
|
80,
|
|
45,
|
|
-1,
|
|
-(self.screen.get_height() - 45 - (self.font.get_height() * 2) - 8),
|
|
self.menus["emulatormenu"],
|
|
True,
|
|
WHITE,
|
|
GREY,
|
|
"emulatormenu",
|
|
0,
|
|
)
|
|
elif menuname == "sortmenu":
|
|
set_emu("Sort", item)
|
|
self.roms.filter()
|
|
self.gui.deleteallmenus()
|
|
elif menuname == "categorymenu":
|
|
set_emu("Category", item)
|
|
self.roms.filter()
|
|
self.gui.deleteallmenus()
|
|
self.gui.setcurrentitem(0)
|
|
elif menuname == "emulatormenu":
|
|
cfg["Emulator"] = item
|
|
if get_emu("EmulatorType") == "MAME":
|
|
self.roms = mame.MameROMs(cfg["datadir"], cfg["HideMature"], get_emu())
|
|
if get_emu("EmulatorType") == "MESS":
|
|
self.roms = mess.MessROMs(cfg["datadir"], get_emu())
|
|
if get_emu("EmulatorType") == "CSV":
|
|
self.roms = csvfile.csvROMs(cfg["datadir"], get_emu())
|
|
|
|
self.update_menus()
|
|
self.gui.deleteallmenus()
|
|
self.gui.deletelastobject()
|
|
self.gui.add_menu(
|
|
0,
|
|
0,
|
|
self.listwidth,
|
|
cfg["ResolutionY"] - self.font.get_height(),
|
|
border=False,
|
|
data=self.roms,
|
|
fg=(255, 255, 255),
|
|
bg=(0, 0, 0),
|
|
name="MainList",
|
|
startitem=get_emu("CurrentGame"),
|
|
itemattop=get_emu("GameAtTop"),
|
|
)
|
|
|
|
if event.type == pygame.KEYUP:
|
|
keyup = True
|
|
|
|
if self.gui.currentobject == 1 and self.roms:
|
|
currentitem = self.gui.getcurrentitem()
|
|
|
|
self.screen.fill(BLACK)
|
|
self.status_surface.fill((128, 128, 128))
|
|
|
|
if keyup:
|
|
pass
|
|
if cfg["AlwaysChangeSnap"] or keyup:
|
|
data = self.roms.get_snap(self.roms[currentitem], "snap")
|
|
screenshot_surface = image_from_data(data, (508, 480))
|
|
|
|
if cfg["ScanLines"]:
|
|
screenshot_surface = addscanlines(screenshot_surface)
|
|
|
|
self.screen.blit(
|
|
screenshot_surface,
|
|
(
|
|
self.listwidth
|
|
+ 2
|
|
+ ((self.screen.get_width() - self.listwidth + 2) / 2)
|
|
- (screenshot_surface.get_width() / 2),
|
|
102,
|
|
),
|
|
)
|
|
|
|
data = self.roms.get_snap(self.roms[currentitem], "marquee")
|
|
marquee_surface = image_from_data(data, (640, 100))
|
|
|
|
self.screen.blit(
|
|
marquee_surface,
|
|
(
|
|
self.listwidth
|
|
+ 2
|
|
+ ((self.screen.get_width() - self.listwidth + 2) / 2)
|
|
- (marquee_surface.get_width() / 2),
|
|
0,
|
|
),
|
|
)
|
|
|
|
data = self.roms.get_snap(self.roms[currentitem], "title")
|
|
title_surface = image_from_data(
|
|
data,
|
|
(
|
|
640,
|
|
cfg["ResolutionY"]
|
|
- (
|
|
screenshot_surface.get_height()
|
|
+ marquee_surface.get_height()
|
|
+ 4
|
|
+ self.status_surface.get_height()
|
|
),
|
|
),
|
|
)
|
|
|
|
self.screen.blit(
|
|
title_surface,
|
|
(
|
|
self.listwidth
|
|
+ 2
|
|
+ ((self.screen.get_width() - self.listwidth + 2) / 2)
|
|
- (title_surface.get_width() / 2),
|
|
(screenshot_surface.get_height() + marquee_surface.get_height() + 4),
|
|
),
|
|
)
|
|
|
|
size = self.font.size("%d / %d %s" % (currentitem + 1, len(self.roms), get_emu("Sort")))[0]
|
|
|
|
self.status_surface.blit(
|
|
self.font.render(
|
|
"%d / %d %s" % (currentitem + 1, len(self.roms), get_emu("Sort")), True, BLACK, (128, 128, 128)
|
|
),
|
|
(cfg["ResolutionX"] - size - 5, 0),
|
|
)
|
|
self.status_surface.blit(
|
|
self.font.render(
|
|
"%s %s" % (self.roms[currentitem].year, self.roms[currentitem].category),
|
|
True,
|
|
BLACK,
|
|
(128, 128, 128),
|
|
),
|
|
(5, 0),
|
|
)
|
|
|
|
try:
|
|
self.screen.blit(self.status_surface, (0, cfg["ResolutionY"] - self.font.get_height()))
|
|
except:
|
|
pass
|
|
|
|
self.gui.render()
|
|
|
|
pygame.mouse.set_visible(self.oldmouse)
|
|
pygame.key.set_repeat()
|
|
|
|
set_emu("CurrentGame", self.gui.getcurrentitem())
|
|
set_emu("GameAtTop", self.gui.getitemattop())
|
|
|
|
config_write()
|