diff --git a/dcc/config.py b/dcc/config.py index 5b805c1..c45d79a 100644 --- a/dcc/config.py +++ b/dcc/config.py @@ -22,7 +22,7 @@ class Base(Command): parser.add_argument('--config-name', default='config.toml') return parser - def run(self, parsed_args): + def init_base(self, parsed_args): self._doom = pathlib.Path(parsed_args.doom) self._config_name = parsed_args.config_name self._config = tomlkit.toml_file.TOMLFile(self.doom.joinpath(self.config_name)).read() @@ -32,8 +32,6 @@ class Base(Command): for d in ("iwads", "pwads", "demos", "fabricate"): self._init_path(d) - self.take_action(parsed_args) - def _init_path(self, what): setattr(self, f"_{what}", self.doom.joinpath(self._config.get(what, what))) setattr(type(self), what, property(lambda self: getattr(self, f"_{what}"))) @@ -52,7 +50,7 @@ class Base(Command): def iwad_path(self, wad): iwad = self.iwads.joinpath(self._config.get("default_iwad")) - iwadpath = self.pwads.joinpath("iwad") + iwadpath = self.pwads.joinpath(wad).joinpath("iwad") if iwadpath.exists(): with io.open(iwadpath) as f: iwad = self.iwads.joinpath(f.read().strip() + ".WAD") diff --git a/dcc/doom_base.py b/dcc/doom_base.py index 753392c..bcf6a1a 100644 --- a/dcc/doom_base.py +++ b/dcc/doom_base.py @@ -3,24 +3,46 @@ from cliff.command import Command import dcc.config import io import os +import tomlkit -class WadMap(dcc.config.Base): +class Wad(dcc.config.Base): def get_parser(self, prog_name): parser = super().get_parser(prog_name) parser.add_argument('wad') + return parser + + def wad_init(self, parsed_args): + self.init_base(parsed_args) + self._wad = parsed_args.wad + wcp = self.pwads.joinpath(self.wad).joinpath(self.config_name) + if wcp.exists(): + self._wad_config = tomlkit.toml_file.TOMLFile(wcp).read() + for k,v in self._wad_config.value.items(): + print(k,v) + self._config.add(k,v) + + def run(self, parsed_args): + self.wad_init(self, parsed_args) + self.take_action(parsed_args) + + @property + def wad(self): + return self._wad + + +class WadMap(Wad): + def get_parser(self, prog_name): + parser = super().get_parser(prog_name) parser.add_argument('map') parser.add_argument('-n','--name','--demo_name') return parser def run(self, parsed_args): - self._wad = parsed_args.wad self._map = parsed_args.map self._name = parsed_args.name - super().run(parsed_args) + self.wad_init(parsed_args) - @property - def wad(self): - return self._wad + self.take_action(parsed_args) @property def map(self): diff --git a/dcc/fabricate.py b/dcc/fabricate.py index 73d078c..bf640a7 100644 --- a/dcc/fabricate.py +++ b/dcc/fabricate.py @@ -17,6 +17,12 @@ class Fabricate(dcc.doom_base.WadMap): command = [self.dsda] if not parsed_args.fg and shutil.which("xvfb-run") is not None: command = ["xvfb-run"] + command - subprocess.run(command + self.dsda_preamble() + + options = [] + for k,v in self._config.get("fabricate_options", {}).items(): + list.append(options, f"{k}={v}") + if len(options) > 0: + options = ["-assign", ",".join(options)] + print(options) + subprocess.run(command + self.dsda_preamble() + options + ["-timedemo", self.demo_in_path()] + ["-viddump", self.video_path()])