public static NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            var animator = blackboard.GetData <Animator>();

            animator.SetTrigger(blob.GetNodeData <SetAnimatorTriggerNode>(index).Value);
            return(NodeState.Success);
        }
Beispiel #2
0
    public NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
    {
        var intVariable = IntBlobVariable.GetData(index, blob, blackboard);// by value

        //ref var intVariable = IntBlobVariable.GetDataRef(index, blob, blackboard); // by reference
        return(NodeState.Success);
    }
Beispiel #3
0
        public static unsafe void ResetRuntimeData(this INodeBlob blob, int index, int count = 1)
        {
            var dest = (void *)blob.GetRuntimeDataPtr(index);
            var src  = (void *)blob.GetDefaultDataPtr(index);

            UnsafeUtility.MemCpy(dest, src, blob.GetNodeDataSize(index, count));
        }
        public NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var input  = bb.GetData <InputActionAssetComponent>().Value;
            var action = input.FindAction(ActionId);

            return(action != null && action.phase == Phase ? NodeState.Success : NodeState.Failure);
        }
        public NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            if (blob.GetState(index) == NodeState.Running)
            {
                var childIndex = blob.FirstOrDefaultChildIndex(index, state => state == NodeState.Running);
                return(childIndex != default ? VirtualMachine.Tick(childIndex, blob, blackboard) : 0);
            }

            var weightIndex      = 0;
            var currentMaxWeight = int.MinValue;
            var maxChildIndex    = 0;

            foreach (var childIndex in blob.GetChildrenIndices(index))
            {
                var weight = Weights[weightIndex];
                if (weight > currentMaxWeight)
                {
                    maxChildIndex    = childIndex;
                    currentMaxWeight = weight;
                }

                weightIndex++;
            }

            return(VirtualMachine.Tick(maxChildIndex, blob, blackboard));
        }
Beispiel #6
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var typeId = blob.GetTypeId(index);
            var state  = _TICKS[typeId](index, blob, bb);

            blob.SetState(index, state);
            return(state);
        }
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var look      = bb.GetData <BTInputLookData>().Value;
            var direction = quaternion.LookRotation(new float3(look.x, 0, look.y), math.up());

            bb.GetDataRef <BTTransformRotationData>().Value = direction;
            return(NodeState.Success);
        }
Beispiel #8
0
        public unsafe ref T GetDataRef(int index, INodeBlob blob, IBlackboard bb)
        {
            // NOTE: error CS8170: Struct members cannot return 'this' or other instance members by reference
            // return ref VariableRegisters<T>.GetDataRef(VariableId)(ref this, index, blob, bb);
            var ptr = UnsafeUtility.AddressOf(ref VariableRegisters <T> .GetDataRef(VariableId)(ref this, index, blob, bb));

            return(ref UnsafeUtilityEx.AsRef <T>(ptr));
        }
Beispiel #9
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard __)
        {
            var data  = blob.GetNodeData <NodeB>(index);
            var state = data.B == data.BB ? NodeState.Success : NodeState.Failure;

            Debug.Log($"[B]: tick {index} {state}");
            return(state);
        }
Beispiel #10
0
        public NodeState Tick(int index, INodeBlob blob, IBlackboard _)
        {
            if (PrioritySelectorIndex < 0)
            {
                return(NodeState.Failure);
            }

            ref var prioritySelectorData = ref blob.GetNodeDefaultData <PrioritySelectorNode>(PrioritySelectorIndex);
Beispiel #11
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            var data  = blob.GetNodeData <Data>(index);
            var state = data.A == 0 ? NodeState.Failure : NodeState.Success;

            Debug.Log($"[A]: tick {index} {state}");
            return(state);
        }
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            if (!bb.HasData <IsRunOnMainThread>())
            {
                return(blob.TickChildren(index, bb).FirstOrDefault());
            }

            ref var isRunOnMainThread = ref bb.GetDataRef <IsRunOnMainThread>();
Beispiel #13
0
 public static IEnumerable <NodeState> TickChildren(
     this INodeBlob blob
     , int index
     , IBlackboard bb
     )
 {
     return(TickChildren(blob, index, bb, state => false, state => !state.IsCompleted()));
 }
Beispiel #14
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var input  = bb.GetData <InputActionAssetComponent>().Value;
            var data   = blob.GetNodeData <CheckInputActionPhaseNode>(index);
            var action = input.FindAction(data.ActionId);

            return(action != null && action.phase == data.Phase ? NodeState.Success : NodeState.Failure);
        }
Beispiel #15
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var typeId = blob.GetTypeId(index);
            var ptr    = blob.GetRuntimeDataPtr(index);
            var state  = MetaNodeRegister.NODES[typeId].Tick.Invoke(ptr, index, blob, bb);

            blob.SetState(index, state);
            return(state);
        }
Beispiel #16
0
 public static IEnumerable <NodeState> TickChildren(
     this INodeBlob blob
     , int index
     , IBlackboard bb
     , Predicate <NodeState> breakCheck
     )
 {
     return(TickChildren(blob, index, bb, breakCheck, state => !state.IsCompleted()));
 }
