Пример #1
0
    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");
    }
Пример #2
0
    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++;
            }
        }
    }