Ejemplo n.º 1
0
        protected override NVector CreateNewSpot()
        {
            int              level = Math.Max(GameMgmt.Get().data.map.standard - 1, 0); //underground
            GameMapData      gmap  = GameMgmt.Get().data.map;
            GameMapDataLevel gmdl  = GameMgmt.Get().data.map.levels[level];

            int i = 0;

            while (i < 1000)
            {
                i++;
                int         x = Random.Range(0, gmap.width);
                int         y = Random.Range(0, gmap.height);
                DataTerrain t = gmdl.Terrain(x, y);


                if (t.MoveCost("float") == 0 || t.MoveCost("float") > 10)
                {
                    continue;                                                       // can walk?
                }
                if (!S.Unit().Free(new NVector(x, y, gmap.standard)))
                {
                    continue;                                                 //near water?
                }
                return(new NVector(x, y, level));
            }

            Debug.Log($"{level}/{gmap.levels.Count}");

            NVector pos = new NVector(Random.Range(0, gmap.width), Random.Range(0, gmap.height), gmap.standard);

            Debug.LogError($"Can not find a start position using {pos}");
            return(pos);
        }
Ejemplo n.º 2
0
        protected virtual NVector CreateNewSpot()
        {
            GameMapData      gmap = GameMgmt.Get().data.map;
            GameMapDataLevel gmdl = GameMgmt.Get().data.map.levels[gmap.standard];

            int i = 0;

            while (i < 1000)
            {
                i++;
                int         x = Random.Range(0, gmap.width);
                int         y = Random.Range(0, gmap.height);
                DataTerrain t = gmdl.Terrain(x, y);

                if (t.MoveCost("walk") == 0 || t.MoveCost("walk") > 10)
                {
                    continue;                                                     // can walk?
                }
                if (!gmdl.TerrainNear(x, y, "water", 2))
                {
                    continue;                                      //near water?
                }
                if (!S.Unit().Free(new NVector(x, y, gmap.standard)))
                {
                    continue;                                                 //near water?
                }
                return(new NVector(x, y, gmap.standard));
            }

            NVector pos = new NVector(Random.Range(0, gmap.width), Random.Range(0, gmap.height), gmap.standard);

            Debug.LogError($"Can not find a start position using {pos}");
            return(pos);
        }
Ejemplo n.º 3
0
        private void CalcGrid(Player player, string moveType)
        {
            GameMapData      gmap  = GameMgmt.Get().data.map;
            GameMapDataLevel level = GameMgmt.Get().newMap[_id].dataLevel;

            float[,] costMap = new float[gmap.width, gmap.height];

            for (int x = 0; x < gmap.width; x++)
            {
                for (int y = 0; y < gmap.height; y++)
                {
                    costMap[x, y] = L.b.modifiers[C.MoveCost].CalcModi(level.Terrain(x, y).MoveCost(moveType), player,
                                                                       new NVector(x, y, _id));// level.Terrain(x, y).MoveCost(moveType, nation);
                    //Debug.LogWarning($"Cost for {X},{Y} for {nation}-{moveType} is {costMap[x,y]}");
                }
            }

            _grids[Key(player, moveType)] = new PGrid(costMap);
        }