public void Create(Vector3 pos, int ROOM_NUM) { max = 80; wall_height = 1; ah = this.GetComponent <AnaHori>(); ad = this.GetComponent <AnahoriDungeon>(); iwidth = 0; List <List <StageChip> > map = ad.Generate(ROOM_NUM, max); string textdata = ""; for (int i = 0; i < max; i++) { for (int j = 0; j < max; j++) { textdata = textdata + map[i][j].type; } textdata = textdata + "\n"; } GameObject obj = null; Vector3 init_pos; Vector3 floor_pos; GameMgr.stageCenterPos = Vector3.zero; int cnt = 0; int startPosInd = 0; int endPosInd = 0; int mapCount = 0; int stageCount = 0; int countX = 0; int countY = -1; /* * 変数に保存したステージマップを走査する * #ならCubeを生成し、Cubeの大きさだけx軸に右に移動 * 改行文字ならz軸に下に移動して、x軸を初期化 * 空白、-、ならそのままx軸に右に移動 */ foreach (char c in textdata) { countY++; if (c == '#' || c == 'S' || c == 'b' || c == 'G') { /*---------------------------------*/ // Stage(床)を生成 init_pos = new Vector3(pos.x, pos.y - 1, pos.z); obj = Instantiate(gstage, init_pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; obj.name = gstage.name; Stage s = new Stage(); // ゲームオブジェクトの初期化 s.obj = obj; // 確率の初期化 s.prob = 0.0f; // s.probIndex = stageCount; s.material = s.obj.GetComponent <Renderer>().material; s.target = new Vector3(s.obj.transform.position.x, s.obj.transform.position.y + 2, s.obj.transform.position.z); s.id = map[countX][countY].id; GameMgr.stageList.Add(s); stageCount++; GameMgr.stageCenterPos += init_pos; /*---------------------------------*/ pos.x += obj.transform.lossyScale.x; iwidth++; cnt++; if (c == 'S') { GameMgr.startPos = init_pos; } if (c == 'G') { GameMgr.endPos = init_pos; } } else if (c == '*') { init_pos = new Vector3(pos.x, pos.y - 1, pos.z); floor_pos = new Vector3(pos.x, pos.y + 0.1f, pos.z); /*---------------------------------*/ // Stage(床)を生成 obj = Instantiate(gstage, init_pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; obj.name = gstage.name; Stage s = new Stage(); // ゲームオブジェクトの初期化 s.obj = obj; // 確率の初期化 s.prob = 0.0f; // s.probIndex = stageCount; s.material = s.obj.GetComponent <Renderer>().material; s.target = new Vector3(s.obj.transform.position.x, s.obj.transform.position.y + 2, s.obj.transform.position.z); s.id = map[countX][countY].id; GameMgr.stageList.Add(s); stageCount++; GameMgr.stageCenterPos += init_pos; /*---------------------------------*/ // Stage(ウェイポイント)を生成 obj = Instantiate(gpoint, floor_pos, Quaternion.identity, GameObject.Find("Apoint").transform) as GameObject; obj.name = gpoint.name; pos.x += obj.transform.lossyScale.x; iwidth++; cnt++; } else if (c == '\n') { obj = null; GameMgr.mapList.Add(new List <Map>()); mapCount++; countY = -1; countX++; Vector3 origin = new Vector3((float)iwidth, 1.0f, 0f); pos.z -= space.z; pos.x -= origin.x; iwidth = 0; } else if (c == ' ') { pos.x += 1.0f; iwidth++; } else if (c == '+') { init_pos = new Vector3(pos.x, pos.y, pos.z); // Stage(障害物)を生成 obj = Instantiate(gwall, init_pos, Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwall.name; Wall w = new Wall(obj, obj.GetComponent <Renderer>().material.color, false); GameMgr.wallList.Add(w); // Stage(障害物のコライダー)を生成 obj = Instantiate(gwallcol, new Vector3(pos.x, pos.y + 1, pos.z), Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwallcol.name; pos.x += obj.transform.lossyScale.x; iwidth++; //pos.x += space.x; //iwidth++; } else if (c == '-') { for (int i = 0; i < wall_height; i++) { init_pos = new Vector3(pos.x, pos.y, pos.z); // Stage(壁)を生成 obj = Instantiate(gwall, init_pos, Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwall.name; Wall w = new Wall(obj, obj.GetComponent <Renderer>().material.color, false); GameMgr.wallList.Add(w); // Stage(壁のコライダー)を生成 obj = Instantiate(gwallcol, new Vector3(pos.x, pos.y + 1, pos.z), Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwallcol.name; } pos.x += obj.transform.lossyScale.x; iwidth++; } else if (c == 't') { init_pos = new Vector3(pos.x, pos.y - 1, pos.z); /*---------------------------------*/ // Stage(床)を生成 obj = Instantiate(gstage, init_pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; obj.name = gstage.name; Stage s = new Stage(); // ゲームオブジェクトの初期化 s.obj = obj; // 確率の初期化 s.prob = 0.0f; // s.probIndex = stageCount; s.material = s.obj.GetComponent <Renderer>().material; s.target = new Vector3(s.obj.transform.position.x, s.obj.transform.position.y + 2, s.obj.transform.position.z); s.id = map[countX][countY].id; GameMgr.stageList.Add(s); stageCount++; GameMgr.stageCenterPos += init_pos; /*---------------------------------*/ init_pos = new Vector3(pos.x, pos.y, pos.z); // Stage(障害物)を生成 obj = Instantiate(ggate, init_pos, Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwall.name; Wall w = new Wall(obj, obj.GetComponent <Renderer>().material.color, true); GameMgr.wallList.Add(w); pos.x += obj.transform.lossyScale.x; iwidth++; } if (c != '\n') { if (c == '*') { GameMgr.mapList[mapCount].Add(new Map(obj, "#")); } else { GameMgr.mapList[mapCount].Add(new Map(obj, c.ToString())); } } } GameMgr.stageCenterPos /= stageCount; string StageFile = Application.dataPath + "/" + "Resources" + "/" + "stage4.txt"; ReadWrite.ListWrite(StageFile, GameMgr.mapList, max, max); //Debug.Log("Genarate"); }
public void Create(Vector3 pos, int ROOM_NUM) { max = 50; ah = this.GetComponent <AnaHori>(); ad = this.GetComponent <AnahoriDungeon>(); iwidth = 0; /* * ステージマップが保存されているテキストのパス */ //string StageFile = System.IO.Path.GetFileName(@"C:\Users\stage.txt"); //string StageFile = Application.dataPath + "/" + "Resources" + "/" + "stage2.txt"; //var ws = ad.Generate(ROOM_NUM, max); string textdata = ad.Generate(ROOM_NUM, max); //string textdata = LoadStage(StageFile); GameObject obj = null; Vector3 init_pos; /* * 変数に保存したステージマップを走査する * #ならCubeを生成し、Cubeの大きさだけx軸に右に移動 * 改行文字ならz軸に下に移動して、x軸を初期化 * 空白、-、ならそのままx軸に右に移動 */ foreach (char c in textdata) { if (c == '#' || c == 'S' || c == 'b') { init_pos = new Vector3(pos.x, pos.y - 2, pos.z); obj = Instantiate(gstage, init_pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; obj.name = gstage.name; pos.x += obj.transform.lossyScale.x; iwidth++; } else if (c == '*') { init_pos = new Vector3(pos.x, pos.y - 2, pos.z); obj = Instantiate(gstage, init_pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; obj.name = gstage.name; obj = Instantiate(gpoint, pos, Quaternion.identity, GameObject.Find("Apoint").transform) as GameObject; obj.name = gpoint.name; pos.x += obj.transform.lossyScale.x; iwidth++; } else if (c == '\n') { Vector3 origin = new Vector3((float)iwidth, 1.0f, 0f); pos.z -= space.z; pos.x -= origin.x; iwidth = 0; } else if (c == ' ') { pos.x += 1.0f; iwidth++; } else if (c == '-' || c == '+') { //obj = Instantiate(gearth, pos, Quaternion.identity, GameObject.Find("Astage").transform) as GameObject; //obj.name = gearth.name; init_pos = new Vector3(pos.x, pos.y - 2, pos.z); obj = Instantiate(gwall, init_pos, Quaternion.identity, GameObject.Find("Awall").transform) as GameObject; obj.name = gwall.name; pos.x += obj.transform.lossyScale.x; iwidth++; //pos.x += space.x; //iwidth++; } } }