35 lines
1.7 KiB
Python
35 lines
1.7 KiB
Python
"""Validate offline catalog timings against UE and play enum clips with automatic ends."""
|
|
import math
|
|
|
|
from ue_workshop import Scene, Sequence, Renderer, camera, lighting
|
|
from ue_workshop.animations import FighterAnimations, CreatureAnimations
|
|
from ue_workshop.characters import FIGHTER_MODEL, CREATURE_MODEL
|
|
from ue_workshop.skeletal import import_model
|
|
|
|
for model, name, catalog in ((FIGHTER_MODEL, "Fighter", FighterAnimations),
|
|
(CREATURE_MODEL, "Creature", CreatureAnimations)):
|
|
imported = import_model(model, name=name, reimport=False)
|
|
for clip in catalog:
|
|
assert math.isclose(clip.seconds, imported.animations[clip.key].get_play_length(),
|
|
rel_tol=0, abs_tol=0.000001), clip.key
|
|
|
|
scene = Scene("CatalogSmoke")
|
|
fighter = scene.skeletal_model(FIGHTER_MODEL, name="Fighter", rotation=(0, 0, 180))
|
|
scene.primitive("Cube", name="Floor", location=(0, 0, -10), scale=(20, 20, 0.2))
|
|
lighting.studio(scene)
|
|
cam = camera.create(scene, location=(450, -550, 300), fov=45)
|
|
shot = Sequence(scene, fps=24, frames=120)
|
|
shot.camera(cam)
|
|
draw = FighterAnimations.DRAW_A_GREAT_SWORD_1
|
|
attack = FighterAnimations.GREAT_SWORD_ATTACK
|
|
first = shot.animation(fighter, draw, start=0)
|
|
second_start = draw.frames(shot.fps) - 6
|
|
second = shot.animation(fighter, attack, start=second_start)
|
|
fast = shot.animation(fighter, attack, start=60, speed=2)
|
|
assert first.get_end_frame() == draw.frames(shot.fps)
|
|
assert second.get_end_frame() == second_start + attack.frames(shot.fps)
|
|
assert fast.get_end_frame() == 60 + attack.frames(shot.fps, speed=2)
|
|
assert second.get_editor_property("params").animation.get_name() == attack.key
|
|
shot.save(open_editor=False)
|
|
renderer = Renderer(width=640, height=360, samples=1, warmup=0, mp4=False)
|