Esempio n. 1
0
def main():
    print("[RENDER GRAPHICS] render_graphics.py")
    start = time()
    iron_horse.main()
    # get args passed by makefile
    makefile_args = utils.get_makefile_args(sys)
    # default to no mp, makes debugging easier (mp fails to pickle errors correctly)
    num_pool_workers = makefile_args.get("num_pool_workers", 0)
    if num_pool_workers == 0:
        use_multiprocessing = False
        # just print, no need for a coloured echo_message
        print("Multiprocessing disabled: (PW=0)")
    else:
        use_multiprocessing = True
        # just print, no need for a coloured echo_message
        print("Multiprocessing enabled: (PW=" + str(num_pool_workers) + ")")

    graphics_input_path = os.path.join(currentdir, "src", "graphics")
    graphics_output_path = os.path.join(iron_horse.generated_files_path,
                                        "graphics")
    if not os.path.exists(graphics_output_path):
        os.mkdir(graphics_output_path)

    hint_file = codecs.open(
        os.path.join(graphics_output_path,
                     "_graphics_files_here_are_generated.txt"),
        "w",
        "utf8",
    )
    hint_file.write(
        "Don't edit the graphics files here.  They're generated by the build script. \n Edit sources in src/graphics."
    )
    hint_file.close()

    consists = iron_horse.get_consists_in_buy_menu_order()
    spritelayer_cargo_sets = iron_horse.get_spritelayer_cargo_sets()

    if use_multiprocessing == False:
        for consist in consists:
            run_consist_pipelines(consist)
        for spritelayer_cargo_set in spritelayer_cargo_sets:
            run_spritelayer_cargo_set_pipelines(spritelayer_cargo_set)
    else:
        # Would this go faster if the pipelines from each consist were placed in MP pool, not just the consist?
        # probably potato / potato tbh
        pool = Pool(processes=num_pool_workers)
        pool.map(run_consist_pipelines, consists)
        pool.map(run_spritelayer_cargo_set_pipelines, spritelayer_cargo_sets)
        pool.close()
        pool.join()

    report_sprites_complete(consists)

    for dir_name in ["tail_lights"]:
        target_path = os.path.join(graphics_input_path, dir_name)
        dest_path = os.path.join(graphics_output_path, dir_name)
        if os.path.exists(dest_path):
            shutil.rmtree(dest_path)
        shutil.copytree(target_path, dest_path)

    print(format((time() - start), ".2f") + "s")
Esempio n. 2
0
def main():
    print("[RENDER GRAPHICS] render_graphics.py")
    start = time()
    iron_horse.main()
    # get args passed by makefile
    makefile_args = utils.get_makefile_args(sys)
    # default to no mp, makes debugging easier (mp fails to pickle errors correctly)
    num_pool_workers = makefile_args.get("num_pool_workers", 0)
    if num_pool_workers == 0:
        use_multiprocessing = False
        # just print, no need for a coloured echo_message
        print("Multiprocessing disabled: (PW=0)")
    else:
        use_multiprocessing = True
        # just print, no need for a coloured echo_message
        print("Multiprocessing enabled: (PW=" + str(num_pool_workers) + ")")

    graphics_input_path = os.path.join(currentdir, "src", "graphics")
    graphics_output_path = os.path.join(iron_horse.generated_files_path,
                                        "graphics")
    if not os.path.exists(graphics_output_path):
        os.mkdir(graphics_output_path)

    hint_file = codecs.open(
        os.path.join(graphics_output_path,
                     "_graphics_files_here_are_generated.txt"),
        "w",
        "utf8",
    )
    hint_file.write(
        "Don't edit the graphics files here.  They're generated by the build script. \n Edit sources in src/graphics."
    )
    hint_file.close()

    consists = iron_horse.get_consists_in_buy_menu_order()

    # get a list of 2-tuple pairs for spritelayer cargos + cargo sets
    # a list format is wanted for convenience with graphics multiprocessing pool
    # the parent spritelayer_cargo object must be passed with the cargo set as cargo sets have render-time properties which change according to context
    # but cargo_sets are global and reused across spritelayer_cargos, so they can't just store a single reference to their spritelayer_cargo parent
    spritelayer_cargo_set_pairs = []
    for spritelayer_cargo in iron_horse.registered_spritelayer_cargos:
        for cargo_set in spritelayer_cargo.cargo_sets:
            spritelayer_cargo_set_pairs.append((spritelayer_cargo, cargo_set))

    if use_multiprocessing == False:
        for spritelayer_cargo_set_pair in spritelayer_cargo_set_pairs:
            run_spritelayer_cargo_set_pipelines(spritelayer_cargo_set_pair)
        for consist in consists:
            run_consist_pipelines(consist)
    else:
        # Would this go faster if the pipelines from each consist were placed in MP pool, not just the consist?
        # probably potato / potato tbh
        pool = Pool(processes=num_pool_workers)
        pool.map(run_spritelayer_cargo_set_pipelines,
                 spritelayer_cargo_set_pairs)
        pool.close()
        pool.join()
        # wait for first pool job to finish before starting
        pool = Pool(processes=num_pool_workers)
        pool.map(run_consist_pipelines, consists)
        pool.close()
        pool.join()

    report_sprites_complete(consists)

    for dir_name in ["tail_lights"]:
        target_path = os.path.join(graphics_input_path, dir_name)
        dest_path = os.path.join(graphics_output_path, dir_name)
        if os.path.exists(dest_path):
            shutil.rmtree(dest_path)
        shutil.copytree(target_path, dest_path)

    print(format((time() - start), ".2f") + "s")
Esempio n. 3
0
import codecs  # used for writing files - more unicode friendly than standard open() module

import sys
import os

currentdir = os.curdir
from time import time

import iron_horse
import utils
import global_constants
from polar_fox import git_info

# get args passed by makefile
makefile_args = utils.get_makefile_args(sys)

# chameleon used in most template cases
from chameleon import PageTemplateLoader

# setup the places we look for templates
templates = PageTemplateLoader(os.path.join(currentdir, "src", "templates"))

# setting up a cache for compiled chameleon templates can significantly speed up template rendering
chameleon_cache_path = os.path.join(currentdir, global_constants.chameleon_cache_dir)
if not os.path.exists(chameleon_cache_path):
    os.mkdir(chameleon_cache_path)
os.environ["CHAMELEON_CACHE"] = chameleon_cache_path

generated_files_path = iron_horse.generated_files_path
Esempio n. 4
0
# we'll be processing some extra images and saving them into the img dir
images_dir_dst = os.path.join(static_dir_dst, 'img')

from chameleon import PageTemplateLoader # chameleon used in most template cases
# setup the places we look for templates
docs_templates = PageTemplateLoader(docs_src, format='text')

import global_constants as global_constants
import utils as utils
from incompatible_grfs import incompatible_grfs
import markdown

from PIL import Image

# get args passed by makefile
repo_vars = utils.get_makefile_args(sys)

# get the strings from base lang file so they can be used in docs
base_lang_strings = utils.parse_base_lang()

metadata = {}
metadata['dev_thread_url'] = 'http://www.tt-forums.net/viewtopic.php?t=41607'
metadata['repo_url'] = 'http://dev.openttdcoop.org/projects/firs/repository'
metadata['issue_tracker'] = 'http://dev.openttdcoop.org/projects/firs/issues'

import firs
# default sort for docs is by id
registered_cargos = sorted(firs.registered_cargos, key=lambda registered_cargos: registered_cargos.id)
registered_industries = sorted(firs.registered_industries, key=lambda registered_industries: registered_industries.id)
registered_economies = firs.registered_economies
economy_schemas = {}