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); }
public ref T GetBlackboard <T>(ActionStateIndex stateIndex) where T : struct { return(ref Blackboard[stateIndex.ChunkIndex].RefGet <T>()); //return ref BlackboardArray[stateIndex.ChunkIndex].GetValue<T>(); }