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()); } }
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); }