示例#1
0
        public void Update()
        {
            if (!Enabled)
            {
                return;
            }

            UpdateExtraBeat();

            if (!IsPlanning && _currentBeat != null && _currentPlan != null)
            {
                if (!_currentBeat.Update(_worldState))
                {
                    OnBeatFinishedExecution(_currentBeat);

                    _currentBeat = _currentPlan.NextBeat();
                    if (_currentBeat == null || !_currentBeat.MeetsPreconditions(_worldState))
                    {
                        Replan();
                    }
                    else
                    {
                        _currentBeat.Perform();
                    }
                }
            }
        }
示例#2
0
 private void OnFinishedPlanning()
 {
     if (_currentPlan != null)
     {
         _currentBeat = _currentPlan.NextBeat();
         _currentBeat.Perform();
     }
 }
示例#3
0
        private void UpdateExtraBeat()
        {
            if (_extraBeat == null)
            {
                if (!IsPlanning && Time.time - _lastRunExtraBeat > _frequencyToRunExtraBeats)
                {
                    _extraBeat = SelectExtraBeat();
                    if (_extraBeat != null)
                    {
                        _extraBeat.Perform();
                    }
                }
            }
            else if (!_extraBeat.Update(_worldState))
            {
                OnBeatFinishedExecution(_extraBeat);

                _extraBeat        = null;
                _lastRunExtraBeat = Time.time;
            }
        }