public void TestLimitedFlatPathWriter()
        {
            var gc = new GlobalContext();

            IEnumerable <Dependency> dependencies = new PathMarker().CreateSomeTestDependencies(gc.CurrentGraph);

            string result = FindPathsAndWriteFlat(gc, dependencies, "A",
                                                  CreateDefaultOptions("A", "{a:}#_(_._{c:}_._:_|_._[^{c:}]_)*", maxPathLength: 4));

            Assert.AreEqual(@"-- A0
T3:a:aa:aaa'A0=5+A1=5+A2=5+A3=5 #
T3:b:bb:bbb'A $
T3:c:cc:ccc'A
T3:d:dd:ddd'A $
T3:e:ee:eee'A $

-- A1
T3:a:aa:aaa'A0=5+A1=5+A2=5+A3=5 #
T3:b:bb:bbb'A $
T3:c:cc:ccc'A
T3:d:dd:ddd'A $
<= T3:b:bb:bbb'A $

-- A2
T3:a:aa:aaa'A0=5+A1=5+A2=5+A3=5 #
T3:b:bb:bbb'A $
T3:g:gg:ggg'A $

-- A3
T3:a:aa:aaa'A0=5+A1=5+A2=5+A3=5 #
T3:h:hh:hhh'A $
T3:g:gg:ggg'A $", result.Trim());
        }
Beispiel #2
0
        /*UPGRADE / SWAP OPTIONS
         * Path types:
         * -------
         * Path
         * Trail
         * Road
         * -----
         * PathMarker->TrailMarker->RoadMarker
         * PathMarker->CrossPath
         * TrailMarker->CrossTrail
         * RoadMarker->CrossRoad
         */
        public override WIListOption GetListOption(IItemOfInterest targetObject)
        {
            //Debug.Log ("Getting list option for improve path");

            WIListOption listOption = base.GetListOption(targetObject);

            listOption.Flavors.Clear();
            mLastflavors.Clear();
            HashSet <string> flavors = new HashSet <string> ();

            PathMarker targetPathMarker = null;

            if (targetObject.worlditem.Is <PathMarker> (out targetPathMarker))
            {
                ImprovePathMarker(targetPathMarker, flavors);
            }

            //keep flavors in the dictionary, we don't know which will be relevant
            //it's only move and swap for now but there may be more
            int flavorNum = 0;

            foreach (string flavor in flavors)
            {
                //Debug.Log ("Adding flavor " + flavor);
                listOption.Flavors.Add(flavor);
                mLastflavors.Add(flavorNum, flavor);
                flavorNum++;
            }

            return(listOption);
        }
Beispiel #3
0
        public override bool Use(IItemOfInterest targetObject, int flavorIndex)
        {
            if (targetObject.IOIType != ItemOfInterestType.WorldItem)
            {
                return(false);
            }

            PathMarker pathMarker = null;

            if (targetObject.worlditem.Is <PathMarker> (out pathMarker))
            {
                switch (flavorIndex)
                {
                case flavorIndexMove:
                    return(pathMarker.Move());

                case flavorIndexRemove:
                    return(pathMarker.RemoveFromPath());

                case flavorIndexAdd:
                    break;

                default:
                    break;
                }
            }
            return(false);
        }
Beispiel #4
0
 public void SetConnection(PathMarker pathMarker, PathMarker pathOrigin, MarkerAlterAction alterAction, PathSkill skillToUse)
 {
     ConnectionPathMarker = pathMarker;
     ConnectionPathOrigin = pathOrigin;
     PathAlterAction      = alterAction;
     SkillToUse           = skillToUse;
 }
Beispiel #5
0
    public void Spawn(Maze maze)
    {
        // Loop through each maze cell
        for (int i = 0; i < maze.width; i++)
        {
            for (int k = 0; k < maze.height; k++)
            {
                // Check if  neighbor cells are all floors
                if (maze.cells[i, k].isFloor &&
                    maze.cells[i + 1, k].isFloor &&
                    maze.cells[i - 1, k].isFloor &&
                    maze.cells[i, k + 1].isFloor &&
                    maze.cells[i, k - 1].isFloor &&
                    maze.cells[i + 1, k + 1].isFloor &&
                    maze.cells[i + 1, k - 1].isFloor &&
                    maze.cells[i - 1, k + 1].isFloor &&
                    maze.cells[i - 1, k - 1].isFloor)
                {
                    // Put a path marker on that cell
                    pathMarker = Instantiate(pathMarkerPrefab) as PathMarker;
                    pathMarker.transform.parent        = transform;
                    pathMarker.name                    = "Path marker (" + maze.cells[i, k].transform.localPosition.x + ", " + maze.cells[i, k].transform.localPosition.z + ")";
                    pathMarker.transform.localPosition = new Vector3(maze.cells[i, k].transform.localPosition.x, 0, maze.cells[i, k].transform.localPosition.z);

                    // Add path marker to the list
                    spawnedPathMarker.Add(pathMarker);
                }
            }
        }
    }
        public void TestSimpleFlatPathWriter()
        {
            var gc = new GlobalContext();

            IEnumerable <Dependency> dependencies = new PathMarker().CreateSomeTestDependencies(gc.CurrentGraph);

            string result = FindPathsAndWriteFlat(gc, dependencies, "A",
                                                  CreateDefaultOptions("A", "{a:}(.{c:}.:|.[^{c:}])*"));

            Assert.AreEqual(@"-- A0
T3:a:aa:aaa'A0+A1+A2+A3
T3:b:bb:bbb $
T3:c:cc:ccc
T3:d:dd:ddd $
T3:e:ee:eee $
T3:f:ff:fff $

-- A1
T3:a:aa:aaa'A0+A1+A2+A3
T3:b:bb:bbb $
T3:c:cc:ccc
T3:d:dd:ddd $
<= T3:b:bb:bbb $

-- A2
T3:a:aa:aaa'A0+A1+A2+A3
T3:b:bb:bbb $
T3:g:gg:ggg $

-- A3
T3:a:aa:aaa'A0+A1+A2+A3
T3:h:hh:hhh $
T3:g:gg:ggg $", result.Trim());
        }
Beispiel #7
0
 private void OnTriggerEnter(Collider other)
 {
     if (other.gameObject.tag == "PathMarker")
     {
         target = other.gameObject.GetComponent <PathMarker>().nextMarker;
         MoveTo();
     }
 }
Beispiel #8
0
        // Start is called before the first frame update
        void Start()
        {
            // figure closest marker to start with
            ClosestMarker = PathMarker.FindClosest(gameObject.transform.position);

            // queue couple of random paths
            var markers = FindObjectsOfType <PathMarker>();

            for (int i = 0; i < 5; i++)
            {
                var marker = markers[Random.Range(0, markers.Length)];
                QueueGoToMarker(marker);
                Debug.Log($"{i}: {marker.gameObject.name}");
            }
        }
Beispiel #9
0
        public void Finish()
        {
            if (mFinished)
            {
                return;
            }

            ConnectionPathMarker = null;
            ConnectionPathOrigin = null;
            PathAlterAction      = MarkerAlterAction.None;
            SkillToUse           = null;

            mFinished = true;
            GameObject.Destroy(gameObject);
        }
Beispiel #10
0
    private void GeneratePathMarkers()
    {
        if (StepsToVisualize == -1)
        {
            StepsToVisualize = Path.Length;
        }

        for (int i = 0; i < StepsToVisualize; i++)
        {
            PathMarker Marker = Instantiate(pathMarker);
            Marker.GridManager = this;
            Marker.Offset      = i + 1;

            Marker.OnStep();
        }
    }
Beispiel #11
0
 public bool FastTravel(PathMarker startingPathMarker)
 {
     if (State == FastTravelState.None)
     {
         if (startingPathMarker.HasPathMarkerProps)
         {
             OnStartTraveling(startingPathMarker.Props, startingPathMarker.Props.PathName);
             State = FastTravelState.ArrivingAtDestination;
         }
         else
         {
             Debug.Log("Starting path maker had no properties");
         }
     }
     return(true);
 }
        private static string FindPathsAndWriteFlat(GlobalContext gc, IEnumerable <Dependency> dependencies,
                                                    string markerPrefix, PathMarker.TransformOptions transformOptions)
        {
            var pm = new PathMarker();
            var transformedDependencies = new List <Dependency>();

            pm.Transform(gc, Ignore.Om, transformOptions, dependencies, transformedDependencies);

            string result;

            using (var s = new MemoryStream()) {
                var w = new FlatPathWriter();
                w.RenderToStreamForUnitTests(gc, transformedDependencies, s, $"{markerPrefix}* -sm");
                result = Encoding.ASCII.GetString(s.ToArray());
            }
            return(result);
        }
Beispiel #13
0
        public override bool Use(IItemOfInterest targetObject, int flavorIndex)
        {
            PathMarker targetPathMarker = null;

            if (targetObject.worlditem.Is <PathMarker> (out targetPathMarker))
            {
                //now see which flavor we used
                string flavorName = "Move";
                mLastflavors.TryGetValue(flavorIndex, out flavorName);
                switch (flavorName)
                {
                case "Move":
                default:
                    if (Player.Local.ItemPlacement.ItemCarry(targetPathMarker.worlditem, true))
                    {
                        OnSuccess();
                        return(true);
                    }
                    break;

                case "Swap":
                    //this is kind of an odd operation
                    //we just set the state on the two objects
                    //and boom! They're swapped
                    PathMarker equippedPathMarker    = null;
                    bool       hasEquippedPathMarker = false;
                    if (Player.Local.Tool.IsEquipped && Player.Local.Tool.HasWorldItem)
                    {
                        if (Player.Local.Tool.worlditem.Is <PathMarker> (out equippedPathMarker))
                        {
                            //we're not going to go through the type check song and dance
                            //we'll just swap assuming it's all correct
                            string downgradeState = targetPathMarker.worlditem.State;
                            string upgradeState   = equippedPathMarker.worlditem.State;
                            targetPathMarker.worlditem.State   = upgradeState;
                            equippedPathMarker.worlditem.State = downgradeState;
                        }
                    }
                    break;
                }
            }
            return(false);
        }
Beispiel #14
0
        public override WIListOption GetListOption(IItemOfInterest targetObject)
        {
            if (targetObject.IOIType != ItemOfInterestType.WorldItem)
            {
                return(WIListOption.Empty);
            }

            PathMarker pathMarker = null;

            if (!Paths.HasActivePath || !targetObject.worlditem.Is <PathMarker> (out pathMarker))
            {
                return(WIListOption.Empty);
            }

            WIListOption  listOption = base.GetListOption(targetObject);
            List <string> flavors    = new List <string> ();

            flavors.Add("Remove");
            flavors.Add("Move");

            listOption.Flavors = flavors;

            return(listOption);
        }
        private void LoadStreets()
        {
            RemoveStreets();

            string strFilename = $"{Tool.StartupPath}\\streets_bw.sqlite";

            RectLatLng bb = this.mcMapControl.ViewArea;

            //TODO: Check if the area is not to big ... But what is big ?

            SQLiteConnectionStringBuilder csbDatabase = new SQLiteConnectionStringBuilder
            {
                DataSource = strFilename
            };

            using (SQLiteConnection dbConnection = new SQLiteConnection(csbDatabase.ConnectionString))
            {
                dbConnection.Open();

                try
                {
                    //                                     0     1   2   3
                    //const string strSelectStatement = "select highway,ref,name,way from streets_bw where highway in ('motorway','motorway_link','trunk','trunk_link','primary','secondary','primary_link','secondary_link','residential')";
                    const string strSelectStatement = "select highway,ref,name,way from streets_bw";

                    uint iCounter = 0;

                    DateTime dtStart = DateTime.Now;

                    using (SQLiteCommand dbSelectCommand = new SQLiteCommand(strSelectStatement, dbConnection))
                    {
                        using (SQLiteDataReader dbResult = dbSelectCommand.ExecuteReader())
                        {
                            while (dbResult.Read())
                            {
                                Highway type = Highway.Unknown;

                                try
                                {
                                    type = (Highway)Enum.Parse(typeof(Highway), dbResult.GetString(0), true);
                                }
                                catch (Exception ex)
                                {
                                    Debug.WriteLine(ex.Message);
                                }

                                string strRef  = dbResult.GetStringOrNull(1);
                                string strName = dbResult.GetStringOrNull(2);

                                LineString way = (LineString)dbResult.GetGeometryFromWKB(3);

                                if (bb.Contains(way.Coordinate.ToPointLatLng()))
                                {
                                    List <PointLatLng> list = new List <PointLatLng>(way.Count);

                                    list.AddRange(way.Coordinates.Select(pos => pos.ToPointLatLng()));

                                    this.Dispatcher.Invoke(() =>
                                    {
                                        PathMarker mrWay = new PathMarker(this.mcMapControl, list, type, $"{( strName.IsNotEmpty() ? strName : "Unknown" )}{( strRef.IsNotEmpty() ? $" ({strRef})" : "" )}")
                                        {
                                            Tag = type
                                        };

                                        this.mcMapControl.Markers.Add(mrWay);
                                    });

                                    iCounter++;
                                }
                            }
                        }
                    }

                    DateTime dtStop = DateTime.Now;

                    MB.Information("Load {0} Ways In {1}.", iCounter, (dtStop - dtStart).ToHHMMSSString());
                }
                catch (Exception ex)
                {
                    MB.Error(ex);
                }
                finally
                {
                    if (dbConnection.State == ConnectionState.Open)
                    {
                        dbConnection.Close();
                    }
                }
            }
        }
Beispiel #16
0
        protected void ImprovePathMarker(PathMarker targetPathMarker, HashSet <string> flavors)
        {
            PathMarker equippedPathMarker    = null;
            bool       hasEquippedPathMarker = false;

            if (Player.Local.Tool.IsEquipped && Player.Local.Tool.HasWorldItem)
            {
                hasEquippedPathMarker = Player.Local.Tool.worlditem.Is <PathMarker> (out equippedPathMarker);
            }

            switch (targetPathMarker.worlditem.State)
            {
            case "PathMarker":
                flavors.Add("Move");
                if (hasEquippedPathMarker)
                {
                    switch (equippedPathMarker.worlditem.State)
                    {
                    case "CrossPath":
                    case "TrailMarker":
                        //Debug.Log ("Cross path is path marker, can upgrade");
                        flavors.Add("Swap");
                        break;

                    default:
                        break;
                    }
                }
                break;

            case "CrossPath":
                flavors.Add("Move");
                if (hasEquippedPathMarker)
                {
                    switch (equippedPathMarker.worlditem.State)
                    {
                    case "TrailMarker":
                    case "CrossTrail":
                        flavors.Add("Swap");
                        break;

                    default:
                        break;
                    }
                }
                break;

            case "TrailMarker":
                flavors.Add("Move");
                if (hasEquippedPathMarker)
                {
                    switch (equippedPathMarker.worlditem.State)
                    {
                    case "RoadMarker":
                    case "CrossTrail":
                        flavors.Add("Swap");
                        break;

                    default:
                        break;
                    }
                }
                break;

            case "RoadMarker":
                if (hasEquippedPathMarker)
                {
                    switch (equippedPathMarker.worlditem.State)
                    {
                    case "CrossRoad":
                        flavors.Add("Swap");
                        break;

                    default:
                        break;
                    }
                }
                break;

            default:
                break;
            }
        }
Beispiel #17
0
 public void Awake()
 {
     pathMarker = (PathMarker)target;
 }
Beispiel #18
0
 /**
  * Will tell the crew member to go to the given marker
  * this takes the path marking into account
  */
 public void QueueGoToMarker(PathMarker target)
 {
     QueueTask(new CrewMovementTask(target));
 }