Start handling AvatarAppearance messages
This commit is contained in:
@@ -4,6 +4,7 @@ import unittest
|
||||
|
||||
from hippolyzer.lib.base.datatypes import *
|
||||
from hippolyzer.lib.base.inventory import InventoryModel, SaleType, InventoryItem
|
||||
from hippolyzer.lib.base.message.message import Block, Message
|
||||
from hippolyzer.lib.base.wearables import Wearable, VISUAL_PARAMS
|
||||
|
||||
SIMPLE_INV = """\tinv_object\t0
|
||||
@@ -323,6 +324,270 @@ parameters 82
|
||||
textures 0
|
||||
"""
|
||||
|
||||
# TODO: Move appearance-related stuff elsewhere.
|
||||
|
||||
GIRL_NEXT_DOOR_APPEARANCE_MSG = Message(
|
||||
'AvatarAppearance',
|
||||
Block('Sender', ID=UUID(int=1), IsTrial=0),
|
||||
# We don't care about the value of this.
|
||||
Block('ObjectData', TextureEntry=b""),
|
||||
Block('VisualParam', ParamValue=9),
|
||||
Block('VisualParam', ParamValue=30),
|
||||
Block('VisualParam', ParamValue=71),
|
||||
Block('VisualParam', ParamValue=32),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=132),
|
||||
Block('VisualParam', ParamValue=10),
|
||||
Block('VisualParam', ParamValue=76),
|
||||
Block('VisualParam', ParamValue=84),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=43),
|
||||
Block('VisualParam', ParamValue=83),
|
||||
Block('VisualParam', ParamValue=113),
|
||||
Block('VisualParam', ParamValue=68),
|
||||
Block('VisualParam', ParamValue=73),
|
||||
Block('VisualParam', ParamValue=43),
|
||||
Block('VisualParam', ParamValue=35),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=7),
|
||||
Block('VisualParam', ParamValue=132),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=76),
|
||||
Block('VisualParam', ParamValue=91),
|
||||
Block('VisualParam', ParamValue=129),
|
||||
Block('VisualParam', ParamValue=106),
|
||||
Block('VisualParam', ParamValue=76),
|
||||
Block('VisualParam', ParamValue=58),
|
||||
Block('VisualParam', ParamValue=99),
|
||||
Block('VisualParam', ParamValue=73),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=203),
|
||||
Block('VisualParam', ParamValue=48),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=150),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=114),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=76),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=40),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=140),
|
||||
Block('VisualParam', ParamValue=86),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=99),
|
||||
Block('VisualParam', ParamValue=84),
|
||||
Block('VisualParam', ParamValue=53),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=66),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=100),
|
||||
Block('VisualParam', ParamValue=216),
|
||||
Block('VisualParam', ParamValue=214),
|
||||
Block('VisualParam', ParamValue=204),
|
||||
Block('VisualParam', ParamValue=204),
|
||||
Block('VisualParam', ParamValue=204),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=89),
|
||||
Block('VisualParam', ParamValue=109),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=61),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=115),
|
||||
Block('VisualParam', ParamValue=76),
|
||||
Block('VisualParam', ParamValue=91),
|
||||
Block('VisualParam', ParamValue=158),
|
||||
Block('VisualParam', ParamValue=102),
|
||||
Block('VisualParam', ParamValue=109),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=193),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=132),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=68),
|
||||
Block('VisualParam', ParamValue=35),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=97),
|
||||
Block('VisualParam', ParamValue=92),
|
||||
Block('VisualParam', ParamValue=79),
|
||||
Block('VisualParam', ParamValue=107),
|
||||
Block('VisualParam', ParamValue=160),
|
||||
Block('VisualParam', ParamValue=112),
|
||||
Block('VisualParam', ParamValue=63),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=159),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=73),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=102),
|
||||
Block('VisualParam', ParamValue=158),
|
||||
Block('VisualParam', ParamValue=145),
|
||||
Block('VisualParam', ParamValue=153),
|
||||
Block('VisualParam', ParamValue=163),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=122),
|
||||
Block('VisualParam', ParamValue=43),
|
||||
Block('VisualParam', ParamValue=94),
|
||||
Block('VisualParam', ParamValue=135),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=214),
|
||||
Block('VisualParam', ParamValue=204),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=56),
|
||||
Block('VisualParam', ParamValue=30),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=204),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=112),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=100),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=84),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=94),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=255),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=0),
|
||||
Block('VisualParam', ParamValue=25),
|
||||
Block('VisualParam', ParamValue=23),
|
||||
Block('VisualParam', ParamValue=51),
|
||||
Block('VisualParam', ParamValue=1),
|
||||
Block('VisualParam', ParamValue=127),
|
||||
Block('AppearanceData', AppearanceVersion=1, CofVersion=100, Flags=0),
|
||||
Block('AppearanceHover', HoverHeight=Vector3(0.0, 0.0, 0.0))
|
||||
)
|
||||
|
||||
|
||||
class TestWearable(unittest.TestCase):
|
||||
def test_parse(self):
|
||||
@@ -338,3 +603,17 @@ class TestWearable(unittest.TestCase):
|
||||
def test_visual_params(self):
|
||||
param = VISUAL_PARAMS.by_name("Eyelid_Inner_Corner_Up")
|
||||
self.assertEqual(param.value_max, 1.2)
|
||||
|
||||
def test_message_equivalent(self):
|
||||
wearable = Wearable.from_str(GIRL_NEXT_DOOR_SHAPE)
|
||||
parsed = VISUAL_PARAMS.parse_appearance_message(GIRL_NEXT_DOOR_APPEARANCE_MSG)
|
||||
|
||||
for i, (param_id, param_val) in enumerate(parsed.items()):
|
||||
param = VISUAL_PARAMS.by_id(param_id)
|
||||
if param.wearable != "shape":
|
||||
continue
|
||||
# A parameter may legitimately be missing from the shape depending on its age,
|
||||
# just assume it's the default value.
|
||||
expected_val = wearable.parameters.get(param_id, param.value_default)
|
||||
# This seems like quite a large delta. Maybe we should be using different quantization here.
|
||||
self.assertAlmostEqual(expected_val, param_val, delta=0.015)
|
||||
|
||||
Reference in New Issue
Block a user