private float UpdateAdvancing(IUpdateEventArgs args) { // advance through tile _agent.TileProgress += _agent.Stats.MovementSpeed * args.Ticks; // advance to next tile, if necessary while (_agent.TileProgress > 1 && _pathIndex < (_mapPath.Count - 1)) { // move to next tile _pathIndex += 1; _agent.TileProgress -= 1.0f; args.Manager.Move(_agent, _mapPath[_pathIndex]); } // are we done? if (_pathIndex == (_mapPath.Count - 1) && _agent.TileProgress >= 0.5f) { _state = PathMobBehaviourStates.EndOfPath; } // calculate Position UpdatePosition(); return(1.0f); }
public PathMobBehaviour(IExtendedAgent agent, IMapPath mapPath) { _agent = agent; _mapPath = mapPath; _state = PathMobBehaviourStates.Init; Priority = ModifierPriority.Base; }
private float UpdateInit(IUpdateEventArgs args) { // move into initial tile _pathIndex = 0; args.Manager.Move(_agent, _mapPath[_pathIndex]); _agent.TileProgress = 0.5f; // start in the center of our source tile _state = PathMobBehaviourStates.Advancing; return(1.0f); }
public void OnRemove(IExtendedAgent agent) { _state = PathMobBehaviourStates.Removed; }