feat: add cesium traffic signal countdowns
This commit is contained in:
@@ -127,12 +127,12 @@ EXPORT_EMISSION_OVERRIDES = {
|
||||
|
||||
|
||||
def cli_args():
|
||||
values = {"blend": None, "glb": None, "metadata": None}
|
||||
values = {"blend": None, "glb": None, "metadata": None, "dynamic_glb": None, "countdown_0_glb": None, "countdown_1_glb": None}
|
||||
argv = sys.argv[sys.argv.index("--") + 1:] if "--" in sys.argv else []
|
||||
i = 0
|
||||
while i < len(argv):
|
||||
if argv[i].startswith("--") and i + 1 < len(argv):
|
||||
values[argv[i][2:]] = argv[i + 1]
|
||||
values[argv[i][2:].replace("-", "_")] = argv[i + 1]
|
||||
i += 2
|
||||
else:
|
||||
i += 1
|
||||
@@ -609,6 +609,8 @@ def export(args):
|
||||
|
||||
material_map = {}
|
||||
meshes = []
|
||||
dynamic_meshes = []
|
||||
countdown_meshes = {0: [], 1: []}
|
||||
unwrapped = set()
|
||||
for obj in bpy.context.scene.objects:
|
||||
if obj.type != "MESH":
|
||||
@@ -617,7 +619,14 @@ def export(args):
|
||||
continue
|
||||
if obj.hide_viewport or obj.hide_render:
|
||||
continue
|
||||
meshes.append(obj)
|
||||
if any(c.name == "06_TrafficSignalsDynamic" for c in obj.users_collection):
|
||||
groups = {slot.material.name for slot in obj.material_slots if slot.material}
|
||||
group = (0 if any("Countdown Group 0" in name for name in groups)
|
||||
else 1 if any("Countdown Group 1" in name for name in groups)
|
||||
else None)
|
||||
(countdown_meshes[group] if group is not None else dynamic_meshes).append(obj)
|
||||
else:
|
||||
meshes.append(obj)
|
||||
apply_mesh_modifiers(obj)
|
||||
# Hundreds of grass tufts share four mesh datablocks; unwrapping and
|
||||
# triangulating are properties of the mesh, so once per datablock.
|
||||
@@ -642,6 +651,14 @@ def export(args):
|
||||
slot.material = material_map[source.name]
|
||||
|
||||
export_glb(args["glb"], meshes)
|
||||
if args.get("dynamic_glb"):
|
||||
if not dynamic_meshes:
|
||||
raise RuntimeError("Dynamic traffic signal collection is empty")
|
||||
export_glb(args["dynamic_glb"], dynamic_meshes)
|
||||
for group, key in ((0, "countdown_0_glb"), (1, "countdown_1_glb")):
|
||||
if not countdown_meshes[group]:
|
||||
raise RuntimeError("Traffic countdown collection %d is empty" % group)
|
||||
export_glb(args[key], countdown_meshes[group])
|
||||
semantic_assets = semantic_asset_specs(args["glb"], meshes)
|
||||
for asset in semantic_assets:
|
||||
export_glb(asset["path"], asset["meshes"])
|
||||
@@ -664,6 +681,19 @@ def export(args):
|
||||
"type": "model",
|
||||
"url": os.path.basename(args["glb"]),
|
||||
"enabled": True,
|
||||
}, {
|
||||
"id": "traffic-dynamic",
|
||||
"label": "Traffic signals dynamic",
|
||||
"type": "model",
|
||||
"url": os.path.basename(args["dynamic_glb"]) if args.get("dynamic_glb") and dynamic_meshes else "",
|
||||
"enabled": True,
|
||||
"category": "dynamic",
|
||||
}, {
|
||||
"id": "traffic-countdown-0", "label": "Traffic countdown group 0", "type": "model",
|
||||
"url": os.path.basename(args["countdown_0_glb"]), "enabled": True, "category": "countdown", "phaseGroup": 0,
|
||||
}, {
|
||||
"id": "traffic-countdown-1", "label": "Traffic countdown group 1", "type": "model",
|
||||
"url": os.path.basename(args["countdown_1_glb"]), "enabled": True, "category": "countdown", "phaseGroup": 1,
|
||||
}] + [{
|
||||
"id": asset["id"],
|
||||
"label": asset["label"],
|
||||
|
||||
Reference in New Issue
Block a user