Ejemplo n.º 1
0
        public static bool AreAdjacent(Polygon first, Polygon second)
        {
            int counter = 0;

            foreach (Vector2 point in first.nodes)
            {
                if (second.nodes.Contains(point))
                {
                    ++counter;

                    if (counter == 2)
                        break;
                }
            }

            return counter == 2;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Calculates the character's polygon
        /// </summary>
        /// <param name="character">Kinematic of the character</param>
        /// <returns>The polygon of the character</returns>
        protected Polygon GetPolygon(Kinematic character)
        {
            Vector2 vect = new Vector2(character.position.X, character.position.Y);
            float min = float.PositiveInfinity;
            Polygon closest = new Polygon(new List<Vector2>());

            foreach (Polygon poly in GameMode.polygons)
                if (poly.Contains(vect))
                {
                    return poly;
                }
                else if ((poly.center - vect).Length() < min)
                {
                    min = (poly.center - vect).Length();
                    closest = poly;
                }

            return closest;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Calculates the character's polygon
        /// </summary>
        /// <param name="character">Kinematic of the character</param>
        /// <returns>The polygon of the character</returns>
        protected Polygon GetPolygon(Kinematic character)
        {
            float min = float.PositiveInfinity;
            Polygon polygon = new Polygon(new List<Vector2>());
            Vector2 vect = new Vector2(character.position.X, character.position.Y);

            foreach (Polygon poly in GameMode.polygons)
            {
                float diff = Vector2.Distance(poly.center, vect);

                if (poly.Contains(vect) && diff < min)
                {
                    min = diff;
                    polygon = poly;
                }
            }

            return polygon;
        }
Ejemplo n.º 4
0
        public override SteeringOutput GetSteering(Kinematic character, Kinematic target)
        {
            // If the characters are in the same polygon, do nothing
            Polygon targetPolygon = GetPolygon(target);
            if (lastPolygon.center != targetPolygon.center)
            {
                // Generate a new path
                AStar star = new AStar(GameMode.movement);

                Node c = GetNearestNode(character);
                Node t = GetNearestNode(target);

                if (heuristic == 's')
                    path = star.Pathfind(c, t, new SafestHeuristic(t));
                else
                    path = star.Pathfind(c, t, new ClosestHeuristic(t));

                lastPolygon = targetPolygon;
            }

            return base.GetSteering(character, target);
        }