Пример #1
0
        private void LevelEditorDlg_Shown(object sender, EventArgs e)
        {
            this.Btn再読み込み
            .ForeColor = Color.Purple;                     // KeepComment:@^_ConfuserElsa // NoRename:@^_ConfuserElsa
            this.Btn保存
            .ForeColor = Color.Purple;                     // KeepComment:@^_ConfuserElsa // NoRename:@^_ConfuserElsa

            this.Tile_L.Items.Clear();
            this.Tile_R.Items.Clear();
            this.Enemy.Items.Clear();

            foreach (string tileName in TileCatalog.GetDisplayNames())
            {
                this.Tile_L.Items.Add(tileName);
                this.Tile_R.Items.Add(tileName);
            }
            foreach (string enemyName in EnemyCatalog.GetDisplayNames())
            {
                this.Enemy.Items.Add(enemyName);
            }

            this.Tile_L.SelectedIndex = 0;
            this.Tile_R.SelectedIndex = 0;
            this.Enemy.SelectedIndex  = 0;

            this.SetMode(LevelEditor.Mode_e.TILE);

            this.TileEnemySw
            .Focus();                     // KeepComment:@^_ConfuserElsa // NoRename:@^_ConfuserElsa
        }
Пример #2
0
        public void Load()
        {
            string[] lines = SCommon.TextToLines(SCommon.ENCODING_SJIS.GetString(DDResource.Load(this.MapFile)));
            int      c     = 0;

            lines = lines.Where(line => line != "" && line[0] != ';').ToArray();             // 空行とコメント行を除去

            int w = int.Parse(lines[c++]);
            int h = int.Parse(lines[c++]);

            if (w < 1 || SCommon.IMAX < w)
            {
                throw new DDError();
            }
            if (h < 1 || SCommon.IMAX < h)
            {
                throw new DDError();
            }

            this.Table = new MapCell[w, h];

            for (int x = 0; x < w; x++)
            {
                for (int y = 0; y < h; y++)
                {
                    MapCell cell = new MapCell();

                    if (c < lines.Length)
                    {
                        string[] tokens = SCommon.Tokenize(lines[c++], "\t");
                        int      d      = 0;

                        d++;                         // Skip

                        cell.TileName  = Common.GetElement(tokens, d++, GameConsts.TILE_NONE);
                        cell.Tile      = TileCatalog.Create(cell.TileName);
                        cell.EnemyName = Common.GetElement(tokens, d++, GameConsts.ENEMY_NONE);

                        // 新しい項目をここへ追加..

                        this.Table[x, y] = cell;
                    }
                    else
                    {
                        cell.TileName  = GameConsts.TILE_NONE;
                        cell.Tile      = new Tile_None();
                        cell.EnemyName = GameConsts.ENEMY_NONE;
                    }
                    this.Table[x, y] = cell;
                }
            }
            this.W         = w;
            this.H         = h;
            this.WallName  = Common.GetElement(lines, c++, GameConsts.NAME_DEFAULT);
            this.MusicName = Common.GetElement(lines, c++, GameConsts.NAME_DEFAULT);
            this.穴に落ちたら死亡  = int.Parse(Common.GetElement(lines, c++, "1")) != 0;
        }
Пример #3
0
        public void SetTile_R(string tileName)
        {
            int index = SCommon.IndexOf(TileCatalog.GetNames(), tileName);

            if (index == -1)
            {
                index = 0;                 // 2bs
            }
            this.Tile_R.SelectedIndex = index;
        }
Пример #4
0
        private void 開放(int x, int y)
        {
            MapCell cell = Game.I.Map.GetCell(x, y);

            if (cell.Tile is Tile_Bボス部屋Shutter)
            {
                cell.Tile = TileCatalog.Create("芝");                 // restore
            }
            DDGround.EL.Add(SCommon.Supplier(Effects.閉鎖_開放(x * GameConsts.TILE_W + GameConsts.TILE_W / 2, y * GameConsts.TILE_H + GameConsts.TILE_H / 2)));
        }
