Пример #1
0
        private instanceData MakeInstance(string aInstanceName, string aStyleName, int aRotation, int aEntID, int aX, int aY, int aZ)
        {
            try
            {
                int    seed   = aEntID + aX + aY + aZ + aRotation;
                Random random = new Random(seed);

                List <string> filepaths = this.Config.GetStyle(aStyleName).GetInstancePaths(aInstanceName);

                string filepath = filepaths[random.Next(filepaths.Count)];

                instanceData instance = new instanceData {
                    filename = "Nails/" + filepath, rotation = aRotation
                };
                instance.xpos   = aX;
                instance.ypos   = aY;
                instance.zpos   = aZ;
                instance.ent_id = aEntID;
                return(instance);
            } catch (Exception e)
            {
                log.Error("VMFAdapter caught exception while generating instance data: ", e);
            }
            return(null);
        }
Пример #2
0
            public instanceData Copy()
            {
                var newInstanceData = new instanceData();

                newInstanceData.filename = this.filename;
                newInstanceData.rotation = this.rotation;
                newInstanceData.ent_id   = this.ent_id;
                newInstanceData.xpos     = this.xpos;
                newInstanceData.ypos     = this.ypos;
                newInstanceData.zpos     = this.zpos;

                return(newInstanceData);
            }
Пример #3
0
        private static void insertInstanceIntoVMF(instanceData instance, VMF output_vmf)
        {
            try
            {
                IList <int> list = null;

                VBlock instance_block = new VBlock("entity");
                instance_block.Body.Add(new VProperty("id", instance.ent_id.ToString()));
                instance_block.Body.Add(new VProperty("classname", "func_instance"));
                instance_block.Body.Add(new VProperty("angles", "0 " + instance.rotation + " 0"));
                instance_block.Body.Add(new VProperty("origin", instance.xpos + " " + instance.ypos + " " + instance.zpos));
                instance_block.Body.Add(new VProperty("file", instance.filename));
                output_vmf.Body.Add(instance_block);
            }
            catch (Exception e)
            {
                log.Error("VMFAdapter.insertInstanceIntoVMF(): Caught exception: ", e);
                log.Info(string.Format("Failed to insert instance: {0}", instance.filename));
            }
        }
Пример #4
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));
            }
        }