Ejemplo n.º 1
0
    void placeBordeaux(IRandomGenerator gen)
    {
        var tiles = LevelMap.instance.tiles;

        var dx   = new UniformIntDistribution(2, m_properties.width - 3);
        var dy   = new UniformIntDistribution(2, m_properties.height - 3);
        var dRot = new UniformIntDistribution(3);

        bool bdxSet = false;

        for (int j = 0; j < m_properties.maxImportantPointsTry; j++)
        {
            var  x  = dx.Next(gen);
            var  y  = dy.Next(gen);
            bool ok = true;
            foreach (var p in LevelMap.instance.importantPoints)
            {
                if (new Vector2(x - p.x, y - p.y).magnitude > m_properties.minImportantPointDistance)
                {
                    continue;
                }

                ok = false;
                break;
            }
            if (!ok)
            {
                continue;
            }

            var localMap = tiles.getLocal(x, y);
            if (localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 2) ||
                localMap.get(0, 0) != localMap.get(1, 0) || localMap.get(0, 0) != localMap.get(1, 1) || localMap.get(1, 2) != localMap.get(0, 1) ||
                localMap.get(0, 0) != localMap.get(2, 0) || localMap.get(0, 0) != localMap.get(2, 1) || localMap.get(2, 2) != localMap.get(0, 1))
            {
                continue;
            }

            if (localMap.get(0, 0) != Biome.Land)
            {
                continue;
            }

            var obj = Instantiate(m_bordeauxPrefab, m_properties.zoneParent);
            obj.transform.localPosition = new Vector3(2 * x, 0, 2 * y);
            obj.transform.localRotation = Quaternion.Euler(0, dRot.Next(gen) * 90, 0);

            ImportantPointInfos iP = new ImportantPointInfos();
            iP.x    = x;
            iP.y    = y;
            iP.name = "Bordeaux";
            LevelMap.instance.bordeaux = iP;
            bdxSet = true;

            break;
        }

        if (!bdxSet)
        {
            var x = dx.Next(gen);
            var y = dy.Next(gen);

            var obj = Instantiate(m_bordeauxPrefab, m_properties.zoneParent);
            obj.transform.localPosition = new Vector3(2 * x, 0, 2 * y);
            obj.transform.localRotation = Quaternion.Euler(0, dRot.Next(gen) * 90, 0);

            ImportantPointInfos iP = new ImportantPointInfos();
            iP.x    = x;
            iP.y    = y;
            iP.name = "bordeaux";
            LevelMap.instance.bordeaux = iP;
        }
    }
Ejemplo n.º 2
0
    void placeImportantPoints(IRandomGenerator gen)
    {
        var tiles = LevelMap.instance.tiles;

        LevelMap.instance.importantPoints.Clear();

        var dx     = new UniformIntDistribution(2, m_properties.width - 3);
        var dy     = new UniformIntDistribution(2, m_properties.height - 3);
        var dPoint = new UniformIntDistribution(m_importantPoints.Count - 1);
        var dRot   = new UniformIntDistribution(3);

        for (int i = 0; i < m_properties.importantPointCount; i++)
        {
            for (int j = 0; j < m_properties.maxImportantPointsTry; j++)
            {
                var  x  = dx.Next(gen);
                var  y  = dy.Next(gen);
                bool ok = true;
                foreach (var p in LevelMap.instance.importantPoints)
                {
                    if (new Vector2(x - p.x, y - p.y).magnitude > m_properties.minImportantPointDistance)
                    {
                        continue;
                    }

                    ok = false;
                    break;
                }
                if (!ok)
                {
                    continue;
                }

                var localMap = tiles.getLocal(x, y);
                if (localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 1) ||
                    localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 1) ||
                    localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 1) || localMap.get(0, 0) != localMap.get(0, 1))
                {
                    continue;
                }

                var point = m_importantPoints[dPoint.Next(gen)];
                if (point.biome != localMap.get(0, 0))
                {
                    continue;
                }

                var obj = Instantiate(point.prefab, m_properties.zoneParent);
                obj.transform.localPosition = new Vector3(2 * x, 0, 2 * y);
                obj.transform.localRotation = Quaternion.Euler(0, dRot.Next(gen) * 90, 0);

                ImportantPointInfos iP = new ImportantPointInfos();
                iP.x    = x;
                iP.y    = y;
                iP.name = point.name;
                LevelMap.instance.importantPoints.Add(iP);

                break;
            }
        }
    }