UltimateZoneBuilder/Source/Plugins/VisplaneExplorer/BuilderPlug.cs

165 lines
4.5 KiB
C#
Raw Normal View History


#region ================== Copyright (c) 2012 Pascal vd Heiden
/*
* Copyright (c) 2012 Pascal vd Heiden, www.codeimp.com
* This program is released under GNU General Public License
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#endregion
#region ================== Namespaces
using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.Text;
using System.IO;
using System.Reflection;
using CodeImp.DoomBuilder.Actions;
using CodeImp.DoomBuilder.Plugins.VisplaneExplorer.Properties;
using CodeImp.DoomBuilder.Windows;
using CodeImp.DoomBuilder.IO;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using CodeImp.DoomBuilder.Geometry;
using System.Drawing;
using CodeImp.DoomBuilder.Editing;
using CodeImp.DoomBuilder.Plugins;
using CodeImp.DoomBuilder.Types;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Data;
#endregion
namespace CodeImp.DoomBuilder.Plugins.VisplaneExplorer
{
public class BuilderPlug : Plug
{
#region ================== Variables
// Objects
private static BuilderPlug me;
private VPOManager vpo;
private InterfaceForm interfaceform;
// Palettes
private Palette[] palettes;
#endregion
#region ================== Properties
// Properties
public static BuilderPlug Me { get { return me; } }
public override string Name { get { return "VisplaneExplorer"; } }
internal static VPOManager VPO { get { return me.vpo; } }
internal static InterfaceForm InterfaceForm { get { return me.interfaceform; } }
internal static Palette[] Palettes { get { return me.palettes; } }
public override int MinimumRevision { get { return 1545; } }
#endregion
#region ================== Initialize / Dispose
// This event is called when the plugin is initialized
public override void OnInitialize()
{
base.OnInitialize();
General.Actions.BindMethods(this);
// Load interface controls
interfaceform = new InterfaceForm();
// Load VPO manager (manages multithreading and communication with vpo.dll)
vpo = new VPOManager();
// Keep a static reference
me = this;
}
// Some things cannot be initialized at plugin start, so we do them here
public override void OnMapOpenBegin()
{
base.OnMapOpenBegin();
if(palettes == null)
{
// Load palettes
palettes = new Palette[(int)ViewStats.NumStats];
palettes[(int)ViewStats.Visplanes] = new Palette(Resources.Visplanes_pal);
palettes[(int)ViewStats.Drawsegs] = new Palette(Resources.Drawsegs_pal);
palettes[(int)ViewStats.Solidsegs] = new Palette(Resources.Solidsegs_pal);
palettes[(int)ViewStats.Openings] = new Palette(Resources.Openings_pal);
ApplyUserColors();
}
}
// Preferences changed
public override void OnClosePreferences(PreferencesController controller)
{
base.OnClosePreferences(controller);
if(General.Map != null) //mxd
ApplyUserColors();
}
// This is called when the plugin is terminated
public override void Dispose()
{
// Clean up
interfaceform.Dispose();
interfaceform = null;
vpo.Dispose();
vpo = null;
General.Actions.UnbindMethods(this);
base.Dispose();
}
#endregion
#region ================== Methods
// This applies user-defined appearance colors to the palettes
private void ApplyUserColors()
{
// Override special palette indices with user-defined colors
for (int i = 0; i < palettes.Length; i++) {
palettes[i].SetColor(Tile.POINT_VOID_B, General.Colors.Background.WithAlpha(0).ToInt());
}
}
// This returns a unique temp filename
public static string MakeTempFilename(string extension)
{
string filename;
string chars = "abcdefghijklmnopqrstuvwxyz1234567890";
Random rnd = new Random();
int i;
do
{
// Generate a filename
filename = "";
for(i = 0; i < 8; i++) filename += chars[rnd.Next(chars.Length)];
filename = Path.Combine(General.TempPath, filename + extension);
}
// Continue while file is not unique
while(File.Exists(filename) || Directory.Exists(filename));
// Return the filename
return filename;
}
#endregion
}
}