Exemplo n.º 1
0
        private TaskState Move(Dwarf d, float dt, double dtd)
        {
            if (State == TaskState.NotActive)
            {
                if (d.MovePath.Count == 1)
                {

                }
                ChangeMoveTo(d);
            }

            // Improves hauling
            if (d.GetHoldingWorldObject() != null && d.GetHoldingWorldObject().Weight == MapElementWeight.Heavy)
                d.DidSomeHauling(dt);

            Vector2 addition = d.MoveToDirection * (float)DwarfRules.GetDwarfWalkSpeed(dtd, d);
            Vector2 newPosition = new Vector2(d.Position.X, d.Position.Y) + addition ;

            d.DistanceMoved = d.DistanceMoved + addition.Length();

            if (d.DistanceMoved >= d.MoveToDistance)
            {
                if (d.MovePath.Count == 0)
                    return TaskState.Success;
                d.ChangePosition(new Vector3(d.MoveTo.X, d.MoveTo.Y, 5));
                ChangeMoveTo(d);
            }
            else
                d.ChangePosition(new Vector3(newPosition.X, newPosition.Y, 5));

                return TaskState.Running;
        }