private void UpdateWriteToArray()
    {
        //縦と横のマス数でマップチップの配列を生成
        int width  = (int)(rooms[maxXRoomIndex].Rect().xMax - rooms[minXRoomIndex].Rect().xMin) + 1;
        int length = (int)(rooms[maxZRoomIndex].Rect().yMax - rooms[minZRoomIndex].Rect().yMin) + 1;

        mapChip = new int[length + 2, width + 2];                //四つの辺に壁を置く

        int minX = (int)rooms[minXRoomIndex].Rect().xMin;
        int minZ = (int)rooms[minZRoomIndex].Rect().yMin;

        for (int i = 0; i < mainRoom.Count; ++i)             //メインの部屋を先に置く
        {
            Rect rect = mainRoom[i].Rect();
            for (int y = (int)rect.yMin - minZ + 1; y < (int)rect.yMax - minZ + 1; ++y)         //基準となる部屋の座標を引く
            {
                for (int x = (int)rect.xMin - minX + 1; x < (int)rect.xMax - minX + 1; ++x)     //基準となる部屋の座標を引く
                {
                    mapChip[y, x] = (int)BlockDef.Space;
                }
            }
        }
        for (int i = 0; i < halls.Count; ++i)                 //廊下を置く
        {
            Rect rect = halls[i].Rect();
            for (int y = (int)rect.yMin - minZ + 1; y < (int)rect.yMax - minZ + 1; ++y)         //基準となる部屋の座標を引く
            {
                for (int x = (int)rect.xMin - minX + 1; x < (int)rect.xMax - minX + 1; x++)     //基準となる部屋の座標を引く
                {
                    mapChip[y, x] = (int)BlockDef.Space;
                }
            }
        }
        currentState = GenerateState.SetEventPoint;
    }
    private void UpdateCreateHall()
    {
        for (int i = 0; i < edges.Count; ++i)
        {
            Edge       e      = edges[i];
            Vector2Int center = new Vector2Int(
                (e.Start.x + e.End.x) / 2,
                (e.Start.y + e.End.y) / 2);

            DungeonRoom hall = new DungeonRoom(
                halls.Count,
                Mathf.Abs(e.Start.x - e.End.x) + 2,
                2,
                new Vector2Int(center.x, e.End.y)
                );
            halls.Add(hall);

            hall = new DungeonRoom(
                halls.Count,
                2,
                Mathf.Abs(e.Start.y - e.End.y) + 2,
                new Vector2Int(e.Start.x, center.y)
                );
            halls.Add(hall);
        }
        currentState = GenerateState.ChooseSubRoom;     //次の段階へ移行
    }
Ejemplo n.º 3
0
        private IEnumerator BuildWorld(GenerateState state, SpaceData[] data)
        {
            if (data == null)
            {
                yield break;
            }
            if (data.Length < 1)
            {
                yield break;
            }
            int max      = data.Length;
            int progress = 0;

            for (int i = 0; i < max; i++)
            {
                int p = i * 100 / max;
                if (progress != p)
                {
                    progress = p;
                    yield return(0);
                }
                CreateAreaGameObject(data[i], i);
            }
            if (coroutines.ContainsKey(state))
            {
                var coroutine = coroutines[state];
                debug_test += "\n删除协程 " + state + " " + area_id + "  " + new System.Diagnostics.StackTrace();
                coroutines.Remove(state);
                if (coroutine != null)
                {
                    generate.StopCoroutine(coroutine);
                }
            }
        }
Ejemplo n.º 4
0
    // Recebe o callback do "giro" do Facebook e refaz a conexão (limite de tentativas = 3)
    public void HandleState(object data)
    {
        GenerateState state = (GenerateState)data;

        state.tries++; if (state.tries >= 3)
        {
            return;
        }
        if (state.stateType == GenerateState.StateType.WallPost)
        {
            StartCoroutine(WallPost(state.globalFacebookId, state.wallParameters, state.wallPostCallback, state.tries));
        }
        else if (state.stateType == GenerateState.StateType.GetInfo)
        {
            StartCoroutine(GetInfo(state.globalFacebookId, state.getInfoCallback, state.tries));
        }
        else if (state.stateType == GenerateState.StateType.GetPicture)
        {
            StartCoroutine(GetPicture(state.globalFacebookId, state.getPictureType, state.getPictureCallback, state.tries));
        }
        else if (state.stateType == GenerateState.StateType.IsLikedPage)
        {
            StartCoroutine(IsLikedPage(state.pageId, state.isLikedPageCallback, state.tries));
        }
        else if (state.stateType == GenerateState.StateType.SetScore)
        {
            StartCoroutine(SetScore(state.globalFacebookId, state.setScore, state.setScoreCallback, state.tries));
        }
        else if (state.stateType == GenerateState.StateType.OpenInvite)
        {
            StartCoroutine(OpenInvite(state.inviteCallback, state.tries));
        }
    }
