Files
mfe-orig/app.py
Richard Jones c3e146e2ee Initial commit
2022-07-20 17:09:57 +01:00

306 lines
13 KiB
Python

import sys
# from pprint import pprint
import pygame
import csvfile
import gui as guimodule
import mame
import mess
from configfile import cfg, config_write, get_emu, get_emulators, set_emu
from utils import addscanlines, image_from_data, run_emulator
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(( # pylint: disable=E1121
cfg['ResolutionX'], self.font.get_height()))
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()