Saves sprite settings

Save on exit feature
Some formatting changes
This commit is contained in:
aerinon
2020-03-02 15:04:46 -07:00
parent a20f5423fd
commit 8bdbf5d6b2
5 changed files with 213 additions and 186 deletions

14
CLI.py
View File

@@ -9,7 +9,6 @@ import shlex
import sys import sys
from Main import main from Main import main
from Rom import get_sprite_from_name
from Utils import is_bundled, close_console from Utils import is_bundled, close_console
from Fill import FillError from Fill import FillError
@@ -264,7 +263,7 @@ def parse_arguments(argv, no_defaults=False):
help='Select the color of Link\'s heart meter. (default: %(default)s)') help='Select the color of Link\'s heart meter. (default: %(default)s)')
parser.add_argument('--ow_palettes', default=defval(settings["ow_palettes"]), choices=['default', 'random', 'blackout']) parser.add_argument('--ow_palettes', default=defval(settings["ow_palettes"]), choices=['default', 'random', 'blackout'])
parser.add_argument('--uw_palettes', default=defval(settings["uw_palettes"]), choices=['default', 'random', 'blackout']) parser.add_argument('--uw_palettes', default=defval(settings["uw_palettes"]), choices=['default', 'random', 'blackout'])
parser.add_argument('--sprite', help='''\ parser.add_argument('--sprite', default=defval(settings["sprite"]), help='''\
Path to a sprite sheet to use for Link. Needs to be in Path to a sprite sheet to use for Link. Needs to be in
binary format and have a length of 0x7000 (28672) bytes, binary format and have a length of 0x7000 (28672) bytes,
or 0x7078 (28792) bytes including palette data. or 0x7078 (28792) bytes including palette data.
@@ -291,6 +290,7 @@ def parse_arguments(argv, no_defaults=False):
parser.add_argument('--teams', default=defval(1), type=lambda value: max(int(value), 1)) parser.add_argument('--teams', default=defval(1), type=lambda value: max(int(value), 1))
parser.add_argument('--outputpath', default=defval(settings["outputpath"])) parser.add_argument('--outputpath', default=defval(settings["outputpath"]))
parser.add_argument('--race', default=defval(settings["race"] != 0), action='store_true') parser.add_argument('--race', default=defval(settings["race"] != 0), action='store_true')
parser.add_argument('--saveonexit', default=defval(settings["saveonexit"]), choices=['never', 'ask', 'always'])
parser.add_argument('--outputname') parser.add_argument('--outputname')
if multiargs.multi: if multiargs.multi:
@@ -322,6 +322,7 @@ def parse_arguments(argv, no_defaults=False):
return ret return ret
def get_settings(): def get_settings():
# set default settings # set default settings
settings = { settings = {
@@ -459,9 +460,11 @@ def get_settings():
"rupoorcost": 10 "rupoorcost": 10
}, },
"randomSprite": False, "randomSprite": False,
"outputpath": os.path.join(".") "outputpath": os.path.join("."),
"saveonexit": "ask",
"startinventoryarray": {}
} }
settings["startinventoryarray"] = {}
if sys.platform.lower().find("windows"): if sys.platform.lower().find("windows"):
settings["enemizercli"] += ".exe" settings["enemizercli"] += ".exe"
@@ -470,12 +473,11 @@ def get_settings():
if os.path.exists(settings_path): if os.path.exists(settings_path):
with(open(settings_path)) as json_file: with(open(settings_path)) as json_file:
data = json.load(json_file) data = json.load(json_file)
if 'sprite' in data.keys() and data['sprite']:
data['sprite'] = get_sprite_from_name(data['sprite'])
for k, v in data.items(): for k, v in data.items():
settings[k] = v settings[k] = v
return settings return settings
def get_args_priority(settings_args, gui_args, cli_args): def get_args_priority(settings_args, gui_args, cli_args):
args = {} args = {}
args["settings"] = get_settings() if settings_args is None else settings_args args["settings"] = get_settings() if settings_args is None else settings_args

17
Gui.py
View File

