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; } }
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; } } }