Esempio n. 1
0
        protected override Vector3 KinematicProcess(float delta, Vector3 velocity, Vector3 rotationalVelocity)
        {
            var speed     = velocity.Length();
            var direction = velocity.Normalized();

            if (speed > 0)
            {
//                if (Mathf.Abs(direction.z) > 0)
//                {
                var forward = direction.z <= 0;

                TreePlayer.TransitionNodeSetCurrent(DirectionTransition,
                                                    forward ? TransitionForward : TransitionBackward);
                TreePlayer.Blend3NodeSetAmount(forward ? ForwardBlend : BackwardBlend, direction.x);
//                }
//                else
//                {
//                    TreePlayer.TransitionNodeSetCurrent(DirectionTransition, TransitionStrafe);
//                    TreePlayer.TransitionNodeSetCurrent(StrafeTransition,
//                        direction.x < 0 ? TransitionLeft : TransitionRight);
//                }

                TreePlayer.TransitionNodeSetCurrent(MoveTransition, TransitionMove);
                TreePlayer.TimescaleNodeSetScale(ScaleSpeed, speed);
            }
            else
            {
                TreePlayer.TransitionNodeSetCurrent(MoveTransition, TransitionIdle);
            }

            return(_offset.origin / delta);
        }
        // This also called when tree asset is changed
        // because BTWindow will set new dependencies to "PlaymodeWatcher"
        public void PlaymodeChanged(bool isPlaymode)
        {
            if (isPlaymode)
            {
                var lastPlayer = _currentPlayer;
                _currentPlayer = TreeSelector.CurrentPlayer;

                if (_currentPlayer != null)
                {
                    if (_currentPlayer != lastPlayer)
                    {
                        Clear();
                        RegenerateNodeAccessor();
                        BindToTasks(lastPlayer, false);
                        BindToTasks(_currentPlayer, true);

                        foreach (var data in _currentPlayer.Tree.NodeData.TaskData)
                        {
                            if (data.TaskImplementation.IsRunning)
                            {
                                TaskStarted(data.TaskImplementation);
                            }
                        }
                    }
                }
            }
            else
            {
                Clear();
            }
        }
 // ShouldBind == false means unbind
 private void BindToTasks(TreePlayer player, bool shouldBind)
 {
     if (player != null)
     {
         foreach (var data in player.Tree.NodeData.TaskData)
         {
             if (shouldBind)
             {
                 data.TaskImplementation.OnStarted  += TaskStarted;
                 data.TaskImplementation.OnFinished += TaskFinished;
             }
             else
             {
                 data.TaskImplementation.OnStarted  -= TaskStarted;
                 data.TaskImplementation.OnFinished -= TaskFinished;
             }
         }
     }
 }
Esempio n. 4
0
 protected virtual void ResetAnimations()
 {
     TreePlayer.TransitionNodeSetCurrent(MoveTransition, TransitionIdle);
 }