using System; using System.Collections.Generic; using System.Drawing; using System.Windows.Forms; using CodeImp.DoomBuilder.Map; using CodeImp.DoomBuilder.ZDoom; using CodeImp.DoomBuilder.Actions; using CodeImp.DoomBuilder.Windows; using CodeImp.DoomBuilder.Config; using CodeImp.DoomBuilder.GZBuilder.IO; using CodeImp.DoomBuilder.GZBuilder.Data; using CodeImp.DoomBuilder.GZBuilder.Windows; using ColladaDotNet.Pipeline.MD3; namespace CodeImp.DoomBuilder.GZBuilder { //mxd. should get rid of this class one day... public class GZGeneral { private static Dictionary modelDefEntries; //doomEdNum, entry public static Dictionary ModelDefEntries { get { return modelDefEntries; } } //gzdoom light types private static int[] gz_lights = { /* normal lights */ 9800, 9801, 9802, 9803, 9804, /* additive lights */ 9810, 9811, 9812, 9813, 9814, /* negative lights */ 9820, 9821, 9822, 9823, 9824, /* vavoom lights */ 1502, 1503}; public static int[] GZ_LIGHTS { get { return gz_lights; } } private static int[] gz_lightTypes = { 5, 10, 15 }; public static int[] GZ_LIGHT_TYPES { get { return gz_lightTypes; } } //version public const string Version = "1.01"; //debug form #if DEBUG private static DebugForm form; #endif public static void Init() { //bind actions General.Actions.BindMethods(typeof(GZGeneral)); General.MainWindow.UpdateGZDoomPannel(); //create debug form #if DEBUG form = new DebugForm(); form.Show(); form.Location = new Point(General.MainWindow.Location.X + General.MainWindow.Width, General.MainWindow.Location.Y); form.Height = General.MainWindow.Height; #endif } public static void OnMapOpenEnd() { loadModelDefs(); loadModels(); } public static void OnReloadResources() { loadModelDefs(); loadModels(); } //!!!!!!!!!!! General.Map.FormatInterface.HasCustomFields == UMDF!!!!!!!! public static bool LoadModelForThing(Thing t) { if (modelDefEntries.ContainsKey(t.Type)) { General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: got model override for thing id " + t.Type); if (modelDefEntries[t.Type].Model == null) { //load model and texture ModelDefEntry mde = modelDefEntries[t.Type]; mde.Model = ModelReader.Parse(mde, General.Map.Graphics.Device); if (mde.Model != null) { General.Map.IsChanged = true; //update display General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: loaded model for thing id " + t.Type); return true; } else { General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: failed to load model(s) for thing id " + t.Type + ". Node removed."); } } return true; } return false; } //functions private static void loadModelDefs() { Dictionary Actors = new Dictionary(); Dictionary things = General.Map.Config.GetThingTypes(); //read our new shiny ClassNames for default game things foreach (KeyValuePair ti in things) { if (ti.Value.ClassName != null) Actors.Add(ti.Value.ClassName, ti.Key); } //and for actors defined in DECORATE ICollection ac = General.Map.Data.Decorate.Actors; foreach (ActorStructure actor in General.Map.Data.Decorate.Actors) Actors.Add(actor.ClassName.ToLower(), actor.DoomEdNum); Dictionary modelDefEntriesByName = new Dictionary(); foreach (string folder in General.Map.Data.Folders) ModelDefParser.ParseFolder(modelDefEntriesByName, folder); modelDefEntries = new Dictionary(); foreach (KeyValuePair e in modelDefEntriesByName) { if (Actors.ContainsKey(e.Value.Name)) { modelDefEntries[Actors[e.Value.Name]] = modelDefEntriesByName[e.Value.Name]; } else { General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: ModelDefEntry wasn't found in Decorate: '" + e.Value.Name + "'"); } } } //load models for things which are already in the map private static void loadModels() { General.ErrorLogger.Add(ErrorType.Warning, "GZBuilder: loading models..."); foreach(Thing t in General.Map.Map.Things) LoadModelForThing(t); } //debug public static void Trace(string message) { #if DEBUG form.TextPannel.AppendText(message); #endif } public static void TraceLine(string message) { #if DEBUG form.TextPannel.AppendText(message + Environment.NewLine); #endif } public static void ClearTrace() { #if DEBUG form.TextPannel.Text = ""; #endif } //actions [BeginAction("gztogglemodels")] private static void toggleModels() { ToggleModels(); General.MainWindow.UpdateGZDoomPannel(); } public static void ToggleModels() { General.Settings.GZDrawModels = !General.Settings.GZDrawModels; General.MainWindow.DisplayStatus(StatusType.Action, "MD3 models rendering is " + (General.Settings.GZDrawModels ? "ENABLED" : "DISABLED")); General.MainWindow.RedrawDisplay(); } [BeginAction("gztogglelights")] private static void toggleLights() { ToggleLights(); General.MainWindow.UpdateGZDoomPannel(); } public static void ToggleLights() { General.Settings.GZDrawLights = !General.Settings.GZDrawLights; General.MainWindow.DisplayStatus(StatusType.Action, "Dynamic lights rendering is " + (General.Settings.GZDrawLights ? "ENABLED" : "DISABLED")); General.MainWindow.RedrawDisplay(); } [BeginAction("gztogglelightsanimation")] private static void toggleLightsAnimation() { ToggleLightsAnimation(); General.MainWindow.UpdateGZDoomPannel(); } public static void ToggleLightsAnimation() { General.Settings.GZAnimateLights = !General.Settings.GZAnimateLights; General.MainWindow.DisplayStatus(StatusType.Action, "Dynamic lights animation is " + (General.Settings.GZAnimateLights ? "ENABLED" : "DISABLED")); General.MainWindow.RedrawDisplay(); } [BeginAction("gztogglefog")] private static void toggleFog() { ToggleFog(); General.MainWindow.UpdateGZDoomPannel(); } public static void ToggleFog() { General.Settings.GZDrawFog = !General.Settings.GZDrawFog; General.MainWindow.DisplayStatus(StatusType.Action, "Colored fog rendering is " + (General.Settings.GZDrawFog ? "ENABLED" : "DISABLED")); General.MainWindow.RedrawDisplay(); General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK); } [BeginAction("gzdrawselectedmodelsonly")] private static void toggleDrawSelectedModelsOnly() { ToggleDrawSelectedModelsOnly(); General.MainWindow.UpdateGZDoomPannel(); } public static void ToggleDrawSelectedModelsOnly() { General.Settings.GZDrawSelectedModelsOnly = !General.Settings.GZDrawSelectedModelsOnly; General.MainWindow.DisplayStatus(StatusType.Action, "Rendering " + (General.Settings.GZDrawSelectedModelsOnly ? "only selected" : "all") + " models."); General.MainWindow.RedrawDisplay(); } [BeginAction("gztogglelightpannel")] public static void ToggleLightPannel() { General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK); } [BeginAction("gztogglefogpannel")] public static void ToggleFogPannel() { General.ShowWarningMessage("Not implemented yet...", MessageBoxButtons.OK); } } }