Ejemplo n.º 5
0
 /// <summary>
 /// 廊下を追加
 /// </summary>
 private void UpdateCreateHall()
 {
     foreach (Edge e in edges)
     {
         //線分の中点
         Point center = new Point(
             (e.FirstPoint.X + e.SecondPoint.X) / 2,
             (e.FirstPoint.Y + e.SecondPoint.Y) / 2);
         //横
         MapRoom hall = new MapRoom(
             halls.Count,
             Math.Abs(e.FirstPoint.X - e.SecondPoint.X) + 2,
             2,
             center.X,
             e.SecondPoint.Y,
             gameDevice);
         hall.SetColor(Color.Blue);
         halls.Add(hall);
         //縦
         hall = new MapRoom(
             halls.Count,
             2,
             Math.Abs(e.FirstPoint.Y - e.SecondPoint.Y) + 2,
             e.FirstPoint.X,
             center.Y,
             gameDevice);
         hall.SetColor(Color.Blue);
         halls.Add(hall);
     }
     currentState = GenerateState.ChooseSubRoom;     //次の段階へ移行
 }
Ejemplo n.º 6
0
        /// <summary>
        /// マップのサイズを確定
        /// </summary>
        private void UpdateCheckMapSize()
        {
            minXRoomIndex = mainRoom[0].ID;     //最大最小値を先頭に設定
            maxXRoomIndex = mainRoom[0].ID;
            minZRoomIndex = mainRoom[0].ID;
            maxZRoomIndex = mainRoom[0].ID;

            foreach (MapRoom r in mainRoom)     //部屋ごとに辺を比較する
            {
                if (r.MinX < mainRoom.Find((MapRoom min) => min.ID == minXRoomIndex).MinX)
                {
                    minXRoomIndex = r.ID;
                }
                else if (r.MaxX > mainRoom.Find((MapRoom max) => max.ID == maxXRoomIndex).MaxX)
                {
                    maxXRoomIndex = r.ID;
                }
                if (r.MinZ < mainRoom.Find((MapRoom min) => min.ID == minZRoomIndex).MinZ)
                {
                    minZRoomIndex = r.ID;
                }
                else if (r.MaxZ > mainRoom.Find((MapRoom max) => max.ID == maxZRoomIndex).MaxZ)
                {
                    maxZRoomIndex = r.ID;
                }
            }

            //Debug情報
            rooms[minXRoomIndex].SetColor(Color.Black);
            rooms[minZRoomIndex].SetColor(Color.Black);
            rooms[maxXRoomIndex].SetColor(Color.Black);
            rooms[maxZRoomIndex].SetColor(Color.Black);

            currentState = GenerateState.WriteToArray;
        }
