mirror of
https://github.com/Faraphel/Atlas-Install.git
synced 2025-07-02 18:58:27 +02:00
custom tracks are now converted into szs in the cache
This commit is contained in:
parent
63cbe06bf3
commit
186aa55f4a
4 changed files with 49 additions and 3 deletions
|
@ -36,7 +36,9 @@ class ExtractedGame:
|
|||
destination_path.mkdir(parents=True, exist_ok=True)
|
||||
yield {"description": "Extracting original tracks...", "determinate": False}
|
||||
for track_file in (self.path / "files/Race/Course/").glob("*.szs"):
|
||||
track_file.rename(destination_path / track_file.name)
|
||||
yield {"description": f"Extracting original tracks ({track_file.name})...", "determinate": False}
|
||||
if not (destination_path / track_file.name).exists(): track_file.rename(destination_path / track_file.name)
|
||||
else: track_file.unlink()
|
||||
|
||||
def install_mystuff(self) -> Generator[dict, None, None]:
|
||||
"""
|
||||
|
|
|
@ -98,6 +98,10 @@ class Game:
|
|||
cache_directory: Path = Path("./.cache")
|
||||
cache_directory.mkdir(parents=True, exist_ok=True)
|
||||
|
||||
cache_autoadd_directory = cache_directory / "autoadd/"
|
||||
cache_ogtracks_directory = cache_directory / "original-tracks/"
|
||||
cache_cttracks_directory = cache_directory / f"custom-tracks/"
|
||||
|
||||
# get the directory where the game will be extracted
|
||||
extracted_game = ExtractedGame(self.get_output_directory(dest, mod_config), self)
|
||||
|
||||
|
@ -108,8 +112,9 @@ class Game:
|
|||
yield from self.extract(extracted_game.path)
|
||||
|
||||
# prepare the cache
|
||||
yield from extracted_game.extract_autoadd(cache_directory / "autoadd/")
|
||||
yield from extracted_game.extract_original_tracks(cache_directory / "original-tracks/")
|
||||
yield from extracted_game.extract_autoadd(cache_autoadd_directory)
|
||||
yield from extracted_game.extract_original_tracks(cache_ogtracks_directory)
|
||||
yield from mod_config.normalize_all_tracks(cache_autoadd_directory, cache_cttracks_directory)
|
||||
|
||||
# patch the game
|
||||
yield from extracted_game.install_mystuff()
|
||||
|
|
|
@ -8,6 +8,7 @@ from source.mkw.Cup import Cup
|
|||
from source.mkw.Track import Track
|
||||
import json
|
||||
|
||||
from source.wt.szs import SZSPath
|
||||
|
||||
CT_ICON_SIZE: int = 128
|
||||
|
||||
|
@ -242,3 +243,20 @@ class ModConfig:
|
|||
for i, cticon in enumerate(cticons): full_cticon.paste(cticon, (0, i * CT_ICON_SIZE))
|
||||
|
||||
return full_cticon
|
||||
|
||||
def normalize_all_tracks(self, autoadd_path: "Path | str", destination_path: "Path | str") -> Generator[dict, None, None]:
|
||||
"""
|
||||
Convert all tracks of the mod to szs into the destination_path
|
||||
:param autoadd_path: autoadd directory
|
||||
:param destination_path: destination where the files are converted
|
||||
"""
|
||||
yield {"description": "Normalizing track..."}
|
||||
destination_path = Path(destination_path)
|
||||
destination_path.mkdir(parents=True, exist_ok=True)
|
||||
for track_file in filter(lambda file: file.is_file(), (self.path.parent / "_TRACKS").rglob("*")):
|
||||
yield {"description": f"Normalizing track \"{track_file.name}\"..."}
|
||||
SZSPath(track_file).normalize(
|
||||
autoadd_path,
|
||||
destination_path / track_file.with_suffix(".szs").name,
|
||||
format="szs"
|
||||
)
|
||||
|
|
|
@ -53,6 +53,27 @@ class SZSPath:
|
|||
def __eq__(self, other: "SZSPath") -> bool:
|
||||
return self.path == other.path
|
||||
|
||||
def normalize(self, autoadd_path: "Path | str", destination_path: "Path | str", format: str = "szs") -> "SZSPath":
|
||||
"""
|
||||
Convert the file into a another format
|
||||
:param format: format to convert the file
|
||||
:param autoadd_path: Autoadd directory
|
||||
:param destination_path: destination of the converted file
|
||||
:return: new path of the file
|
||||
"""
|
||||
if not destination_path.exists() or \
|
||||
(destination_path.exists() and destination_path.stat().st_mtime < self.path.stat().st_mtime):
|
||||
# if the destination_path exists and is less recent than this source file, update it.
|
||||
_tools_run(
|
||||
"NORMALIZE",
|
||||
self.path,
|
||||
"--autoadd-path", autoadd_path,
|
||||
"--DEST", destination_path,
|
||||
f"--{format}",
|
||||
"--overwrite"
|
||||
)
|
||||
return SZSPath(destination_path)
|
||||
|
||||
def cat(self, subfile: str) -> bytes:
|
||||
"""
|
||||
Run the cat command (read a subfile) and return the output
|
||||
|
|
Loading…
Reference in a new issue