protected override void CreateGraph(Entity entity, ref Rig rig, ref BlendTree1DRuntime blendTreeData) { var ecb = EcbSystem.CreateCommandBuffer(); var nodeSet = GraphSystem.Set; //Created Node var data = new BlendTree1DKernelRuntime { BlendTreeNode = nodeSet.Create <BlendTree1DNode>(), ComponentNode = nodeSet.CreateComponentNode(entity), DeltaTimeNode = nodeSet.Create <ConvertDeltaTimeToFloatNode>(), InputNode = nodeSet.Create <Blend1DExtractParameterNode>(), FloatRcpNode = nodeSet.Create <FloatRcpNode>(), TimeCounterNode = nodeSet.Create <TimeCounterNode>(), TimeLoopNode = nodeSet.Create <TimeLoopNode>() }; //Connected Node nodeSet.Connect(data.ComponentNode, data.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts .Input); //Connect the ComponentNode to the DeltaTime and passes update on component to DeltaTimeNode input nodeSet.Connect(data.DeltaTimeNode, ConvertDeltaTimeToFloatNode.KernelPorts.Float, data.TimeCounterNode, TimeCounterNode.KernelPorts .DeltaTime); //DeltaTime Node passes the deltaTime (float) output to TimeCounterNode Input Time nodeSet.Connect(data.TimeCounterNode, TimeCounterNode.KernelPorts.Time, data.TimeLoopNode, TimeLoopNode.KernelPorts .InputTime); //TimeCounter Node passes The Time outpit to the TimeLoopNode InputTime input nodeSet.Connect(data.TimeLoopNode, TimeLoopNode.KernelPorts.OutputTime, data.BlendTreeNode, BlendTree1DNode.KernelPorts .NormalizedTime); //TimeLoopNode passes the OutputTime output to the BlendTreeNode normalizedTime Input nodeSet.Connect(data.BlendTreeNode, BlendTree1DNode.KernelPorts.Duration, data.FloatRcpNode, FloatRcpNode.KernelPorts.Input); //BlendTreeNode passes the Duration output to the FloatRcpNode Input nodeSet.Connect(data.FloatRcpNode, FloatRcpNode.KernelPorts.Output, data.TimeCounterNode, TimeCounterNode.KernelPorts.Speed); //FloatRcpNode passes the output to the TimeCounterNode Speed Input nodeSet.Connect(data.BlendTreeNode, BlendTree1DNode.KernelPorts.Output, data.ComponentNode, NodeSetAPI.ConnectionType.Feedback); nodeSet.Connect(data.ComponentNode, data.InputNode, Blend1DExtractParameterNode.KernelPorts.Input, NodeSetAPI.ConnectionType.Feedback); nodeSet.Connect(data.InputNode, Blend1DExtractParameterNode.KernelPorts.Output, data.BlendTreeNode, BlendTree1DNode.KernelPorts .BlendParameter); //InputNode passes the Output to the BlendTreeNode BlendParameter output //Send Message to Update Node param nodeSet.SendMessage(data.TimeLoopNode, TimeLoopNode.SimulationPorts.Duration, 1.0f); nodeSet.SendMessage(data.BlendTreeNode, BlendTree1DNode.SimulationPorts.Rig, rig); nodeSet.SendMessage(data.BlendTreeNode, BlendTree1DNode.SimulationPorts.BlendTree, blendTreeData.BlendTree); ecb.AddComponent(entity, data); }
public void Convert(Entity entity, EntityManager dstManager, [NotNull] GameObjectConversionSystem conversionSystem) { conversionSystem.DeclareAssetDependency(gameObject, blendTree); var rigComponent = dstManager.GetComponentData <Rig>(entity); var clipConfiguration = new ClipConfiguration { Mask = ClipConfigurationMask.LoopValues }; var bakeOptions = new BakeOptions { RigDefinition = rigComponent.Value, ClipConfiguration = clipConfiguration, SampleRate = 60.0f }; var blendTreeIndex = BlendTreeConversion.Convert(blendTree, entity, dstManager, bakeOptions); var blendTreeComponents = dstManager.GetBuffer <BlendTree1DResource>(entity); var blobBlendTreeRef = BlendTreeBuilder.CreateBlendTree1DFromComponents(blendTreeComponents[blendTreeIndex], dstManager, entity); conversionSystem.BlobAssetStore.AddUniqueBlobAsset(ref blobBlendTreeRef); var blendTreeRuntime = new BlendTree1DRuntime { BlendTree = blobBlendTreeRef }; dstManager.AddComponentData(entity, blendTreeRuntime); var blendTreeParamRuntime = new BlendTree1DParamRuntime { VelocityStep = velocityStep, VelocityX = 0.0f }; dstManager.AddComponentData(entity, blendTreeParamRuntime); dstManager.AddComponent <DeltaTimeRuntime>(entity); }
protected abstract void CreateGraph(Entity entity, ref Rig rig, ref BlendTree1DRuntime blendTreeData);