Ejemplo n.º 7
0
        /// <summary>
        /// マップチップに書き出す
        /// </summary>
        private void UpdateWriteToArray()
        {
            //縦と横のマス数でマップチップの配列を生成
            int width  = rooms[maxXRoomIndex].MaxX - rooms[minXRoomIndex].MinX + 1;
            int length = rooms[maxZRoomIndex].MaxZ - rooms[minZRoomIndex].MinZ + 1;

            mapChip = new int[length + 2, width + 2];   //四つの辺に壁を置く

            int minX = rooms[minXRoomIndex].MinX;
            int minZ = rooms[minZRoomIndex].MinZ;

            foreach (MapRoom r in mainRoom)                                     //メインの部屋を先に置く
            {
                for (int z = r.MinZ - minZ + 1; z < r.MaxZ - minZ + 1; z++)     //基準となる部屋の座標を引く
                {
                    for (int x = r.MinX - minX + 1; x < r.MaxX - minX + 1; x++) //基準となる部屋の座標を引く
                    {
                        mapChip[z, x] = (int)MapDef.BlockDef.Space;
                    }
                }
            }
            foreach (MapRoom r in halls)                                        //廊下を置く
            {
                for (int z = r.MinZ - minZ + 1; z < r.MaxZ - minZ + 1; z++)     //基準となる部屋の座標を引く
                {
                    for (int x = r.MinX - minX + 1; x < r.MaxX - minX + 1; x++) //基準となる部屋の座標を引く
                    {
                        mapChip[z, x] = (int)MapDef.BlockDef.Space;
                    }
                }
            }
            currentState = GenerateState.SetEventPoint;
        }
    private void UpdateCheckMapSize()
    {
        minXRoomIndex = mainRoom[0].ID;             //最大最小値を先頭に設定
        maxXRoomIndex = mainRoom[0].ID;
        minZRoomIndex = mainRoom[0].ID;
        maxZRoomIndex = mainRoom[0].ID;

        for (int i = 0; i < mainRoom.Count; ++i)     //部屋ごとに辺を比較する
        {
            Rect rect = mainRoom[i].Rect();
            if (rect.xMin < mainRoom.Find((DungeonRoom min) => min.ID == minXRoomIndex).Rect().xMin)
            {
                minXRoomIndex = mainRoom[i].ID;
            }
            else if (rect.xMax > mainRoom.Find((DungeonRoom max) => max.ID == maxXRoomIndex).Rect().xMax)
            {
                maxXRoomIndex = mainRoom[i].ID;
            }
            if (rect.yMin < mainRoom.Find((DungeonRoom min) => min.ID == minZRoomIndex).Rect().yMin)
            {
                minZRoomIndex = mainRoom[i].ID;
            }
            else if (rect.yMax > mainRoom.Find((DungeonRoom max) => max.ID == maxZRoomIndex).Rect().yMax)
            {
                maxZRoomIndex = mainRoom[i].ID;
            }
        }

        currentState = GenerateState.WriteToArray;
    }
