//returns a random value from Size enum (in Interior.cs) private InteriorSize randomSize() { InteriorSize[] values = (InteriorSize[])Enum.GetValues(typeof(InteriorSize)); InteriorSize size = values[UnityEngine.Random.Range(0, values.Length)]; return(size); }
//selects a set of objects from the possible blueprints for the size private void selectLayout(InteriorSize size) { List <GameObject> blueprints = interior.blueprints[size]; objects = Instantiate(blueprints[UnityEngine.Random.Range(0, blueprints.Count)], interior.transform); objects.transform.localPosition = Vector3.zero; objects.SetActive(false); }
public void SetSize(InteriorSize size) { edgeColl.points = points[size]; meshFilter.mesh = getMesh(size); float dimension = -Mathf.Abs(points[size][0][0]); //exit sprite is centered in image, so no need to do sprite dimensions buildingExit.transform.position = new Vector2(0f, dimension); spawnPos = buildingExit.transform.position; }
//checks pool for mesh, otherwise add a new one to the pool private Mesh getMesh(InteriorSize size) { if (meshPool.ContainsKey(size)) { return(meshPool[size]); } Mesh mesh = createMesh(size); meshPool[size] = mesh; return(mesh); }
//called in World.cs when reusing a building pool object after setting its new position public void Reset() { if (objects != null) { Destroy(objects); } Populate(); size = randomSize(); selectLayout(size); setFloorHeight(); // isEnterable = true; //temp // isOccupied = false; //temp }
//create new mesh for designated size private Mesh createMesh(InteriorSize size) { Mesh mesh = new Mesh(); Vector2[] inner = points[size]; List <Vector3> vertices = new List <Vector3>(); List <int> triangles = new List <int>(); foreach (Vector2 pt in inner) { vertices.Add(new Vector3(pt.x, pt.y)); } vertices.AddRange(outter); switch (size) { case InteriorSize.SMALL: goto case InteriorSize.LARGE; case InteriorSize.MEDIUM: goto case InteriorSize.LARGE; case InteriorSize.LARGE: for (int i = 0; i < inner.Length - 1; i++) { triangles.Add(i); triangles.Add(inner.Length + i + 1); triangles.Add(inner.Length + i); triangles.Add(i); triangles.Add(i + 1); triangles.Add(inner.Length + i + 1); } break; default: Debug.LogError($"Unrecognized Size {size}"); break; } mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); mesh.RecalculateNormals(); return(mesh); }