Example #1
0
 //////////////////////////////////////////////////////////////////////////////////////////////////////////Check for valid direction
 bool CanGo(wpt waypoint, wpt.direction direction)
 {
     foreach (var dir in waypoint.ValidDiriections)
     {
         if (dir == direction)
         {
             return(true);
         }
     }
     return(false);
 }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        //Doing the change of direction according to the pressed key
        if (Input.GetKey(KeyCode.W))
        {
            this.SetDirection(wpt.direction.U);
            if (direction == wpt.direction.U)
            {
                transform.localScale    = new Vector2(0.05f, 0.05f);
                transform.localRotation = Quaternion.Euler(0, 0, 90);
            }
        }
        if (Input.GetKey(KeyCode.S))
        {
            this.SetDirection(wpt.direction.D);
            if (direction == wpt.direction.D)
            {
                transform.localScale    = new Vector2(0.05f, 0.05f);
                transform.localRotation = Quaternion.Euler(0, 0, 270);
            }
        }
        if (Input.GetKey(KeyCode.A))
        {
            this.SetDirection(wpt.direction.L);
            if (direction == wpt.direction.L)
            {
                transform.localScale    = new Vector2(-0.05f, 0.05f);
                transform.localRotation = Quaternion.Euler(0, 0, 0);
            }
        }
        if (Input.GetKey(KeyCode.D))
        {
            this.SetDirection(wpt.direction.R);
            if (direction == wpt.direction.R)
            {
                transform.localScale    = new Vector2(0.05f, 0.05f);
                transform.localRotation = Quaternion.Euler(0, 0, 0);
            }
        }
        //Doing the movement
        if (!CheckForDestination())
        {
            switch (direction)
            {
            case wpt.direction.L: transform.position = new Vector3(transform.position.x - (Time.deltaTime * speed), transform.position.y, transform.position.z); break;

            case wpt.direction.R: transform.position = new Vector3(transform.position.x + (Time.deltaTime * speed), transform.position.y, transform.position.z); break;

            case wpt.direction.D: transform.position = new Vector3(transform.position.x, transform.position.y - (Time.deltaTime * speed), transform.position.z); break;

            case wpt.direction.U: transform.position = new Vector3(transform.position.x, transform.position.y + (Time.deltaTime * speed), transform.position.z); break;
            }
        }
        //Doing the changing of next waypoints
        else
        {
            var nextwaypoint = NextWaypoint(CurrentWaypoint, direction);

            // Teleportation if at the portal
            if (CurrentWaypoint.transform.position == Rt.transform.position && direction == wpt.direction.R)
            {
                this.transform.position = Lt.transform.position;
                CurrentWaypoint         = Lt;
                return;
            }
            else if (CurrentWaypoint.transform.position == Lt.transform.position && direction == wpt.direction.L)
            {
                this.transform.position = Rt.transform.position;
                CurrentWaypoint         = Lt;
                return;
            }

            //becoming next waypoint
            if (nextwaypoint != null)
            {
                CurrentWaypoint = nextwaypoint;
            }
            else
            {
                transform.position = CurrentWaypoint.transform.position;
            }
        }
    }