Ejemplo n.º 9
0
            public IDisposable Subscribe(IObserver <R> observer)
            {
                // TODO: Rewrite this code to work in a distributed environment
                // HINT: Closures are bad! Try looking at the various Scheduler overloads.
                var state = new GenerateState
                {
                    current        = this.initial,
                    condition      = this.condition,
                    iterate        = this.iterate,
                    observer       = observer,
                    resultSelector = this.resultSelector
                };

                return(scheduler.Schedule(state, (st, self) =>
                {
                    if (st.condition(st.current))
                    {
                        var result = st.resultSelector(st.current);
                        st.observer.OnNext(result);
                        var newState = (GenerateState)st.Clone();
                        newState.current = st.iterate(st.current);
                        self(newState);
                    }
                    else
                    {
                        st.observer.OnCompleted();
                    }
                }));
            }
    private GenerateState currentState;     //現在の生成状態

    public MapGenerator(int dungeonSize)
    {
        rooms            = new List <DungeonRoom>();
        mainRoom         = new List <DungeonRoom>();
        halls            = new List <DungeonRoom>();
        edges            = new List <Edge>();
        mapChip          = new int[1, 1];
        this.dungeonSize = dungeonSize;       //ダンジョンのサイズ

        //正規分布の楕円形の縦と横(集約させるためにさらに2を割る)
        limitWidth  = (Random.Range(dungeonSize / 4, dungeonSize * 3 / 4)) / 2;
        limitHeight = (dungeonSize - limitWidth) / 2;

        currentState = GenerateState.GenerateRoom;      //生成状態
    }
    private void UpdateGenerate()
    {
        for (int i = 0; i < dungeonSize; ++i)
        {
            Vector2Int  pos  = RandomPointInCircle(limitWidth, limitHeight);
            DungeonRoom room =
                new DungeonRoom(
                    i,
                    Random.Range(MIN_ROOM_SIZE, MAX_ROOM_SIZE) * 2,
                    Random.Range(MIN_ROOM_SIZE, MAX_ROOM_SIZE) * 2,
                    pos);
            rooms.Add(room);
        }

        currentState = GenerateState.Discrete;      //部屋を離散する
    }
    private void UpdateSetEventPoint()
    {
        //違う部屋に設定(ランダム)
        int entryRoom = Random.Range(0, mainRoom.Count);      //入口の部屋(添え字)

        //メインの部屋ではないと選択しなおし
        while ((mainRoom[entryRoom].Width < (int)(MAX_ROOM_SIZE * 2 * 0.65f) &&
                mainRoom[entryRoom].Length < (int)(MAX_ROOM_SIZE * 2 * 0.65f)))
        {
            entryRoom = Random.Range(0, mainRoom.Count);
        }
        int exitRoom = 0;                                               //出口の部屋(添え字)

        for (int i = 1; i < mainRoom.Count; ++i)                        //一番遠い部屋で出口を指定
        {
            if (i == entryRoom)
            {
                continue;
            }
            if ((mainRoom[entryRoom].Pos - mainRoom[exitRoom].Pos).sqrMagnitude <
                (mainRoom[entryRoom].Pos - mainRoom[i].Pos).sqrMagnitude)
            {
                exitRoom = i;
            }
        }

        //マップのX, Y最小値   基準座標
        int minX = (int)rooms[minXRoomIndex].Rect().xMin;
        int minZ = (int)rooms[minZRoomIndex].Rect().yMin;

        Rect mainRect = mainRoom[entryRoom].Rect();
        Rect exitRect = mainRoom[exitRoom].Rect();

        //部屋内の乱数座標を設定(壁とつながっていないマス)
        Vector2Int entryPoint = new Vector2Int(
            Random.Range((int)mainRect.xMin - minX + 1, (int)mainRect.xMax - minX),
            Random.Range((int)mainRect.yMin - minZ + 1, (int)mainRect.yMax - minZ));
        Vector2Int exitPoint = new Vector2Int(
            Random.Range((int)exitRect.xMin - minX + 1, (int)exitRect.xMax - minX),
            Random.Range((int)exitRect.yMin - minZ + 1, (int)exitRect.yMax - minZ));

        mapChip[entryPoint.y, entryPoint.x] = (int)BlockDef.Entry;
        mapChip[exitPoint.y, exitPoint.x]   = (int)BlockDef.Exit;

        currentState = GenerateState.ReleaseData;
    }
Ejemplo n.º 13
0
        public void LoadFormFile(int dungeonNum, int floor)
        {
            string fileName = @"Content/" + "StageCSV/";

            //特殊配置があれば
            if (File.Exists(fileName + "Stage_boss_" + dungeonNum + "_" + floor + ".csv"))
            {
                fileName += "Stage_boss_" + dungeonNum + "_" + floor + ".csv";
            }
            else
            {
                fileName += "Stage_boss.csv";
            }

            FileStream   fs = new FileStream(fileName, FileMode.Open);    //設定ファイルを開く
            StreamReader sr = new StreamReader(fs);

            int        lines  = 0;                      //行
            List <int> blocks = new List <int>();

            while (!sr.EndOfStream)                     //最後まで読み込む
            {
                string   line = sr.ReadLine();          //一行つず読み込む
                string[] data = line.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);

                for (int i = 0; i < data.Length; i++)
                {
                    blocks.Add(int.Parse(data[i]));
                }
                lines++;
            }
            sr.Close();                                 //読み終わったらファイルをClose
            fs.Close();

            int colum = blocks.Count / lines;           //列

            mapChip = new int[lines, colum];
            for (int i = 0; i < mapChip.Length; i++)
            {
                mapChip[i / colum, i % colum] = blocks[i];
            }

            currentState = GenerateState.End;
        }
