source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Ai/Orders/OrderMove.cs @ 4581

Revision 4581, 2.0 KB checked in by dezhidki, 8 years ago (diff)

Talletus.

Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using CastleMaster.Ai.Orders;
6using CastleMaster.Graphics;
7using CastleMaster.Units.Mobs;
8
9namespace IsometricEngineTest.Ai.Orders
10{
11    public class OrderMove : Order
12    {
13        private float x, z;
14        private int ppi = 0;
15
16        public OrderMove(float x, float z)
17        {
18            this.x = x;
19            this.z = z;
20        }
21
22        public override Order Initialize(Mob mob)
23        {
24            base.Initialize(mob);
25            mob.PathFinder.InitializePathFinder((int)(mob.X / Viewport.TILESIZE), (int)(mob.Z / Viewport.TILESIZE), (int)(x / Viewport.TILESIZE), (int)(z / Viewport.TILESIZE));
26            return this;
27        }
28
29        public override void Update()
30        {
31            if (!mob.PathFinder.CanFindPath)
32                return;
33            if (mob.PathFinder.IsPathFinding)
34                mob.PathFinder.FindPath(50);
35
36            if (mob.PathFinder.Path.Count > 0 && ppi < mob.PathFinder.Path.Count)
37            {
38                Node currentTarget = mob.PathFinder.Path[ppi];
39                float xtPoint = currentTarget.X * Viewport.TILESIZE + 8.0F;
40                float ztPoint = currentTarget.Z * Viewport.TILESIZE + 8.0F;
41
42                if (mob.DistanceTo(xtPoint, ztPoint) > 8.0F)
43                {
44                    if (mob.TurnTowards(xtPoint, ztPoint))
45                        mob.MoveForward();
46                }
47                else
48                    ppi++;
49            }
50            else
51            {
52                if (mob.DistanceTo(x, z) > 1.0F)
53                {
54                    if (mob.TurnTowards(x, z))
55                        mob.MoveForward();
56                }
57            }
58        }
59
60        public override bool Finished
61        {
62            get
63            {
64                return (mob.DistanceTo(x, z) < 2.0F) || !mob.PathFinder.CanFindPath;
65            }
66        }
67    }
68}
Note: See TracBrowser for help on using the repository browser.