Пример #5
0
        private void LevelEditorDlg_Shown(object sender, EventArgs e)
        {
            this.Tile.Items.Clear();
            this.Enemy.Items.Clear();

            foreach (string tileName in TileCatalog.GetDisplayNames())
            {
                this.Tile.Items.Add(tileName);
            }

            foreach (string enemyName in EnemyCatalog.GetDisplayNames())
            {
                this.Enemy.Items.Add(enemyName);
            }

            this.Tile.SelectedIndex  = 0;
            this.Enemy.SelectedIndex = 0;

            this.TileEnemySw.Text = TEXT_MODE_TILE;
        }
Пример #6
0
        private static List <GroupInfo> CreateTileGroups()
        {
            List <GroupInfo> groups = new List <GroupInfo>();

            string[] groupNames  = TileCatalog.GetGroupNames();
            string[] memberNames = TileCatalog.GetMemberNames();
            int      count       = groupNames.Length;

            for (int index = 0; index < count; index++)
            {
                string groupName  = groupNames[index];
                string memberName = memberNames[index];

                GroupInfo group;

                {
                    int p = SCommon.IndexOf(groups, v => v.Name == groupName);

                    if (p != -1)
                    {
                        group = groups[p];
                    }
                    else
                    {
                        group = new GroupInfo()
                        {
                            Name = groupName,
                        };

                        groups.Add(group);
                    }
                }

                group.Members.Add(new GroupInfo.MemberInfo()
                {
                    Name  = memberName,
                    Index = index,
                });
            }
            return(groups);
        }
Пример #7
0
        public void SetTile(string tileName)
        {
            int index = SCommon.IndexOf(TileCatalog.GetNames(), name => name == tileName);

            if (index == -1)
            {
                throw new DDError();
            }

            for (int groupIndex = 0; groupIndex < LevelEditor.TileGroups.Count; groupIndex++)
            {
                for (int memberIndex = 0; memberIndex < LevelEditor.TileGroups[groupIndex].Members.Count; memberIndex++)
                {
                    if (LevelEditor.TileGroups[groupIndex].Members[memberIndex].Index == index)
                    {
                        this.TileGroup.SelectedIndex  = groupIndex;
                        this.TileMember.SelectedIndex = memberIndex;
                        return;
                    }
                }
            }
            throw new DDError();
        }
Пример #8
0
        // I/F
        public object Load(IResource resource)
        {
            var definition = (TileCatalogDefinition)serializer.Deserialize(resource);

            var tileCatalog = new TileCatalog(graphicsDevice, definition.Entries.Length)
            {
                Name = definition.Name
            };

            foreach (var entry in definition.Entries)
            {
                var tile = Load <Tile>(resource, entry.Uri);
                if (tile != null)
                {
                    tile.Index = entry.Index;
                    tileCatalog.Add(tile);
                }
            }

            tileCatalog.DrawMaps();

            return(tileCatalog);
        }