Example #3
0
    //////////////////////////////////////////////////////////////////////////////////////////////////////////Deciding the next waypoint associate to the possible direction
    public wpt NextWaypoint(wpt CurrentPoint, wpt.direction dir)
    {
        var CurrentPosition = CurrentPoint.transform.position;
        wpt Target          = null;

        foreach (var NextWaypoint in waypoints)
        {
            var NextPosition = NextWaypoint.transform.position;
            switch (dir)
            {
            case wpt.direction.L:     //if the next waypoint is too the left, current x > next x, current y = next y.
                if (NextPosition.x < CurrentPosition.x && NextPosition.y == CurrentPosition.y && NextWaypoint != CurrentPoint)
                {
                    if (Target != null)
                    {
                        if (distance(CurrentPosition, NextPosition, wpt.direction.L) < distance(CurrentPosition, Target.transform.position, wpt.direction.L))
                        {
                            if (CanGo(CurrentPoint, wpt.direction.L) && CanGo(NextWaypoint, wpt.direction.R))
                            {
                                Target = NextWaypoint;
                            }
                        }
                    }
                    else
                    {
                        if (CanGo(CurrentPoint, wpt.direction.L) && CanGo(NextWaypoint, wpt.direction.R))
                        {
                            Target = NextWaypoint;
                        }
                    }
                }
                break;

            case wpt.direction.R:     //if the next waypoint is to the right, current x < next x, current y = next y.
                if (NextPosition.x > CurrentPosition.x && NextPosition.y == CurrentPosition.y && NextWaypoint != CurrentPoint)
                {
                    if (Target != null)
                    {
                        if (distance(CurrentPosition, NextPosition, wpt.direction.R) < distance(CurrentPosition, Target.transform.position, wpt.direction.R))
                        {
                            if (CanGo(CurrentPoint, wpt.direction.R) && CanGo(NextWaypoint, wpt.direction.L))
                            {
                                Target = NextWaypoint;
                            }
                        }
                    }
                    else
                    {
                        if (CanGo(CurrentPoint, wpt.direction.R) && CanGo(NextWaypoint, wpt.direction.L))
                        {
                            Target = NextWaypoint;
                        }
                    }
                }
                break;

            case wpt.direction.U:     //if the next waypoint is up, current y < next y, current x = next x.
                if (NextPosition.y > CurrentPosition.y && NextPosition.x == CurrentPosition.x && NextWaypoint != CurrentPoint)
                {
                    if (Target != null)
                    {
                        if (distance(CurrentPosition, NextPosition, wpt.direction.U) < distance(CurrentPosition, Target.transform.position, wpt.direction.U))
                        {
                            if (CanGo(CurrentPoint, wpt.direction.U) && CanGo(NextWaypoint, wpt.direction.D))
                            {
                                Target = NextWaypoint;
                            }
                        }
                    }
                    else
                    {
                        if (CanGo(CurrentPoint, wpt.direction.U) && CanGo(NextWaypoint, wpt.direction.D))
                        {
                            Target = NextWaypoint;
                        }
                    }
                }
                break;

            case wpt.direction.D:     //if the next waypoint is down, current y > next y, current x = next x.
                if (NextPosition.y < CurrentPosition.y && NextPosition.x == CurrentPosition.x && NextWaypoint != CurrentPoint)
                {
                    if (Target != null)
                    {
                        if (distance(CurrentPosition, NextPosition, wpt.direction.D) < distance(CurrentPosition, Target.transform.position, wpt.direction.D))
                        {
                            if (CanGo(CurrentPoint, wpt.direction.D) && CanGo(NextWaypoint, wpt.direction.U))
                            {
                                Target = NextWaypoint;
                            }
                        }
                    }
                    else
                    {
                        if (CanGo(CurrentPoint, wpt.direction.D) && CanGo(NextWaypoint, wpt.direction.U))
                        {
                            Target = NextWaypoint;
                        }
                    }
                }
                break;
            }
        }

        return(Target);
    }
        public GPXClass(string XML)
        {
            if (!XML.Equals(""))
            {
                _GPX.LoadXml(XML);
                if ((_GPX.DocumentElement).Name.Equals("gpx"))
                {
                    XmlNodeList GPXNodes = ((_GPX.GetElementsByTagName("gpx"))[0]).ChildNodes;
                    foreach (XmlNode Node in GPXNodes)
                    {
                        switch (Node.Name)
                        {
                        case "name":
                            Name = Node.InnerText;
                            break;

                        case "desc":
                            Description = Node.InnerText;
                            break;

                        case "author":
                            Author = Node.InnerText;
                            break;

                        case "email":
                            EMail = Node.InnerText;
                            break;

                        case "time":
                            Time = Node.InnerText;
                            break;

                        case "keywords":
                            KeyWords = Node.InnerText;
                            break;

                        case "bounds":
                            Bounds = new GPSBoundary();
                            foreach (XmlAttribute Att in (Node).Attributes)
                            {
                                switch (Att.Name)
                                {
                                case "minlat":
                                    Bounds.Min.lat = Att.Value;
                                    break;

                                case "minlon":
                                    Bounds.Min.lon = Att.Value;
                                    break;

                                case "maxlat":
                                    Bounds.Max.lat = Att.Value;
                                    break;

                                case "maxlon":
                                    Bounds.Max.lon = Att.Value;
                                    break;
                                }
                            }
                            break;

                        case "wpt":
                            wpt NewWayPoint = new wpt(Node);
                            WayPoints.Add(NewWayPoint);
                            break;

                        case "rte":
                            rte NewRoute = new rte(Node);
                            Routes.Add(NewRoute);
                            break;

                        case "trk":
                            trk Track = new trk(Node);
                            Tracks.Add(Track);
                            break;

                        case "url":
                            URL = Node.InnerText;
                            break;

                        case "urlname":
                            URLName = Node.InnerText;
                            break;

                        case "topografix:active_point":
                        case "topografix:map":
                            break;
                            //default:
                            ///throw new Exception("Unhandled for Child Object: " + Node.Name);
                        }
                    }
                }
            }
        }