예제 #1
0
        public void ResetMap()
        {
            this.Objects.Clear();
            this.Characters.Clear();

            var generator = new DungeonMapGenerator();

            generator.CreateMap(new Form(10, 10), new Form(4, 4), UnityEngine.Random.Range(5, 10));

            this.MapSize = generator.MapSize;
            this.MapData = generator.Map;
            this.Rooms   = generator.Rooms;

            //階段生成
            AddObject(new Step(this)
            {
                IsNext = true
            });

            //フロア情報取得
            var floorInfo = Database.DataBase.FloorMasters[this.Floor];

            //アイテム生成
            var itemCnt = UnityEngine.Random.Range(4, 7);

            for (int i = 0; i < itemCnt; i++)
            {
                //フロア情報から抽選
                var rotItem = floorInfo.ItemTable.WaitedSample(x => x.Rate);
                var count   = rotItem.CountFrom > 0 ? UnityEngine.Random.Range(rotItem.CountFrom, rotItem.CountTo) : 0;
                AddObject(new Item(this, rotItem.ItemId, count));
            }

            //プレイヤー生成
            AddCharacter(new Player(this));

            //モンスター生成
            var enemyCnt = UnityEngine.Random.Range(3, 6);

            for (int i = 0; i < enemyCnt; i++)
            {
                //フロア情報から抽選
                AddCharacter(new Enemy(this, floorInfo.EnemyTable.WaitedSample(x => x.Rate).Id));
            }

            //TODO:削除しないでオブジェクトのリサイクル
            //オブジェクトを全削除
            var cells = MapRoot.GetComponentsInChildren <SpriteRenderer>();

            for (int i = 0; i < cells.Length; i++)
            {
                GameObject.Destroy(cells[i].gameObject);
            }
            var charas = CharacterRoot.GetComponentsInChildren <SpriteRenderer>();

            for (int i = 0; i < charas.Length; i++)
            {
                GameObject.Destroy(charas[i].gameObject);
            }
            var objects = ObjectRoot.GetComponentsInChildren <SpriteRenderer>();

            for (int i = 0; i < objects.Length; i++)
            {
                GameObject.Destroy(objects[i].gameObject);
            }
            var masks = MaskRoot.GetComponentsInChildren <SpriteRenderer>();

            for (int i = 0; i < masks.Length; i++)
            {
                GameObject.Destroy(masks[i].gameObject);
            }

            //プレイヤー&敵オブジェクト配置
            foreach (var chara in this.Characters)
            {
                chara.InstantiateObject(DungeonPrefabs.PlayerPrefab, CharacterRoot);
            }

            //その他オブジェクト配置
            foreach (var obj in this.Objects)
            {
                obj.InstantiateObject(DungeonPrefabs.ObjectPrefab, ObjectRoot);
            }

            //マップ描画
            CreateMap();

            //マスク生成
            var shadow = GameObject.Instantiate(DungeonPrefabs.ShadowPrefab).GetComponent <SpriteRenderer>();

            shadow.transform.localScale    = new Vector2(MapSize.x, MapSize.y);
            shadow.transform.localPosition = new Vector2(-16, 16);
            shadow.transform.SetParent(MaskRoot, false);
            this.MaskCircle = GameObject.Instantiate(DungeonPrefabs.MaskCirclePrefab).GetComponent <SpriteRenderer>();
            this.MaskCircle.transform.SetParent(Player.Presenter.transform, false);
            this.MaskCircle.transform.localPosition = new Vector2(-40, 40);
            this.MaskRoom = GameObject.Instantiate(DungeonPrefabs.MaskRoomPrefab).GetComponent <SpriteRenderer>();
            this.MaskRoom.transform.SetParent(MaskRoot, false);
            UpdateMaskImage();
        }