Ejemplo n.º 14
0
        /// <summary>
        /// 入口と出口などの座標をマップチップに書き込む
        /// ToDo:モンスターが湧く所
        /// </summary>
        private void UpdateSetEventPoint()
        {
            //違う部屋に設定(ランダム)
            int entryRoom = gameDevice.Random.Next(0, mainRoom.Count);      //入口の部屋(添え字)

            //メインの部屋ではないと選択しなおし
            while ((mainRoom[entryRoom].Width < (int)(MapDef.MAX_ROOM_SIZE * 2 * 0.65f) &&
                    mainRoom[entryRoom].Length < (int)(MapDef.MAX_ROOM_SIZE * 2 * 0.65f)))
            {
                entryRoom = gameDevice.Random.Next(0, mainRoom.Count);
            }
            int exitRoom = 0;                                               //出口の部屋(添え字)

            for (int i = 1; i < mainRoom.Count; i++)                        //一番遠い部屋で出口を指定
            {
                if (i == entryRoom)
                {
                    continue;
                }
                if ((mainRoom[entryRoom].Position() - mainRoom[exitRoom].Position()).LengthSquared() <
                    (mainRoom[entryRoom].Position() - mainRoom[i].Position()).LengthSquared())
                {
                    exitRoom = i;
                }
            }

            //マップのX, Y最小値   基準座標
            int minX = rooms[minXRoomIndex].MinX;
            int minZ = rooms[minZRoomIndex].MinZ;

            //部屋内の乱数座標を設定(壁とつながっていないマス)
            Point entryPoint = new Point(
                gameDevice.Random.Next(mainRoom[entryRoom].MinX - minX + 1, mainRoom[entryRoom].MaxX - minX),
                gameDevice.Random.Next(mainRoom[entryRoom].MinZ - minZ + 1, mainRoom[entryRoom].MaxZ - minZ));
            Point exitPoint = new Point(
                gameDevice.Random.Next(mainRoom[exitRoom].MinX - minX + 1, mainRoom[exitRoom].MaxX - minX),
                gameDevice.Random.Next(mainRoom[exitRoom].MinZ - minZ + 1, mainRoom[exitRoom].MaxZ - minZ));

            mapChip[entryPoint.Y, entryPoint.X] = (int)MapDef.BlockDef.Entry;
            mapChip[exitPoint.Y, exitPoint.X]   = (int)MapDef.BlockDef.Exit;

            currentState = GenerateState.ReleaseData;
        }
Ejemplo n.º 15
0
 /// <summary>
 /// 部屋を生成
 /// </summary>
 private void UpdateGenerate()
 {
     if (rooms.Count < dungeonSize)      //指定のサイズまで部屋を生成し続ける
     {
         Point pos = RandomPointInCircle(limitWidth, limitHeight);
         rooms.Add(
             new MapRoom(
                 rooms.Count,                                                            //部屋番号
                 gameDevice.Random.Next(MapDef.MIN_ROOM_SIZE, MapDef.MAX_ROOM_SIZE) * 2, //横サイズ(2で割れるように)
                 gameDevice.Random.Next(MapDef.MIN_ROOM_SIZE, MapDef.MAX_ROOM_SIZE) * 2, //縦サイズ
                 pos.X,                                                                  //X座標
                 pos.Y,                                                                  //Z座標
                 gameDevice));
     }
     else
     {
         currentState = GenerateState.Discrete;      //部屋を離散する
     }
 }
 private void UpdateChooseSubRoom()
 {
     for (int h = 0; h < halls.Count; ++h)
     {
         for (int d = 0; d < rooms.Count; ++d)
         {
             if (mainRoom.Contains(rooms[d]))                                //メインの部屋は判定しない
             {
                 continue;
             }
             //当たっていたらメインに追加
             if (halls[h].RoomCollision(rooms[d]) &&
                 (rooms[d].Length > MAX_ROOM_SIZE * 2 * 0.3f || rooms[d].Width > MAX_ROOM_SIZE * 2 * 0.3f))
             {
                 mainRoom.Add(rooms[d]);
             }
         }
     }
     currentState = GenerateState.CheckMapSize;
 }
Ejemplo n.º 17
0
 /// <summary>
 /// サブとなる部屋を選択
 /// </summary>
 private void UpdateChooseSubRoom()
 {
     foreach (MapRoom hall in halls)
     {
         foreach (MapRoom r in rooms)    //全部の部屋と廊下と判定
         {
             if (mainRoom.Contains(r))   //メインの部屋は判定しない
             {
                 continue;
             }
             //当たっていたらメインに追加
             if (hall.RoomCollision(r) &&
                 (r.Length > MapDef.MAX_ROOM_SIZE * 2 * 0.3f || r.Width > MapDef.MAX_ROOM_SIZE * 2 * 0.3f))
             {
                 r.SetColor(Color.Gold); //Debug情報
                 mainRoom.Add(r);
             }
         }
     }
     currentState = GenerateState.CheckMapSize;
 }
    private void UpdateSelectMainRoom()
    {
        for (int i = 0; i < rooms.Count; ++i)
        {
            //縦横サイズが指定より大きい場合
            if (rooms[i].Length > (int)(MAX_ROOM_SIZE * 2 * 0.65f) &&
                rooms[i].Width > (int)(MAX_ROOM_SIZE * 2 * 0.65f))
            {
                mainRoom.Add(rooms[i]);                //リストに追加
            }
        }

        if (mainRoom.Count < 4)                     //量が少なすぎるとやり直し
        {
            currentState = GenerateState.GenerateRoom;
            Release();
            return;
        }

        currentState = GenerateState.LinkRoom;      //次の段階へ移行
    }
