178 lines
6.3 KiB
Python
178 lines
6.3 KiB
Python
import threading
|
|
from lib.skeleton_binary import SkeletonBinary
|
|
from lib.alpha_composite import AlphaComposite
|
|
from lib.atlas_reader import AtlasReader
|
|
from lib.base64_util import *
|
|
|
|
class Builder:
|
|
|
|
def __init__(self, operator_name, config) -> None:
|
|
self.operator_name = operator_name
|
|
self.config = config
|
|
self.use_skel = config["operators"][operator_name]["use_skel"]
|
|
self.source_path = config["operators"][operator_name]["source_folder"].format(name=operator_name)
|
|
self.target_path = config["operators"][operator_name]["target_folder"].format(name=operator_name)
|
|
self.common_name = config["operators"][operator_name]["common_name"]
|
|
self.file_paths = dict(
|
|
json=self.target_path + self.common_name + ".json",
|
|
atlas=self.target_path + self.common_name + ".atlas",
|
|
skel=self.target_path + self.common_name + ".skel",
|
|
)
|
|
|
|
def start(self):
|
|
# self.__build_assets()
|
|
# self.__set_version()
|
|
# name = "skadi"
|
|
# print(self.config[name]["source_folder"].format(name=name))
|
|
source = "./operator/skadi/extracted/"
|
|
target = "./operator/skadi/"
|
|
name = "dyn_illust_char_1012_skadi2"
|
|
print("build")
|
|
return
|
|
|
|
def stop(self):
|
|
return
|
|
|
|
def build_assets(self):
|
|
operator_file = pathlib.Path.cwd().joinpath(self.target_path, "operator.js")
|
|
if operator_file.exists() is False:
|
|
print("Building operaotr data...")
|
|
|
|
alpha_composite_threads = list()
|
|
png_to_base64_threads = list()
|
|
prefix = "window.operator = "
|
|
data = dict()
|
|
|
|
ar = AtlasReader(self.source_path + self.common_name, self.target_path + self.common_name)
|
|
|
|
skeleton_binary_thread = threading.Thread(
|
|
target=SkeletonBinary,
|
|
args=(self.source_path + self.common_name, self.target_path + self.common_name, self.use_skel),
|
|
daemon=True,
|
|
)
|
|
ar_thread = threading.Thread(
|
|
target=ar.get_images,
|
|
daemon=True,
|
|
)
|
|
atlas_base64_thread = threading.Thread(
|
|
target=self.__atlas_to_base64,
|
|
args=(
|
|
self.file_paths["atlas"],
|
|
data,
|
|
".{}".format(self.config["server"]["operator_folder"]) + self.common_name + ".atlas",
|
|
),
|
|
daemon=True,
|
|
)
|
|
|
|
ar_thread.start()
|
|
skeleton_binary_thread.start()
|
|
ar_thread.join()
|
|
atlas_base64_thread.start()
|
|
|
|
# alpha composite
|
|
for item in ar.images:
|
|
alpha_composite_thread = threading.Thread(
|
|
target=AlphaComposite,
|
|
args=(self.source_path + item, self.target_path + item),
|
|
daemon=True,
|
|
)
|
|
alpha_composite_threads.append(alpha_composite_thread)
|
|
alpha_composite_thread.start()
|
|
|
|
for thread in alpha_composite_threads:
|
|
thread.join()
|
|
|
|
for item in ar.images:
|
|
png_to_base64_thread = threading.Thread(
|
|
target=self.__png_to_base64,
|
|
args=(
|
|
self.target_path + item,
|
|
data,
|
|
".{}".format(self.config["server"]["operator_folder"]) + item,
|
|
),
|
|
daemon=True,
|
|
)
|
|
|
|
png_to_base64_threads.append(png_to_base64_thread)
|
|
png_to_base64_thread.start()
|
|
|
|
skeleton_binary_thread.join()
|
|
if self.use_skel is True:
|
|
skel_base64_thread =threading.Thread(
|
|
target=self.__skel_to_base64,
|
|
args=(
|
|
self.file_paths["skel"],
|
|
data,
|
|
".{}".format(self.config["server"]["operator_folder"]) + self.common_name + ".skel",
|
|
),
|
|
daemon=True,
|
|
)
|
|
skel_base64_thread.start()
|
|
skel_base64_thread.join()
|
|
else:
|
|
json_base64_thread =threading.Thread(
|
|
target=self.__json_to_base64,
|
|
args=(
|
|
self.file_paths["json"],
|
|
data,
|
|
".{}".format(self.config["server"]["operator_folder"]) + self.common_name + ".json",
|
|
),
|
|
daemon=True,
|
|
)
|
|
json_base64_thread.start()
|
|
json_base64_thread.join()
|
|
|
|
for thread in png_to_base64_threads:
|
|
thread.join()
|
|
|
|
atlas_base64_thread.join()
|
|
|
|
jsonContent = prefix + str(data)
|
|
with open(operator_file, "w") as f:
|
|
f.write(jsonContent)
|
|
|
|
print("Finished building operaotr data")
|
|
return
|
|
|
|
def __set_version(self):
|
|
version = input("Enter build version: ")
|
|
print(version)
|
|
return
|
|
|
|
def __json_to_base64(self, path, dict=None, key=None):
|
|
with open(pathlib.Path.cwd().joinpath(path), "r") as f:
|
|
data = f.read()
|
|
result = encode_string(data, type="application/json")
|
|
if dict is not None and key is not None:
|
|
dict[key] = result
|
|
else:
|
|
return result
|
|
|
|
def __skel_to_base64(self, path, dict=None, key=None):
|
|
result = encode_binary(
|
|
path=path
|
|
)
|
|
if dict is not None and key is not None:
|
|
dict[key] = result
|
|
else:
|
|
return result
|
|
|
|
def __atlas_to_base64(self, path, dict=None, key=None):
|
|
with open(pathlib.Path.cwd().joinpath(path), "r") as f:
|
|
data = f.read()
|
|
result = encode_string(data, type="application/octet-stream")
|
|
if dict is not None and key is not None:
|
|
dict[key] = result
|
|
else:
|
|
return result
|
|
|
|
def __png_to_base64(self, path, dict=None, key=None):
|
|
result = encode_binary(
|
|
path=path,
|
|
type="image/png"
|
|
)
|
|
if dict is not None and key is not None:
|
|
dict[key] = result
|
|
else:
|
|
return result
|