static void Main(string[] args) { #if DEBUG var vmfPath = Path.GetFullPath(@".\..\..\Tests\dev_room.vmf"); var configPath = Path.GetFullPath(@".\..\..\Tests\remotecompile.cfg"); #else var vmfPath = "path.vmf"; var configPath = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "remotecompile.cfg"); #endif //TODO: Take parameter of map to compile //TODO: Take parameter of maps root path for instances // Temporarily use vmf location var mapsRoot = Path.GetDirectoryName(vmfPath); //TODO: Take optional parameter of config file path //TODO: Load local config file, if it doesn't exist, create a default one Config config; if (File.Exists(configPath)) { //TODO: Load config } else { #region Create default config config = new Config(new List <IVNode> { new VBlock("RemoteCompileConfig", new List <IVNode> { new VBlock("BuildServer", new List <IVNode> { new VProperty("Address", "127.0.0.1") , new VProperty("Port", "9043") , new VProperty("Username", "") , new VProperty("Password", "") , new VBlock("AuthLock", new List <IVNode> { new VProperty("Token", "") , new VProperty("Expires", "") }) }) , new VProperty("BuildTarget", "Source SDK 2013") //TODO: Add all available VBSP, VVIS, VRAD parameters , new VBlock("VBSP", new List <IVNode> { new VProperty("", "") }) , new VBlock("VVIS", new List <IVNode> { new VProperty("", "") }) , new VBlock("VRAD", new List <IVNode> { new VProperty("", "") }) }) }); File.WriteAllLines(configPath, config.ToVMFStrings()); #endregion } // Load VMF if (!File.Exists(vmfPath)) { // Early exit Console.WriteLine("Map does not exist \"{0}\"", vmfPath); return; } var vmfFileContents = File.ReadAllLines(vmfPath); var vmf = new VMF(vmfFileContents); // Recursively identify and load dependent instances // Track instance dependency tree to recognize instance recursion // Only dig 100 levels deep unless otherwise specified in the config var instanceTree = new Dictionary <int, Tuple <string, List <int> > >(); BuildInstanceTree(instanceTree, 100, 0, vmf, vmfPath, BuildInstanceDictionaryKeyIndex++, mapsRoot); //TODO: Make sure there is no recursion in the instanceTree //TODO: Request hashes of all dependent resources from server. // Compare results to local copies. // Notify user of the comparison //TODO: Send compile request with serialized parameters, and list of incoming resources //TODO: Send copy of vmf and instances to server //TODO: Spin off waiting thread for server to execute OnCompleteBuild commands // This could include: downloading the map, and running the game }
static int Main(string[] args) { #if DEBUG //args = new string[] { "-file", "dev_room.vmf" }; args = new string[] { "-file", "1_instance.vmf" }; Utils.DirectoryCopy(@"../../instances", "instances", true, true); #endif #if !DEBUG try { #endif #region Get execution parameters string filePath = null; string gamePath = null; for (int i = 0; i < args.Length; i++) { if (args[i] == "-file" && i + 1 < args.Length && !args[i + 1].StartsWith("-")) { filePath = args[++i]; } else if (args[i] == "-game" && i + 1 < args.Length && !args[i + 1].StartsWith("-")) { gamePath = args[++i]; //does this matter, or should I use the vmfs path to find the instances } // else if // Add additional parameters here } if (filePath == null) { Console.ForegroundColor = ConsoleColor.Red; return 1; } #endregion #region Load VMF Console.Write("Loading file contents from \"" + filePath + "\"..."); string[] fileContents = File.ReadAllLines(filePath); Console.WriteLine("Complete."); Console.Write("Parsing vmf "); VMF vmf = new VMF(fileContents); #endregion CollapseInstances(vmf); #region Save Altered VMF string newFilePath = ""; newFilePath = filePath.EndsWith(".vmf") ? filePath.Insert(filePath.LastIndexOf("."), "_new") : filePath + "_new"; File.WriteAllLines(newFilePath, vmf.ToVMFStrings()); #endregion #if !DEBUG } #region catch - display exception catch (Exception ex) { WriteLine("Exception:", ConsoleColor.Yellow); WriteLine(ex.ToString(), ConsoleColor.Red); return 1; } #endregion #endif return 0; }
/** * Exports the given NailsMap to a VMF file. Uses the file name passed in when this adapter was constructed. * <author>1upD</author> */ public void Export(NailsMap map) { try { log.Info(string.Format("Exporting Nails map data to VMF file: {0}", this._filename)); // Make a deep copy of the stored VMF to add instances to VMF output_vmf = new VMFParser.VMF(this._vmf.ToVMFStrings()); int i = 0; foreach (NailsCube cube in map.NailsCubes) { int x_pos = cube.X * this._horizontal_scale; int y_pos = cube.Y * this._horizontal_scale; int z_pos = cube.Z * this._vertical_scale; var faces = cube.GetFaces(); if (faces.Contains(NailsCubeFace.Floor)) { instanceData instance = this.MakeInstance("floor", cube.StyleName, 0, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } if (faces.Contains(NailsCubeFace.Front)) { instanceData instance = this.MakeInstance("wall", cube.StyleName, 0, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } if (faces.Contains(NailsCubeFace.Left)) { instanceData instance = this.MakeInstance("wall", cube.StyleName, 90, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } if (faces.Contains(NailsCubeFace.Back)) { instanceData instance = this.MakeInstance("wall", cube.StyleName, 180, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } if (faces.Contains(NailsCubeFace.Right)) { instanceData instance = this.MakeInstance("wall", cube.StyleName, 270, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } if (faces.Contains(NailsCubeFace.Ceiling)) { instanceData instance = this.MakeInstance("ceiling", cube.StyleName, 0, i++, x_pos, y_pos, z_pos); insertInstanceIntoVMF(instance, output_vmf); } } using (StreamWriter sw = new StreamWriter(new FileStream(this._filename, FileMode.Create))) { var vmfStrings = output_vmf.ToVMFStrings(); foreach (string line in vmfStrings) { sw.WriteLine(line); } } log.Info(string.Format("Wrote to VMF file: {0}", this._filename)); } catch (Exception e) { log.Error("VMFAdapter.Export(): Caught exception: ", e); log.Info(string.Format("Failed to write to VMF file: {0}", this._filename)); } }
static void Main(string[] args) { #if DEBUG args = new string[] { "preview.vmf" }; //REMOVE TEST DATA WHEN DEPLOYING :P #endif try { string fileName = args.FirstOrDefault(); vmf = new VMF(File.ReadAllLines(fileName)); if (TagModifications()) File.WriteAllLines(fileName, vmf.ToVMFStrings()); } catch (Exception ex) { File.WriteAllText("errors.txt", ex.ToString()); } }