basic advanced example

This commit is contained in:
Vysyr committed 2026-10-31 23:11:57 +01:00
1 parent 6fe57915e8
commit bd8edf5afb
29 files changed
+1501 -38

No files matched your search

+46
View File
@@ -0,0 +1,46 @@
"""Horizontal root travel, interpolation and accumulated playback loops."""
import importlib.util
from pathlib import Path
import sys
from types import SimpleNamespace
import unittest
from unittest.mock import MagicMock, patch
class Vector:
def __init__(self, x, y, z):
self.x, self.y, self.z = x, y, z
class RootMotionTests(unittest.TestCase):
def setUp(self):
unreal = MagicMock()
unreal.Vector = Vector
path = Path(__file__).resolve().parents[1] / "Content/Python/ue_workshop/root_motion.py"
spec = importlib.util.spec_from_file_location("ue_workshop._root_motion_test", path)
self.module = importlib.util.module_from_spec(spec)
with patch.dict(sys.modules, {"unreal": unreal}):
spec.loader.exec_module(self.module)
self.poses = [SimpleNamespace(translation=Vector(0, 0, 100)),
SimpleNamespace(translation=Vector(0, 50, 110)),
SimpleNamespace(translation=Vector(0, 100, 100))]
def test_horizontal_interpolation_keeps_vertical_motion_in_clip(self):
value = self.module.displacement(self.poses, 2.0, 0.5)
self.assertEqual((value.x, value.y, value.z), (0, 25, 0))
def test_end_and_repeated_playback_accumulate_instead_of_reset(self):
self.assertEqual(self.module.displacement(self.poses, 2.0, 2).y, 100)
self.assertEqual(self.module.displacement(self.poses, 2.0, 5).y, 250)
def test_before_start_has_no_displacement(self):
self.assertEqual(self.module.displacement(self.poses, 2.0, -1).y, 0)
def test_reverse_accumulates_backwards_without_initial_jump(self):
self.assertEqual(self.module.displacement(self.poses, 2.0, 0, reverse=True).y, 0)
self.assertEqual(self.module.displacement(self.poses, 2.0, 1, reverse=True).y, -50)
self.assertEqual(self.module.displacement(self.poses, 2.0, 5, reverse=True).y, -250)
def test_reverse_samples_the_end_of_a_nonuniform_trajectory(self):
self.poses[1].translation.y = 20
self.assertEqual(self.module.displacement(self.poses, 2.0, 0.5, reverse=True).y, -40)