Ignore:
Timestamp:
2013-07-24 23:56:47 (6 years ago)
Author:
dezhidki
Message:

Muokattu sotilaita viimeiseen muotoon.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Ai/Orders/OrderMove.cs

    r4635 r4646  
    1111    public class OrderMove : Order 
    1212    { 
    13         private float x, z; 
    14         private int ppi = 0; 
    15         private bool excludeEndSolidness; 
    16         private float stopDistance; 
    17         private int moveFails = 0; 
    18         private float lastDist = 0.0F; 
    19         private bool shouldFindPath = false; 
    20         private bool createNewPathFinder; 
     13        protected float x, z; 
     14        protected int ppi = 0; 
     15        protected bool excludeEndSolidness; 
     16        protected float stopDistance; 
     17        protected int moveFails = 0; 
     18        protected float lastDist = 0.0F; 
     19        protected bool shouldFindPath = false; 
     20        protected bool createNewPathFinder; 
     21        protected float turnDistance; 
     22        protected bool stopOnMoveFail; 
    2123 
    22         public OrderMove(float x, float z, float stopDistance = 2.0F, bool excludeEndSolidness = false, bool createNewPathFinder = true) 
     24        public OrderMove(float x, float z, float stopDistance = 2.0F, float turnDistance = 8.0F, bool excludeEndSolidness = false, bool createNewPathFinder = true, bool stopOnMoveFail = false) 
    2325        { 
    2426            this.stopDistance = stopDistance; 
     
    2729            this.x = x; 
    2830            this.z = z; 
     31            this.turnDistance = turnDistance; 
     32            this.stopOnMoveFail = stopOnMoveFail; 
    2933        } 
    3034 
     
    3337            base.Initialize(mob); 
    3438 
    35             if (createNewPathFinder && mob.DistanceTo(x, z) > 64.0F) 
     39            if (createNewPathFinder) 
    3640            { 
    37                 mob.PathFinder.InitializePathFinder((int)(mob.X / Viewport.TILESIZE), (int)(mob.Z / Viewport.TILESIZE), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), excludeEndSolidness); 
    38                 shouldFindPath = true; 
     41                if (mob.DistanceTo(x, z) > 64.0F) 
     42                { 
     43                    mob.PathFinder.InitializePathFinder((int)(mob.X / Viewport.TILESIZE), (int)(mob.Z / Viewport.TILESIZE), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE), excludeEndSolidness); 
     44                    shouldFindPath = true; 
     45                } 
     46                else 
     47                { 
     48                    shouldFindPath = false; 
     49                    mob.PathFinder.Reset(); 
     50                } 
    3951            } 
    4052            return this; 
     
    4860                    return; 
    4961                if (mob.PathFinder.IsPathFinding) 
    50                     mob.PathFinder.FindPath(50); 
     62                    mob.PathFinder.FindPath(125); 
    5163            } 
    5264 
    53             if (shouldFindPath && mob.PathFinder.Path.Count > 0 && ppi < mob.PathFinder.Path.Count) 
     65            if (mob.PathFinder.Path.Count > 0 && ppi < mob.PathFinder.Path.Count) 
    5466            { 
    5567                Node currentTarget = mob.PathFinder.Path[ppi]; 
     
    5870 
    5971                float dist = mob.DistanceTo(xtPoint, ztPoint); 
    60                 if (dist > 8.0F) 
     72                if (dist > turnDistance) 
    6173                { 
    6274                    if (mob.TurnTowards(xtPoint, ztPoint)) 
     
    93105        } 
    94106 
     107        public bool FailingToMove { get { return moveFails > 20; } } 
     108 
    95109        public override bool Finished 
    96110        { 
    97111            get 
    98112            { 
    99                 return (mob.DistanceTo(x, z) < stopDistance) || moveFails > 5 || !mob.PathFinder.CanFindPath; 
     113                return (mob.DistanceTo(x, z) < stopDistance) || !mob.PathFinder.CanFindPath || (stopOnMoveFail && moveFails > 20); 
    100114            } 
    101115        } 
Note: See TracChangeset for help on using the changeset viewer.