public GameObject instantiate_environment(GameObject environmentObject, Pos pos, bool traversable = true) { int randomY = rng.Next(1, 4) * 90; // detect whether this object is a prefab or has already been spawned if (environmentObject.scene.name != null) { environmentObject.transform.position = grid_to_world(pos); environmentObject.transform.rotation = Quaternion.Euler(new Vector3(0, randomY, 0)); } else { environmentObject = Instantiate(environmentObject, grid_to_world(pos), Quaternion.Euler(new Vector3(0, randomY, 0))); } DungeonObject env = environmentObject.GetComponent <DungeonObject>(); (env as Environment).init_environment(pos); if (!traversable) { nav_map.removeTraversableTile(pos); map[pos.x, pos.y].traversable = true; map[pos.x, pos.y].occupied = true; map[pos.x, pos.y].resident = env; } else { nav_map.insertTraversableTile(pos); map[pos.x, pos.y].traversable = true; map[pos.x, pos.y].occupied = false; map[pos.x, pos.y].environment = env; } return(environmentObject); }