Ejemplo n.º 19
0
        /// <summary>
        /// 部屋を離散
        /// </summary>
        private void UpdateDiscrete()
        {
            int counter = 0;        //部屋が重なる数

            foreach (MapRoom r1 in rooms)
            {
                foreach (MapRoom r2 in rooms)
                {
                    if (r1 == r2 || !r1.RoomCollision(r2))  //同じ部屋は判断しない、当たってないと知らせない
                    {
                        continue;
                    }
                    counter++;      //当たっている部屋まだある
                    r1.Hit(r2);     //位置修正
                    r2.Hit(r1);     //位置修正
                }
            }
            if (counter <= 0)       //全部修正完了すると次の段階へ移行
            {
                currentState = GenerateState.SelectMainRoom;
            }
        }
    private void UpdateDiscrete()
    {
        int counter = 0;                //部屋が重なる数

        for (int i = 0; i < rooms.Count; ++i)
        {
            for (int j = 0; j < rooms.Count; ++j)
            {
                if (i == j || !rooms[i].RoomCollision(rooms[j]))
                {
                    continue;
                }
                ++counter;
                rooms[i].Hit(rooms[j]);
                rooms[j].Hit(rooms[i]);
            }
        }
        if (counter <= 0)       //全部修正完了すると次の段階へ移行
        {
            currentState = GenerateState.SelectMainRoom;
        }
    }
Ejemplo n.º 21
0
 /// <summary>
 /// メインとなる部屋を繋ぐ(島がないように)
 /// </summary>
 private void UpdateLinkRoom()
 {
     for (int i = 0; i < mainRoom.Count - 1; i++)
     {
         int minIndex = i + 1;                        //残りの部屋と一番近い部屋の番号
         for (int j = i + 1; j < mainRoom.Count; j++) //残りの部屋との距離判定
         {
             //今記録している部屋との距離より近い場合
             if ((mainRoom[i].Position() - mainRoom[minIndex].Position()).Length()
                 > (mainRoom[i].Position() - mainRoom[j].Position()).Length())
             {
                 minIndex = j;   //部屋番号を指定する
             }
         }
         //繋ぐ線を追加
         Edge edge = new Edge(mainRoom[i].Cell(), mainRoom[minIndex].Cell(), gameDevice);
         if (!edges.Contains(edge))
         {
             edges.Add(edge);
         }
     }
     currentState = GenerateState.CreateHall;    //次の段階へ移行
 }
