コード例 #1
0
ファイル: DynamicMixer.cs プロジェクト: filod/UnityGrocery
 public static void SetRig(NodeSet set, ref DynamicMixer dynamicMixer, DynamicBuffer <DynamicMixerInput> inputs,
                           BlobAssetReference <RigDefinition> rig)
 {
     dynamicMixer.Rig = rig;
     set.SendMessage(dynamicMixer.MixerBegin, MixerBeginNode.SimulationPorts.RigDefinition, rig);
     set.SendMessage(dynamicMixer.MixerEnd, MixerEndNode.SimulationPorts.RigDefinition, rig);
     for (int i = 0; i < inputs.Length; i++)
     {
         set.SendMessage(inputs[i].AddNode, MixerAddNode.SimulationPorts.RigDefinition, rig);
     }
 }
コード例 #2
0
ファイル: DynamicMixer.cs プロジェクト: filod/UnityGrocery
    public static DynamicMixer AddComponents(EntityCommandBuffer cmdBuffer, NodeSet set, Entity entity)
    {
        var dynamicMixer = new DynamicMixer
        {
            MixerBegin = set.Create <MixerBeginNode>(),
            MixerEnd   = set.Create <MixerEndNode>(),
        };

        cmdBuffer.AddComponent(entity, dynamicMixer);
        cmdBuffer.AddBuffer <DynamicMixerInput>(entity);
        set.Connect(dynamicMixer.MixerBegin, MixerBeginNode.KernelPorts.Output, dynamicMixer.MixerEnd,
                    MixerEndNode.KernelPorts.Input);

        return(dynamicMixer);
    }
コード例 #3
0
ファイル: DynamicMixer.cs プロジェクト: filod/UnityGrocery
 static void DestroyNodes(NodeSet set, DynamicMixer dynamicMixer, DynamicBuffer <DynamicMixerInput> inputs)
 {
     if (set.Exists(dynamicMixer.MixerBegin))
     {
         set.Destroy(dynamicMixer.MixerBegin);
     }
     if (set.Exists(dynamicMixer.MixerEnd))
     {
         set.Destroy(dynamicMixer.MixerEnd);
     }
     for (int i = 0; i < inputs.Length; i++)
     {
         set.Destroy(inputs[i].AddNode);
     }
 }
コード例 #4
0
ファイル: DynamicMixer.cs プロジェクト: filod/UnityGrocery
    public static void AddInput(NodeSet set, ref DynamicMixer dynamicMixer, DynamicBuffer <DynamicMixerInput> inputs,
                                Entity sourceEntity, NodeHandle sourceNode, OutputPortID sourcePortId)
    {
        // Attempt to find unsused input
        for (int i = 0; i < inputs.Length; i++)
        {
            var input = inputs[i];
            if (input.SourceEntity == Entity.Null)
            {
//                GameDebug.Log("Added input at index:" + i);

                input.SourceEntity = sourceEntity;
                input.SourceNode   = sourceNode;
                input.SourcePortId = sourcePortId;
                inputs[i]          = input;

                set.Connect(sourceNode, sourcePortId, input.AddNode, (InputPortID)MixerAddNode.KernelPorts.Add);
                return;
            }
        }

        // Create new input
//        GameDebug.Log("Added input. New input index:" + inputs.Length);
        var newNode = set.Create <MixerAddNode>();

        set.SendMessage(newNode, MixerAddNode.SimulationPorts.RigDefinition, dynamicMixer.Rig);
        set.Connect(sourceNode, sourcePortId, newNode, (InputPortID)MixerAddNode.KernelPorts.Add);

        //  First node
        if (inputs.Length == 0)
        {
            set.Disconnect(dynamicMixer.MixerBegin, MixerBeginNode.KernelPorts.Output, dynamicMixer.MixerEnd,
                           MixerEndNode.KernelPorts.Input);

            // Connect begin to add node
            set.Connect(dynamicMixer.MixerBegin, MixerBeginNode.KernelPorts.Output, newNode,
                        MixerAddNode.KernelPorts.Input);
            set.Connect(dynamicMixer.MixerBegin, MixerBeginNode.KernelPorts.SumWeight, newNode,
                        MixerAddNode.KernelPorts.SumWeightInput);

            // Connect Add node to end
            set.Connect(newNode, MixerAddNode.KernelPorts.Output, dynamicMixer.MixerEnd,
                        MixerEndNode.KernelPorts.Input);
            set.Connect(newNode, MixerAddNode.KernelPorts.SumWeightOutput, dynamicMixer.MixerEnd,
                        MixerEndNode.KernelPorts.SumWeight);
        }
        else
        {
            var prevInput = inputs[inputs.Length - 1];

            // Disconnect prev from end
            set.Disconnect(prevInput.AddNode, MixerAddNode.KernelPorts.Output, dynamicMixer.MixerEnd,
                           MixerEndNode.KernelPorts.Input);
            set.Disconnect(prevInput.AddNode, MixerAddNode.KernelPorts.SumWeightOutput, dynamicMixer.MixerEnd,
                           MixerEndNode.KernelPorts.SumWeight);

            // Connect prev to new node
            set.Connect(prevInput.AddNode, MixerAddNode.KernelPorts.Output, newNode, MixerAddNode.KernelPorts.Input);
            set.Connect(prevInput.AddNode, MixerAddNode.KernelPorts.SumWeightOutput, newNode,
                        MixerAddNode.KernelPorts.SumWeightInput);

            // Connect new node to end
            set.Connect(newNode, MixerAddNode.KernelPorts.Output, dynamicMixer.MixerEnd,
                        MixerEndNode.KernelPorts.Input);
            set.Connect(newNode, MixerAddNode.KernelPorts.SumWeightOutput, dynamicMixer.MixerEnd,
                        MixerEndNode.KernelPorts.SumWeight);
        }

        var newInput = new DynamicMixerInput
        {
            SourceEntity = sourceEntity,
            SourceNode   = sourceNode,
            SourcePortId = sourcePortId,
            AddNode      = newNode,
        };

        inputs.Add(newInput);
    }