Пример #9
0
        private void Edit()
        {
            this.Map.Load();             // ゲーム中にマップを書き換える場合があるので、再ロードする。

            DDEngine.FreezeInput();
            DDUtils.SetMouseDispMode(true);
            LevelEditor.ShowDialog();

            int lastMouseX = DDMouse.X;
            int lastMouseY = DDMouse.Y;

            for (; ;)
            {
                if (LevelEditor.Dlg.XPressed)
                {
                    break;
                }

                // 廃止
                //if (DDKey.GetInput(DX.KEY_INPUT_E) == 1)
                //    break;

                I2Point cellPos = GameCommon.ToTablePoint(
                    DDGround.Camera.X + DDMouse.X,
                    DDGround.Camera.Y + DDMouse.Y
                    );

                MapCell cell = Game.I.Map.GetCell(cellPos);

                if (cell.IsDefault)
                {
                    // noop
                }
                else if (1 <= DDKey.GetInput(DX.KEY_INPUT_LSHIFT) && 1 <= DDKey.GetInput(DX.KEY_INPUT_LCONTROL)) // 左シフト・コントロール押下 -> 塗り潰し_L / 塗り潰し_R
                {
                    if (DDMouse.L.GetInput() == -1)                                                              // クリックを検出
                    {
                        this.Map.Save();                                                                         // 失敗を想定して、セーブしておく

                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                        {
                            string tileName = LevelEditor.Dlg.GetTile_L();

                            if (tileName != cell.TileName)
                            {
                                string targetTileName = cell.TileName;                                                 // cell.TileName は this.EditFill で変更される。

                                this.EditFill(
                                    cellPos,
                                    v => v.TileName == targetTileName,
                                    v =>
                                    {
                                        v.TileName = tileName;
                                        v.Tile     = TileCatalog.Create(tileName);
                                    }
                                    );
                            }
                        }
                        break;

                        case LevelEditor.Mode_e.ENEMY:
                        {
                            string enemyName = LevelEditor.Dlg.GetEnemy();

                            if (enemyName != cell.EnemyName)
                            {
                                string targetEnemyName = cell.EnemyName;                                                 // cell.EnemyName は this.EditFill で変更される。

                                this.EditFill(
                                    cellPos,
                                    v => v.EnemyName == targetEnemyName,
                                    v => v.EnemyName = enemyName
                                    );
                            }
                        }
                        break;

                        default:
                            throw null;                                     // never
                        }
                    }
                    else if (DDMouse.R.GetInput() == -1)         // クリックを検出
                    {
                        this.Map.Save();                         // 失敗を想定して、セーブしておく

                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                        {
                            string tileName = LevelEditor.Dlg.GetTile_R();

                            if (tileName != cell.TileName)
                            {
                                string targetTileName = cell.TileName;                                                 // cell.TileName は this.EditFill で変更される。

                                this.EditFill(
                                    cellPos,
                                    v => v.TileName == targetTileName,
                                    v =>
                                    {
                                        v.TileName = tileName;
                                        v.Tile     = TileCatalog.Create(tileName);
                                    }
                                    );
                            }
                        }
                        break;

                        case LevelEditor.Mode_e.ENEMY:
                            // none
                            break;

                        default:
                            throw null;                                     // never
                        }
                    }
                }
                else if (1 <= DDKey.GetInput(DX.KEY_INPUT_LSHIFT))                 // 左シフト押下 -> 移動 / none
                {
                    if (1 <= DDMouse.L.GetInput())
                    {
                        DDGround.Camera.X -= DDMouse.X - lastMouseX;
                        DDGround.Camera.Y -= DDMouse.Y - lastMouseY;

                        DDUtils.ToRange(ref DDGround.Camera.X, 0.0, this.Map.W * GameConsts.TILE_W - DDConsts.Screen_W);
                        DDUtils.ToRange(ref DDGround.Camera.Y, 0.0, this.Map.H * GameConsts.TILE_H - DDConsts.Screen_H);

                        DDGround.ICamera.X = SCommon.ToInt(DDGround.Camera.X);
                        DDGround.ICamera.Y = SCommon.ToInt(DDGround.Camera.Y);
                    }
                    else if (1 <= DDMouse.R.GetInput())
                    {
                        // none
                    }
                }
                else if (1 <= DDKey.GetInput(DX.KEY_INPUT_LCONTROL))                 // 左コントロール押下 -> スポイト_L / スポイト_R
                {
                    if (1 <= DDMouse.L.GetInput())
                    {
                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                            LevelEditor.Dlg.SetTile_L(cell.TileName);
                            break;

                        case LevelEditor.Mode_e.ENEMY:
                            LevelEditor.Dlg.SetEnemy(cell.EnemyName);
                            break;

                        default:
                            throw null;                                     // never
                        }
                    }
                    else if (1 <= DDMouse.R.GetInput())
                    {
                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                            LevelEditor.Dlg.SetTile_R(cell.TileName);
                            break;

                        case LevelEditor.Mode_e.ENEMY:
                            // none
                            break;

                        default:
                            throw null;                                     // never
                        }
                    }
                }
                else if (1 <= DDKey.GetInput(DX.KEY_INPUT_LALT))        // 左 ALT 押下 -> 自機ワープ / none
                {
                    if (DDMouse.L.GetInput() == -1)                     // クリックを検出
                    {
                        this.Player.X = cellPos.X * GameConsts.TILE_W + GameConsts.TILE_W / 2;
                        this.Player.Y = cellPos.Y * GameConsts.TILE_H + GameConsts.TILE_H / 2;

                        DDGround.EL.Add(SCommon.Supplier(Effects.中爆発(this.Player.X, this.Player.Y)));                         // アクションが分かるように
                    }
                    else if (1 <= DDMouse.R.GetInput())
                    {
                        // none
                    }
                }
                else                 // シフト系押下無し -> セット_L / セット_R (敵はクリア)
                {
                    if (1 <= DDMouse.L.GetInput())
                    {
                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                        {
                            string tileName = LevelEditor.Dlg.GetTile_L();

                            cell.TileName = tileName;
                            cell.Tile     = TileCatalog.Create(tileName);
                        }
                        break;

                        case LevelEditor.Mode_e.ENEMY:
                        {
                            string enemyName = LevelEditor.Dlg.GetEnemy();

                            cell.EnemyName = enemyName;
                        }
                        break;

                        default:
                            throw null;                                     // never
                        }
                    }
                    else if (1 <= DDMouse.R.GetInput())
                    {
                        switch (LevelEditor.Dlg.GetMode())
                        {
                        case LevelEditor.Mode_e.TILE:
                        {
                            string tileName = LevelEditor.Dlg.GetTile_R();

                            cell.TileName = tileName;
                            cell.Tile     = TileCatalog.Create(tileName);
                        }
                        break;

                        case LevelEditor.Mode_e.ENEMY:
                            cell.EnemyName = GameConsts.ENEMY_NONE;
                            break;

                        default:
                            throw null;                                     // never
                        }
                    }
                }

                if (DDKey.GetInput(DX.KEY_INPUT_S) == 1)                 // S キー --> Save
                {
                    this.Map.Save();

                    // 表示
                    {
                        int endFrame = DDEngine.ProcFrame + 60;

                        DDGround.EL.Add(() =>
                        {
                            DDPrint.SetPrint(0, 16);
                            DDPrint.SetBorder(new I3Color(0, 0, 0));
                            DDPrint.Print("セーブしました...");
                            DDPrint.Reset();

                            return(DDEngine.ProcFrame < endFrame);
                        });
                    }
                }
                if (DDKey.GetInput(DX.KEY_INPUT_L) == 1)                 // L キー --> Load
                {
                    this.Map.Load();

                    // 表示
                    {
                        int endFrame = DDEngine.ProcFrame + 60;

                        DDGround.EL.Add(() =>
                        {
                            DDPrint.SetPrint(0, 16);
                            DDPrint.SetBorder(new I3Color(0, 0, 0));
                            DDPrint.Print("ロードしました...");
                            DDPrint.Reset();

                            return(DDEngine.ProcFrame < endFrame);
                        });
                    }
                }

                DDCurtain.DrawCurtain();

                if (LevelEditor.Dlg.IsShowTile())
                {
                    this.DrawMap();
                }

                if (LevelEditor.Dlg.IsShowEnemy())
                {
                    LevelEditor.DrawEnemy();
                }

                lastMouseX = DDMouse.X;
                lastMouseY = DDMouse.Y;

                DDEngine.EachFrame();
            }
            DDEngine.FreezeInput();
            DDUtils.SetMouseDispMode(false);
            LevelEditor.CloseDialog();

            this.Map.Save();             // ★★★ マップをセーブする ★★★
        }
Пример #10
0
 public string GetTile_R()
 {
     return(TileCatalog.GetNames()[this.Tile_R.SelectedIndex]);
 }
Пример #11
0
 public string GetTile()
 {
     return(TileCatalog.GetNames()[LevelEditor.TileGroups[this.TileGroup.SelectedIndex].Members[this.TileMember.SelectedIndex].Index]);
 }