/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void PasteBox_Click(object sender, EventArgs e) { if (CopyId == -1) { return; } if (Decoration == null) { Decoration = DecorationSet.AddDecoration((int)DecorationIdBox.Value); } Decoration deco = DecorationSet.GetDecoration(CopyId); if (deco == null) { return; } foreach (ViewFieldPosition view in Enum.GetValues(typeof(ViewFieldPosition))) { Decoration.SetTileId(view, deco.GetTileId(view)); Decoration.SetLocation(view, deco.GetLocation(view)); Decoration.SetSwap(view, deco.GetSwap(view)); } Decoration.ForceDisplay = deco.ForceDisplay; Decoration.IsBlocking = deco.IsBlocking; Decoration.HideItems = deco.HideItems; UpdateViewBoxStatus(); }
/// <summary> /// Change the curent decoration /// </summary> /// <param name="id">Id of the decoration</param> void ChangeDecorationId(int id) { Decoration = DecorationSet.GetDecoration(id); if (Decoration != null) { TileIdBox.Value = Decoration.GetTileId(ViewPositionBox.Position); HorizontalSwapBox.Checked = Decoration.GetSwap(ViewPositionBox.Position); BlockBox.Checked = Decoration.IsBlocking; ForceDisplayBox.Checked = Decoration.ForceDisplay; OnHackIdBox.Value = Decoration.OnHackId; OnBashIdBox.Value = Decoration.OnBashId; OnClickIdBox.Value = Decoration.OnClickId; HideItemsBox.Checked = Decoration.HideItems; } else { TileIdBox.Value = -1; HorizontalSwapBox.Checked = false; BlockBox.Checked = false; ForceDisplayBox.Checked = false; OnHackIdBox.Value = -1; OnBashIdBox.Value = -1; OnClickIdBox.Value = -1; HideItemsBox.Checked = false; } UpdateViewBoxStatus(); }
/// <summary> /// Constructor /// </summary> /// <param name="node">XmlNode handle</param> public DecorationSetForm(XmlNode node) { InitializeComponent(); LastMousePosition = Control.MousePosition; BgTileSet = new TileSet(); DecorationSet = new DecorationSet(); DecorationSet.Load(node); ChangeDecorationId(0); }
/// <summary> /// Constructor /// </summary> /// <param name="node">XmlNode handle</param> public DecorationSetForm(XmlNode node) { InitializeComponent(); LastMousePosition = Control.MousePosition; BgTileSet = new TileSet(); DecorationSet = new DecorationSet(); DecorationSet.Load(node); ChangeDecorationId(0); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void TileIdBox_ValueChanged(object sender, System.EventArgs e) { if (Decoration == null) { Decoration = DecorationSet.AddDecoration((int)DecorationIdBox.Value); } Decoration.SetTileId(ViewPositionBox.Position, (int)TileIdBox.Value); // If position is empty (aka X=-999 & y=-999), set it to zero if (Decoration.GetLocation(ViewPositionBox.Position).X < -500 && Decoration.GetLocation(ViewPositionBox.Position).Y < -500) { Decoration.SetLocation(ViewPositionBox.Position, Point.Empty); } UpdateViewBoxStatus(); }
/// <summary> /// /// </summary> void RenderScene() { VisualBox.MakeCurrent(); Display.ClearBuffers(); Batch.Begin(); // Background Batch.DrawTile(Maze.WallTileset, 0, Point.Empty); // Draw decoration if (DecorationSet != null) { DecorationSet.Draw(Batch, PressurePlate.DecorationPrimary, ViewFieldPosition.L); } Batch.End(); VisualBox.SwapBuffers(); }
/// <summary> /// Form closing /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void DecorationForm_FormClosed(object sender, FormClosedEventArgs e) { if (DrawTimer != null) { DrawTimer.Dispose(); } DrawTimer = null; if (Batch != null) { Batch.Dispose(); } Batch = null; if (BgTileSet != null) { BgTileSet.Dispose(); } BgTileSet = null; if (DecorationSet != null) { DecorationSet.Dispose(); } DecorationSet = null; if (ItemTileset != null) { ItemTileset.Dispose(); } ItemTileset = null; if (OpenGLBox != null) { OpenGLBox.Dispose(); } OpenGLBox = null; }
/// <summary> /// Render the scene /// </summary> void RenderScene() { OpenGLBox.MakeCurrent(); Display.ClearBuffers(); Batch.Begin(); // Background Batch.DrawTile(BgTileSet, 0, Point.Empty); // Render the walls if (DisplayWallBox.Checked) { foreach (TileDrawing tmp in DisplayCoordinates.GetWalls(ViewPositionBox.Position)) { Batch.DrawTile(BgTileSet, tmp.ID, tmp.Location, Color.White, 0.0f, tmp.Effect, 0.0f); } } #region Draw the decoration if (Decoration != null && DecorationSet.Tileset != null) { DecorationSet.Draw(Batch, (int)DecorationIdBox.Value, ViewPositionBox.Position); Tile tile = DecorationSet.Tileset.GetTile(Decoration.GetTileId(ViewPositionBox.Position)); if (tile != null) { Point start = Decoration.GetLocation(ViewPositionBox.Position); Rectangle rect = new Rectangle(start, tile.Size); // Red rectangle around tile if (rect.Contains(OpenGLBox.PointToClient(Control.MousePosition)) && !ItemsModeSelected) { Batch.DrawRectangle(rect, Color.Red); } } TileLocationBox.Text = Decoration.GetLocation(ViewPositionBox.Position).ToString(); } else { TileLocationBox.Text = ""; } #endregion #region Display item if (ItemsModeSelected && ItemTileset != null && (ViewPositionBox.Position == ViewFieldPosition.L || ViewPositionBox.Position == ViewFieldPosition.H || ViewPositionBox.Position == ViewFieldPosition.C)) { // Offset the item locations according to the distance Vector2 vect = DisplayCoordinates.GetMonsterScaleFactor(ViewPositionBox.Position); Point loc = Decoration.PrepareLocation(ViewPositionBox.Position); loc.Offset((int)(Decoration.ItemLocation.X * vect.X), (int)(Decoration.ItemLocation.Y * vect.Y)); Batch.DrawTile(ItemTileset, (int)ItemIdBox.Value, loc, DisplayCoordinates.GetDistantColor(ViewPositionBox.Position), 0.0f, DisplayCoordinates.GetItemScaleFactor(ViewPositionBox.Position), SpriteEffects.None, 0.0f); ItemPositionBox.Text = Decoration.ItemLocation.ToString(); } #endregion Batch.End(); OpenGLBox.SwapBuffers(); }
/// <summary> /// Changes the decoration tileset /// </summary> /// <param name="name">TileSet name</param> /// <returns>True on success</returns> bool ChangeDecorationTileSet(string name) { return(DecorationSet.LoadTileSet(name)); }