Beispiel #17
0
        public static void ResetChildren(this INodeBlob blob, int parentIndex, IBlackboard bb)
        {
            // TODO: reset children which is not NodeState.None?
            var firstChildIndex = parentIndex + 1;
            var lastChildIndex  = blob.GetEndIndex(parentIndex);
            var childCount      = lastChildIndex - firstChildIndex;

            VirtualMachine.Reset(firstChildIndex, blob, bb, childCount);
        }
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var controller = bb.GetData <CharacterController>();

            if (controller == null)
            {
                return(NodeState.Failure);
            }
            ref var data     = ref blob.GetNodeData <CharacterSimpleMoveNode>(index);
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var input     = bb.GetData <BTInputMoveData>();
            var direction = new Vector3(input.Value.x, 0, input.Value.y).normalized;
            var speed     = blob.GetNodeData <InputMoveToCharacterVelocityNode>(index).Speed;

            bb.GetDataRef <BTCharacterSimpleMoveVelocity>().Value = direction * speed;
            return(NodeState.Success);
        }
Beispiel #20
0
        public static IEnumerable <ComponentType> GetAccessTypes(int index, INodeBlob blob)
        {
            var typeId       = blob.GetTypeId(index);
            var ptr          = blob.GetRuntimeDataPtr(index);
            var node         = MetaNodeRegister.NODES[typeId];
            var runtimeTypes = node.RuntimeTypes.SelectMany(r => r.Func.Invoke(ptr + r.Offset));

            return(node.StaticTypes.Concat(runtimeTypes));
        }
Beispiel #21
0
        public NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var deltaTime = bb.GetData <BehaviorTreeTickDeltaTime>().Value;
            var transform = bb.GetData <Transform>();
            var deltaMove = Velocity * deltaTime;

            transform.position += deltaMove;
            return(NodeState.Running);
        }
Beispiel #22
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var inputValue = bb.ReadInputActionValue <InputLookNode, Vector2>(index, blob);

            if (!inputValue.HasValue)
            {
                return(NodeState.Failure);
            }
            ref var data = ref blob.GetNodeData <InputLookNode>(index);
Beispiel #23
0
        public NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            if (blob.GetState(index) == NodeState.Running)
            {
                var childIndex = blob.FirstOrDefaultChildIndex(index, state => state == NodeState.Running);
                return(childIndex != default ? VirtualMachine.Tick(childIndex, blob, blackboard) : 0);
            }

            ref var data             = ref blob.GetNodeData <WeightRandomSelectorNode>(index);
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            if (blob.GetState(index) == NodeState.Running)
            {
                var childIndex = blob.GetChildrenIndices(index, state => state == NodeState.Running).FirstOrDefault();
                return(childIndex != default ? VirtualMachine.Tick(childIndex, blob, blackboard) : 0);
            }

            ref var data             = ref blob.GetNodeData <PrioritySelectorNode>(index);
Beispiel #25
0
        public NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var input     = InputMove.GetData(index, blob, bb);
            var direction = new Vector3(input.x, 0, input.y).normalized;
            var speed     = Speed.GetData(index, blob, bb);

            OutputVelocity.GetDataRef(index, blob, bb) = direction * speed;
            return(NodeState.Success);
        }
Beispiel #26
0
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            var childState = blob.TickChildren(index, blackboard).FirstOrDefault();

            if (childState == 0)
            {
                blob.ResetChildren(index, blackboard);
                childState = blob.TickChildren(index, blackboard).FirstOrDefault();
            }
            ref var data = ref blob.GetNodeData <RepeatTimesNode>(index);
Beispiel #27
0
 public static void Reset(int fromIndex, INodeBlob blob, IBlackboard bb, int count = 1)
 {
     blob.ResetStates(fromIndex, count);
     blob.ResetRuntimeData(fromIndex, count);
     for (var i = fromIndex; i < fromIndex + count; i++)
     {
         var typeId = blob.GetTypeId(i);
         _RESETS[typeId](i, blob, bb);
     }
 }
Beispiel #28
0
 public static void Reset(int fromIndex, INodeBlob blob, IBlackboard bb, int count = 1)
 {
     blob.ResetStates(fromIndex, count);
     blob.ResetRuntimeData(fromIndex, count);
     for (var i = fromIndex; i < fromIndex + count; i++)
     {
         var typeId = blob.GetTypeId(i);
         var ptr    = blob.GetRuntimeDataPtr(i);
         MetaNodeRegister.NODES[typeId].Reset.Invoke(ptr, i, blob, bb);
     }
 }
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard blackboard)
        {
            if (blob.GetState(index) == NodeState.Running)
            {
                var childIndex = blob.GetChildrenIndices(index, state => state == NodeState.Running).FirstOrDefault();
                return(childIndex != default ? VirtualMachine.Tick(childIndex, blob, blackboard) : 0);
            }

            var     chosenIndex = 0;
            uint    maxNumber   = 0;
            ref var random      = ref blackboard.GetDataRef <BehaviorTreeRandom>().Value;
        public static NodeState Tick(int index, INodeBlob blob, IBlackboard bb)
        {
            var inputValue = bb.ReadInputActionValue <InputAimPositionNode, Vector2>(index, blob);

            if (!inputValue.HasValue)
            {
                return(NodeState.Failure);
            }
            bb.GetDataRef <BTInputAimPositionData>().Value = inputValue.Value;
            return(NodeState.Success);
        }