@@ -21,7 +21,6 @@ from gui.randomize.generation import generation_page
from gui.bottom import bottom_frame, create_guiargs from gui.bottom import bottom_frame, create_guiargs
from GuiUtils import set_icon from GuiUtils import set_icon
from Main import __version__ as ESVersion from Main import __version__ as ESVersion
from Rom import get_sprite_from_name
def guiMain(args=None): def guiMain(args=None):
@@ -36,20 +35,28 @@ def guiMain(args=None):
f.write(json.dumps(args, indent=2)) f.write(json.dumps(args, indent=2))
os.chmod(os.path.join(settings_path, "settings.json"),0o755) os.chmod(os.path.join(settings_path, "settings.json"),0o755)
def save_settings_from_gui(): def save_settings_from_gui(confirm):
gui_args = vars(create_guiargs(self)) gui_args = vars(create_guiargs(self))
if self.randomSprite.get(): if self.randomSprite.get():
gui_args['sprite'] = 'random' gui_args['sprite'] = 'random'
elif gui_args['sprite']: elif gui_args['sprite']:
gui_args['sprite'] = gui_args['sprite'].name gui_args['sprite'] = gui_args['sprite'].name
save_settings(gui_args) save_settings(gui_args)
if confirm:
messagebox.showinfo("Door Shuffle " + ESVersion, "Settings saved from GUI.") messagebox.showinfo("Door Shuffle " + ESVersion, "Settings saved from GUI.")
# routine for exiting the app # routine for exiting the app
def guiExit(): def guiExit():
dosave = messagebox.askyesno("Door Shuffle " + ESVersion, "Save settings before exit?") skip_exit = False
if self.settings['saveonexit'] == 'ask':
dosave = messagebox.askyesnocancel("Door Shuffle " + ESVersion, "Save settings before exit?")
if dosave: if dosave:
save_settings_from_gui() save_settings_from_gui(True)
if dosave is None:
skip_exit = True
elif self.settings['saveonexit'] == 'always':
save_settings_from_gui(False)
if not skip_exit:
sys.exit(0) sys.exit(0)
# make main window # make main window
@@ -137,7 +144,7 @@ def guiMain(args=None):
# bottom of window: Open Output Directory, Open Documentation (if exists) # bottom of window: Open Output Directory, Open Documentation (if exists)
self.frames["bottom"] = bottom_frame(self, self, None) self.frames["bottom"] = bottom_frame(self, self, None)
## Save Settings Button ## Save Settings Button
savesettingsButton = Button(self.frames["bottom"], text='Save Settings to File', command=save_settings_from_gui) savesettingsButton = Button(self.frames["bottom"], text='Save Settings to File', command=lambda: save_settings_from_gui(True))
savesettingsButton.pack(side=RIGHT) savesettingsButton.pack(side=RIGHT)
# set bottom frame to main window # set bottom frame to main window

View File

@@ -102,7 +102,8 @@ SETTINGSTOPROCESS = {
"spoiler": "create_spoiler", "spoiler": "create_spoiler",
"suppressrom": "suppress_rom", "suppressrom": "suppress_rom",
"usestartinventory": "usestartinventory", "usestartinventory": "usestartinventory",
"usecustompool": "custom" "usecustompool": "custom",
"saveonexit": "saveonexit"
} }
} }
} }

View File

@@ -1,6 +1,6 @@
from classes.SpriteSelector import SpriteSelector as spriteSelector from classes.SpriteSelector import SpriteSelector as spriteSelector
from gui.randomize.gameoptions import set_sprite from gui.randomize.gameoptions import set_sprite
from Rom import Sprite from Rom import Sprite, get_sprite_from_name
import classes.constants as CONST import classes.constants as CONST
def loadcliargs(gui, args, settings=None): def loadcliargs(gui, args, settings=None):
@@ -39,18 +39,16 @@ def loadcliargs(gui, args, settings=None):
def sprite_setter(spriteObject): def sprite_setter(spriteObject):
gui.pages["randomizer"].pages["gameoptions"].widgets["sprite"]["spriteObject"] = spriteObject gui.pages["randomizer"].pages["gameoptions"].widgets["sprite"]["spriteObject"] = spriteObject
if args["sprite"] is not None: if args["sprite"] is not None:
sprite_obj = args.sprite if isinstance(args["sprite"], Sprite) else Sprite(args["sprite"]) sprite_obj = args.sprite if isinstance(args["sprite"], Sprite) else get_sprite_from_name(args["sprite"])
r_sprite_flag = args.randomSprite if hasattr(args, 'randomSprite') else False set_sprite(sprite_obj, False, spriteSetter=sprite_setter,
set_sprite(sprite_obj, r_sprite_flag, spriteSetter=sprite_setter,
spriteNameVar=gui.pages["randomizer"].pages["gameoptions"].widgets["sprite"]["spriteNameVar"], spriteNameVar=gui.pages["randomizer"].pages["gameoptions"].widgets["sprite"]["spriteNameVar"],
randomSpriteVar=gui.randomSprite) randomSpriteVar=gui.randomSprite)
def sprite_setter_adj(spriteObject): def sprite_setter_adj(spriteObject):
gui.pages["adjust"].content.sprite = spriteObject gui.pages["adjust"].content.sprite = spriteObject
if args["sprite"] is not None: if args["sprite"] is not None:
sprite_obj = args.sprite if isinstance(args.sprite, Sprite) else Sprite(args.sprite) sprite_obj = args.sprite if isinstance(args["sprite"], Sprite) else get_sprite_from_name(args["sprite"])
r_sprite_flag = args["randomSprite"] if hasattr(args, 'randomSprite') else False set_sprite(sprite_obj, False, spriteSetter=sprite_setter_adj,
set_sprite(sprite_obj, r_sprite_flag, spriteSetter=sprite_setter_adj,
spriteNameVar=gui.pages["adjust"].content.spriteNameVar2, spriteNameVar=gui.pages["adjust"].content.spriteNameVar2,
randomSpriteVar=gui.randomSprite) randomSpriteVar=gui.randomSprite)

View File

@@ -22,5 +22,24 @@
"label": { "label": {
"text": "Use custom item pool" "text": "Use custom item pool"
} }
},
"saveonexit": {
"type": "selectbox",
"label": {
"text": "Save Settings on Exit"
},
"managerAttrs": {
"label": {
"side": "left"
},
"selectbox": {
"side": "right"
}
},
"options": {
"Ask Me": "ask",
"Always": "always",
"Never": "never"
}
} }
} }