Exemple #1
0
        private PathEntity addToPath(Entity entity, PathPoint pathpoint, PathPoint pathpoint1, PathPoint pathpoint2,
                                     float f)
        {
            pathpoint.totalPathDistance = 0.0F;
            pathpoint.distanceToNext    = pathpoint.distanceTo(pathpoint1);
            pathpoint.distanceToTarget  = pathpoint.distanceToNext;
            path.clearPath();
            path.addPoint(pathpoint);
            PathPoint pathpoint3 = pathpoint;

            while (!path.isPathEmpty())
            {
                PathPoint pathpoint4 = path.dequeue();
                if (pathpoint4.Equals(pathpoint1))
                {
                    return(createEntityPath(pathpoint, pathpoint1));
                }
                if (pathpoint4.distanceTo(pathpoint1) < pathpoint3.distanceTo(pathpoint1))
                {
                    pathpoint3 = pathpoint4;
                }
                pathpoint4.isFirst = true;
                int i = findPathOptions(entity, pathpoint4, pathpoint2, pathpoint1, f);
                int j = 0;
                while (j < i)
                {
                    PathPoint pathpoint5 = pathOptions[j];
                    float     f1         = pathpoint4.totalPathDistance + pathpoint4.distanceTo(pathpoint5);
                    if (!pathpoint5.isAssigned() || f1 < pathpoint5.totalPathDistance)
                    {
                        pathpoint5.previous          = pathpoint4;
                        pathpoint5.totalPathDistance = f1;
                        pathpoint5.distanceToNext    = pathpoint5.distanceTo(pathpoint1);
                        if (pathpoint5.isAssigned())
                        {
                            path.changeDistance(pathpoint5, pathpoint5.totalPathDistance + pathpoint5.distanceToNext);
                        }
                        else
                        {
                            pathpoint5.distanceToTarget = pathpoint5.totalPathDistance + pathpoint5.distanceToNext;
                            path.addPoint(pathpoint5);
                        }
                    }
                    j++;
                }
            }
            if (pathpoint3 == pathpoint)
            {
                return(null);
            }
            else
            {
                return(createEntityPath(pathpoint, pathpoint3));
            }
        }
Exemple #2
0
        /// <summary>
        /// Adds a path from start to end and returns the whole path (args: unused, start, end, unused, maxDistance)
        /// </summary>
        private PathEntity AddToPath(Entity par1Entity, PathPoint par2PathPoint, PathPoint par3PathPoint, PathPoint par4PathPoint, float par5)
        {
            par2PathPoint.TotalPathDistance = 0.0F;
            par2PathPoint.DistanceToNext    = par2PathPoint.DistanceTo(par3PathPoint);
            par2PathPoint.DistanceToTarget  = par2PathPoint.DistanceToNext;
            Path.ClearPath();
            Path.AddPoint(par2PathPoint);
            PathPoint pathpoint = par2PathPoint;

            while (!Path.IsPathEmpty())
            {
                PathPoint pathpoint1 = Path.Dequeue();

                if (pathpoint1.Equals(par3PathPoint))
                {
                    return(CreateEntityPath(par2PathPoint, par3PathPoint));
                }

                if (pathpoint1.DistanceTo(par3PathPoint) < pathpoint.DistanceTo(par3PathPoint))
                {
                    pathpoint = pathpoint1;
                }

                pathpoint1.IsFirst = true;
                int i = FindPathOptions(par1Entity, pathpoint1, par4PathPoint, par3PathPoint, par5);
                int j = 0;

                while (j < i)
                {
                    PathPoint pathpoint2 = PathOptions[j];
                    float     f          = pathpoint1.TotalPathDistance + pathpoint1.DistanceTo(pathpoint2);

                    if (!pathpoint2.IsAssigned() || f < pathpoint2.TotalPathDistance)
                    {
                        pathpoint2.Previous          = pathpoint1;
                        pathpoint2.TotalPathDistance = f;
                        pathpoint2.DistanceToNext    = pathpoint2.DistanceTo(par3PathPoint);

                        if (pathpoint2.IsAssigned())
                        {
                            Path.ChangeDistance(pathpoint2, pathpoint2.TotalPathDistance + pathpoint2.DistanceToNext);
                        }
                        else
                        {
                            pathpoint2.DistanceToTarget = pathpoint2.TotalPathDistance + pathpoint2.DistanceToNext;
                            Path.AddPoint(pathpoint2);
                        }
                    }

                    j++;
                }
            }

            if (pathpoint == par2PathPoint)
            {
                return(null);
            }
            else
            {
                return(CreateEntityPath(par2PathPoint, pathpoint));
            }
        }