// add a new level to this project protected void AddNewLevel() { // create and add the level LevelData level = new LevelData(); m_Levels.Add(level); // update the navigation tree and select the new level RebuildTree(); SelectNode(level); }
// add a new level to this project, as a copy of another level protected void CopyLevel() { // get a reference to the current tree node TreeNode node = treeView1.SelectedNode; // is it a valid level? if (IsLevelNode(node)) { // create a copy of the level LevelData levelSrc = (LevelData)node.Tag; LevelData levelNew = new LevelData(levelSrc.ToString()); // insert the new level just after its source int index = m_Levels.IndexOf(levelSrc); m_Levels.Insert(index + 1, levelNew); // update the navigation tree and select the new level RebuildTree(); SelectNode(levelNew); } }
// draw the bricks protected void DrawLevelData(Graphics g, LevelData level) { foreach (Brick b in level.Bricks) { g.FillRectangle( // fill brick m_BrickBrushes[b.HitsToClear - 1], m_GameRect.Left + b.X, m_GameRect.Top + b.Y, level.BrickWidth, level.BrickHeight); g.DrawRectangle( // outline brick Pens.Black, m_GameRect.Left + b.X, m_GameRect.Top + b.Y, level.BrickWidth, level.BrickHeight); } }
// draw "ghosted" brick where the new brick would be located protected void DrawGhostBrick(Graphics g, LevelData level) { if (m_NewBrickX >= 0 && m_NewBrickY >= 0) { g.FillRectangle( // fill brick m_GhostBrush, m_GameRect.Left + m_NewBrickX, m_GameRect.Top + m_NewBrickY, level.BrickWidth, level.BrickHeight); g.DrawRectangle( // outline brick Pens.Black, m_GameRect.Left + m_NewBrickX, m_GameRect.Top + m_NewBrickY, level.BrickWidth, level.BrickHeight); } }
// locate the tree node that refers to the given level // and select it in our navigation tree control protected void SelectNode(LevelData level) { // locate root node, clear selection TreeNode root = treeView1.Nodes[0]; treeView1.SelectedNode = null; // reset editor control's level data reference brickBreakerEditorControl1.LevelData = null; // scan the navigation tree, looking for the given level foreach (TreeNode node in root.Nodes) { if (node.Tag == level) { // simply selecting the node will trigger the // selection events on the navigation tree control // which will call our handler for AfterSelect // and tell the editor control to display the level // data for the newly-selected node treeView1.SelectedNode = node; // stop looking, we found it break; } } }