private int ToNodeIndex(ActionStateIndex actionStateIndex)
 {
     return(_chunks[actionStateIndex.ChunkIndex].Position * _containerInfo[0].NodeCount + actionStateIndex.NodeIndex);
 }
        public void SetNodeCycle(ActionStateIndex stateIndex, NodeCycle cycle)
        {
            var index     = ToNodeIndex(stateIndex);
            var node      = _nodes[index];
            var chunk     = _chunks[stateIndex.ChunkIndex];
            var currCycle = node.Cycle;

            switch (cycle)
            {
            case NodeCycle.Active:
                if (!currCycle.Has(NodeCycle.Active))
                {
                    currCycle     = currCycle.Add(cycle);
                    chunk.Active += 1;
                }
                break;

            case NodeCycle.Sleeping:
                if (!currCycle.Has(NodeCycle.Sleeping))
                {
                    currCycle       = currCycle.Add(cycle);
                    chunk.Sleeping += 1;
                    if (currCycle.Has(NodeCycle.Waking))
                    {
                        currCycle     = currCycle.Remove(NodeCycle.Waking);
                        chunk.Waking -= 1;
                    }
                }
                break;

            case NodeCycle.Waking:
                if (!currCycle.Has(NodeCycle.Waking))
                {
                    currCycle     = currCycle.Add(cycle);
                    chunk.Waking += 1;
                    if (currCycle.Has(NodeCycle.Sleeping))
                    {
                        currCycle       = currCycle.Remove(NodeCycle.Sleeping);
                        chunk.Sleeping -= 1;
                    }
                }
                break;

            case NodeCycle.Inactive:
                if (currCycle.Has(NodeCycle.Active))
                {
                    chunk.Active -= 1;
                }
                if (currCycle.Has(NodeCycle.Waking))
                {
                    chunk.Waking -= 1;
                }
                if (currCycle.Has(NodeCycle.Sleeping))
                {
                    chunk.Sleeping -= 1;
                }
                currCycle = cycle;
                break;
            }
            node.Cycle    = currCycle;
            _nodes[index] = node;
            _chunks[stateIndex.ChunkIndex] = chunk;
        }
 public NodeCycle GetNodeCycle(ActionStateIndex stateIndex)
 {
     return(_nodes[ToNodeIndex(stateIndex)].Cycle);
 }
示例#4
0
 public ref T GetBlackboard <T>(ActionStateIndex stateIndex) where T : struct
 {
     return(ref Blackboard[stateIndex.ChunkIndex].RefGet <T>());
     //return ref BlackboardArray[stateIndex.ChunkIndex].GetValue<T>();
 }