protected override void CreateGraph(Entity e, ref Rig rig, ref RigRemapRuntime setup)
    {
        var ecb = EcbSystem.CreateCommandBuffer();
        var set = GraphSystem.Set;

        var data = new RigRemapKernelRuntime
        {
            ClipPlayerNode = set.Create <ClipPlayerNode>(),
            DeltaTimeNode  = set.Create <ConvertDeltaTimeToFloatNode>(),
            EntityNode     = set.CreateComponentNode(e),
            RemapperNode   = set.Create <RigRemapperNode>()
        };

        set.SetData(data.ClipPlayerNode, ClipPlayerNode.KernelPorts.Speed, 1.0f);

        set.Connect(data.EntityNode, data.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts.Input);
        set.Connect(data.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts.Float, data.ClipPlayerNode,
                    ClipPlayerNode.KernelPorts.DeltaTime);
        set.Connect(data.ClipPlayerNode, ClipPlayerNode.KernelPorts.Output, data.RemapperNode,
                    RigRemapperNode.KernelPorts.Input);
        set.Connect(data.RemapperNode, RigRemapperNode.KernelPorts.Output, data.EntityNode,
                    NodeSetAPI.ConnectionType.Feedback);

        set.SendMessage(data.ClipPlayerNode, ClipPlayerNode.SimulationPorts.Configuration,
                        new ClipConfiguration {
            Mask = ClipConfigurationMask.LoopTime
        });

        //The playerClipNode Rig input will retrieve the srcRig that we want to copy since the animation clip is mapped to that rig.
        set.SendMessage(data.ClipPlayerNode, ClipPlayerNode.SimulationPorts.Rig, new Rig {
            Value = setup.SrcRig
        });
        set.SendMessage(data.ClipPlayerNode, ClipPlayerNode.SimulationPorts.Clip, setup.SrcClip);
        //The Rig we want to remap to
        set.SendMessage(data.RemapperNode, RigRemapperNode.SimulationPorts.SourceRig, new Rig {
            Value = setup.SrcRig
        });
        //The Rig that we are currently mapped to
        set.SendMessage(data.RemapperNode, RigRemapperNode.SimulationPorts.DestinationRig, rig);
        set.SendMessage(data.RemapperNode, RigRemapperNode.SimulationPorts.RemapTable, setup.RemapTable);

        ecb.AddComponent(e, data);
    }
    public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
    {
        var dstRig = GetComponent <RigComponent>();
        var srcRig = sourceRigPrefab.GetComponent <RigComponent>();
        var query  = CreateRemapQuery(srcRig, dstRig, retargetMap);

        var srcRigPrefab     = conversionSystem.GetPrimaryEntity(sourceRigPrefab);
        var srcRigDefinition = dstManager.GetComponentData <Rig>(srcRigPrefab);
        var dstRigDefinition = dstManager.GetComponentData <Rig>(entity);

        var setup = new RigRemapRuntime
        {
            SrcClip    = sourceClip.ToDenseClip(),
            SrcRig     = srcRigDefinition.Value,
            RemapTable = query.ToRigRemapTable(srcRigDefinition.Value, dstRigDefinition.Value)
        };

        dstManager.AddComponentData(entity, setup);
        dstManager.AddComponent <DeltaTimeRuntime>(entity);
    }
示例#3
0
 protected abstract void CreateGraph(Entity e, ref Rig rig, ref RigRemapRuntime setup);