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 }
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; }
public void SetTile_R(string tileName) { int index = SCommon.IndexOf(TileCatalog.GetNames(), tileName); if (index == -1) { index = 0; // 2bs } this.Tile_R.SelectedIndex = index; }
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))); }
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; }
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); }
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(); }
// 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); }
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(); // ★★★ マップをセーブする ★★★ }
public string GetTile_R() { return(TileCatalog.GetNames()[this.Tile_R.SelectedIndex]); }
public string GetTile() { return(TileCatalog.GetNames()[LevelEditor.TileGroups[this.TileGroup.SelectedIndex].Members[this.TileMember.SelectedIndex].Index]); }