Ejemplo n.º 22
0
        /// <summary>
        /// メインとなる部屋を記録
        /// </summary>
        private void UpdateSelectMainRoom()
        {
            foreach (MapRoom r in rooms)
            {
                //縦横サイズが指定より大きい場合
                if (r.Length > (int)(MapDef.MAX_ROOM_SIZE * 2 * 0.65f) &&
                    r.Width > (int)(MapDef.MAX_ROOM_SIZE * 2 * 0.65f))
                {
                    r.SetColor(Color.Red);      //Debug情報
                    mainRoom.Add(r);            //リストに追加
                }
            }

            if (mainRoom.Count < 4)             //量が少なすぎるとやり直し
            {
                currentState = GenerateState.GenerateRoom;
                rooms.Clear();
                mainRoom.Clear();
                return;
            }

            currentState = GenerateState.LinkRoom;      //次の段階へ移行
        }
 private void UpdateLinkRoom()
 {
     for (int i = 0; i < mainRoom.Count - 1; ++i)
     {
         int minIndex = i + 1;                        //残りの部屋と一番近い部屋の番号
         for (int j = i + 1; j < mainRoom.Count; ++j) //残りの部屋との距離判定
         {
             //今記録している部屋との距離より近い場合
             if ((mainRoom[i].Pos - mainRoom[minIndex].Pos).sqrMagnitude
                 > (mainRoom[i].Pos - mainRoom[j].Pos).sqrMagnitude)
             {
                 minIndex = j;                                                       //部屋番号を指定する
             }
         }
         //繋ぐ線を追加
         Edge edge = new Edge(mainRoom[i].Pos, mainRoom[minIndex].Pos);
         if (!edges.Contains(edge))
         {
             edges.Add(edge);
         }
     }
     currentState = GenerateState.CreateHall;    //次の段階へ移行
 }
    // Update is called once per frame
    void Update()
    {
        GameObject globalSingletonObj = GlobalSingleton.GetGlobalSingletonObj() ;

        switch( m_State )
        {
        case GenerateState.UnActive :
            m_State = GenerateState.Destroy ;
            break ;
        case GenerateState.Destroy :
            if( null != globalSingletonObj )
            {
                SelectShipLevelGenerator selectShipSceneGenerator = globalSingletonObj.GetComponent<SelectShipLevelGenerator>() ;
                GUIUpdate guiUpdate = GlobalSingleton.GetGUIUpdateComponent() ;
                if( null != guiUpdate )
                    guiUpdate.DestroyMainCharacterUnitDataGUI() ;

                if( null != selectShipSceneGenerator &&
                    null != selectShipSceneGenerator.m_GeneratedObj )
                    GameObject.Destroy( selectShipSceneGenerator.m_GeneratedObj ) ;
            }
            m_State = GenerateState.Generate ;
            break ;
        case GenerateState.Generate :
            if( null != globalSingletonObj )
            {
                SelectShipLevelGenerator selectShipSceneGenerator = globalSingletonObj.GetComponent<SelectShipLevelGenerator>() ;
                GUIUpdate guiUpdate = GlobalSingleton.GetGUIUpdateComponent() ;
                if( null != selectShipSceneGenerator )
                {
                    Dictionary<string,string> supplementalVec = new Dictionary<string, string>() ;
                    selectShipSceneGenerator.GenerateUnit( "MainCharacter" ,
                                                           m_PrefabName ,
                                                           m_UnitDataName ,
                                                           m_RaceName ,
                                                           m_SideName ,
                                                           Vector3.zero ,
                                                           Quaternion.identity ,
                                                           supplementalVec ) ;
                }

                Camera.mainCamera.transform.rotation = Quaternion.LookRotation( Vector3.zero - Camera.mainCamera.transform.position ) ;

                if( null != guiUpdate )
                {
                    guiUpdate.CreateMainCharacterUnitDataGUI() ;
                    if( null != guiUpdate.m_MainCharacterGUIBackground.Obj )
                    {
                        Vector3 guiObjPos = guiUpdate.m_MainCharacterGUIBackground.Obj.transform.position ;
                        guiObjPos.Set( 0.73f , 0.34f , 5.0f ) ;
                        guiUpdate.m_MainCharacterGUIBackground.Obj.transform.position = guiObjPos ;
                    }
                }
            }
            m_State = GenerateState.End ;
            break ;
        case GenerateState.End :
            break ;
        }
    }
    void OnMouseDown()
    {
        if( GenerateState.End == m_State )
        {
            m_State = GenerateState.UnActive ;
            GlobalSingleton.m_CustomPrefabName = m_PrefabName ;
            GlobalSingleton.m_CustomUnitDataName = m_UnitDataName ;

            // GlobalSingleton.m_CustomActive has already been set at ClickOnGUI_ResetShipCustom.cs
        #if DEBUG
            Debug.Log( "GlobalSingleton.m_CustomActive = true ;" ) ;
        #endif
        }
    }
 // Use this for initialization
 void Start()
 {
     m_State = GenerateState.End ;
 }
Ejemplo n.º 27
0
 private void UpdateRelease()
 {
     Release();
     currentState = GenerateState.End;
 }
Ejemplo n.º 28
0
 public GenerateStateArgs(GenerateState newState, GenerateState oldState)
 {
     NewState = newState;
     OldState = oldState;
 }