Beispiel #1
0
        public void SetAction(string acStr)
        {
            if (acStr.Equals(_actionStr) || acStr.Equals(""))
            {
                return;
            }
            var acStance = Stance.ByString(acStr);

            if (acStance != Stance.Id.None)
            {
                SetStance(acStance);
            }
            else
            {
                Action = _drawInfo.GetAction(acStr, 0);
                if (Action == null)
                {
                    return;
                }
                _actFrame  = 0;
                _steLapSed = 0;
                _actionStr = acStr;
                _stance.Set(Action.Stance());
                _stFrame.Set(Action.GetFrame());
            }
        }
Beispiel #2
0
        public bool Update(short timeStep)
        {
            // todo
            if (timeStep == 0)
            {
                _stance.Normalize();
                _stFrame.Normalize();
                _expression.Normalize();
                _expFrame.Normalize();
            }

            _alerted.Update();
            var aniEnd = false;

            if (Action == null)
            {
                var delay = GetDelay(_stance.Get(), _stFrame.Get());
                var delta = delay - _steLapSed;
                if (timeStep >= delta)
                {
                    _steLapSed = (short)(timeStep - delta);
                    var nextFrame = GetNextFrame(_stance.Get(), _stFrame.Get());
                    var threshold = (float)delta / timeStep;
                    _stFrame.Next(nextFrame, threshold);
                    if (_stFrame.Get() == 0)
                    {
                        aniEnd = true;
                    }
                }
                else
                {
                    _stance.Normalize();
                    _stFrame.Normalize();
                    _steLapSed += timeStep;
                }
            }
            else
            {
                var delay = Action.Delay;
                var delta = (short)(delay - _steLapSed);
                if (timeStep >= delta)
                {
                    _steLapSed = (short)(timeStep - delta);
                    _actFrame  = _drawInfo.NextActionFrame(_actionStr, _actFrame);
                    if (_actFrame > 0)
                    {
                        Action = _drawInfo.GetAction(_actionStr, _actFrame);
                        var threshold = (float)delta / timeStep;
                        _stance.Next(Action.Stance(), threshold);
                        _stFrame.Next(Action.GetFrame(), threshold);
                    }
                    else
                    {
                        aniEnd     = true;
                        Action     = null;
                        _actionStr = "";
                        SetStance(Stance.Id.Stand1);
                    }
                }
                else
                {
                    _stance.Normalize();
                    _stFrame.Normalize();
                    _steLapSed += timeStep;
                }
            }

            var expDelay = Face.GetDelay(_expression.Get(), _expFrame.Get());
            var expDelta = expDelay - _expELapSed;

            if (timeStep >= expDelta)
            {
                _expELapSed = (short)(timeStep - expDelta);
                var nextExpFrame = Face.NextFrame(_expression.Get(), _expFrame.Get());
                var fcThreshold  = (float)expDelta / timeStep;
                _expFrame.Next(nextExpFrame, fcThreshold);
                if (_expFrame.Get() == 0)
                {
                    _expression.Next(
                        _expression.Get() == Expression.Id.Default ? Expression.Id.Blink : Expression.Id.Default,
                        fcThreshold);
                }
            }
            else
            {
                _expression.Normalize();
                _expFrame.Normalize();
                _expELapSed += timeStep;
            }

            return(aniEnd);
        }