Question by
LighXP · Jan 26, 2016 at 02:12 AM ·
c#beginnerproceduralgenerationcave
Procedural Cave Generation Can´t understand??
Hey guys, i am pretty new on programming and Unity, and i am trying to understand the Procedural Cave Generation Tutorials... (I understand well C#, not that well, but i understand..), so, for example :
using UnityEngine;
using System.Collections;
using System;
public class MapGenerator : MonoBehaviour {
public int width;
public int height;
public string seed;
public bool useRandomSeed;
[Range(0,100)]
public int randomFillPercent;
int[,] map;
void Start() {
GenerateMap();
}
void Update() {
if (Input.GetMouseButtonDown(0)) {
GenerateMap();
}
}
void GenerateMap() {
map = new int[width,height];
RandomFillMap();
for (int i = 0; i < 5; i ++) {
SmoothMap();
}
}
void RandomFillMap() {
if (useRandomSeed) {
seed = Time.time.ToString();
}
System.Random pseudoRandom = new System.Random(seed.GetHashCode());
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y ++) {
if (x == 0 || x == width-1 || y == 0 || y == height -1) {
map[x,y] = 1;
}
else {
map[x,y] = (pseudoRandom.Next(0,100) < randomFillPercent)? 1: 0;
}
}
}
}
void SmoothMap() {
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y ++) {
int neighbourWallTiles = GetSurroundingWallCount(x,y);
if (neighbourWallTiles > 4)
map[x,y] = 1;
else if (neighbourWallTiles < 4)
map[x,y] = 0;
}
}
}
int GetSurroundingWallCount(int gridX, int gridY) {
int wallCount = 0;
for (int neighbourX = gridX - 1; neighbourX <= gridX + 1; neighbourX ++) {
for (int neighbourY = gridY - 1; neighbourY <= gridY + 1; neighbourY ++) {
if (neighbourX >= 0 && neighbourX < width && neighbourY >= 0 && neighbourY < height) {
if (neighbourX != gridX || neighbourY != gridY) {
wallCount += map[neighbourX,neighbourY];
}
}
else {
wallCount ++;
}
}
}
return wallCount;
}
void OnDrawGizmos() {
if (map != null) {
for (int x = 0; x < width; x ++) {
for (int y = 0; y < height; y ++) {
Gizmos.color = (map[x,y] == 1)?Color.black:Color.white;
Vector3 pos = new Vector3(-width/2 + x + .5f,0, -height/2 + y+.5f);
Gizmos.DrawCube(pos,Vector3.one);
}
}
}
}
}
(This is the whole first video code, so you can watch it) So, can someone please explain me the part of the loops and the Array with the height and the width, cause i don´t really get it. Pleaseeeee!
Comment