Beispiel #1
0
        public void Save(bool New)
        {
            if (m_FileHeader == null || New)
            {
                m_FileHeader            = new DesignData(m_Name, m_Category, m_SubSection);
                m_FileHeader.Width      = m_Width;
                m_FileHeader.Height     = m_Height;
                m_FileHeader.UserWidth  = m_UserWidth;
                m_FileHeader.UserHeight = m_UserHeight;

                ExportDesignItems(ref m_FileHeader);

                HouseDesignData.SaveNewDesign(m_FileHeader);
            }
            else
            {
                m_FileHeader.Items.Clear();
                m_FileHeader.Width      = m_Width;
                m_FileHeader.Height     = m_Height;
                m_FileHeader.UserWidth  = m_UserWidth;
                m_FileHeader.UserHeight = m_UserHeight;
                ExportDesignItems(ref m_FileHeader);

                HouseDesignData.UpdateDesign(m_FileHeader);
            }
        }
Beispiel #2
0
        public DesignNode(DesignData design)
        {
            this.Text = design.Name;
            _design   = design;

            _design.OnSaved += new DesignData.SavedEvent(OnSaved);
        }
Beispiel #3
0
        private void OnNewDesign(DesignData design)
        {
            bool match = false;

            treeView1.BeginUpdate();

            foreach (CategoryNode node in treeView1.Nodes)
            {
                if (node.Text.ToLower() == design.Category.ToLower())
                {
                    node.AddDesign(design);
                    match = true;
                    break;
                }
            }

            if (!match)
            {
                CategoryNode node = new CategoryNode(design.Category);
                node.AddDesign(design);
                treeView1.Nodes.Add(node);
            }

            treeView1.EndUpdate();
        }
        private static void WriteSavedComponentData(DesignData header, BinaryFileReader oldFileReader, BinaryFileWriter writer)
        {
            int count = header.RecordCount;

            for (int j = 0; j < count; ++j)
            {
                int ver = oldFileReader.ReadInt();

                switch (ver)
                {
                case 0:
                    writer.WriteInt(ver);                             // version
                    writer.WriteInt(oldFileReader.ReadInt());         // index
                    writer.WriteInt(oldFileReader.ReadInt());         // x
                    writer.WriteInt(oldFileReader.ReadInt());         // y
                    writer.WriteInt(oldFileReader.ReadInt());         // z
                    writer.WriteInt(oldFileReader.ReadInt());         // level
                    break;

                case 1:
                    writer.WriteInt(ver);                             // version
                    writer.WriteInt(oldFileReader.ReadInt());         // index
                    writer.WriteInt(oldFileReader.ReadInt());         // x
                    writer.WriteInt(oldFileReader.ReadInt());         // y
                    writer.WriteInt(oldFileReader.ReadInt());         // z
                    writer.WriteInt(oldFileReader.ReadInt());         // level
                    writer.WriteInt(oldFileReader.ReadInt());         // hue
                    break;
                }
            }
        }
Beispiel #5
0
        public void Populate(ArrayList designs)
        {
            Hashtable categories = new Hashtable(0, new CaseInsensitiveHashCodeProvider(), new CaseInsensitiveComparer());

            treeView1.BeginUpdate();

            // clear nodes
            treeView1.Nodes.Clear();

            for (int i = 0; i < designs.Count; ++i)
            {
                DesignData   design   = (DesignData)designs[i];
                CategoryNode category = null;

                if (categories.ContainsKey(design.Category))
                {
                    category = (CategoryNode)categories[design.Category];
                }
                else
                {
                    category = new CategoryNode(design.Category);
                    categories.Add(category.Text, category);
                    treeView1.Nodes.Add(category);
                }

                category.AddDesign(design);
            }

            treeView1.EndUpdate();
            categories.Clear();
        }
Beispiel #6
0
        public override void Export(DesignData design)
        {
            string filename = GetExportFileName(design.Name);

            if (filename.Length > 0)
            {
                if (!design.IsLoaded)
                {
                    design.Load();
                }

                using (StreamWriter sw = new StreamWriter(filename, false))
                {
                    sw.WriteLine("6 version");
                    sw.WriteLine("1 template id");
                    sw.WriteLine("-1 item version");

                    sw.WriteLine("{0} num components", design.Items.Count);

                    for (int i = 0; i < design.Items.Count; ++i)
                    {
                        DesignItem item = design.Items[i];
                        sw.WriteLine("{0} {1} {2} {3} 1", item.ItemID, item.X, item.Y, item.Z);
                    }
                }
            }
        }
Beispiel #7
0
        public int PatchMulti(DesignData design, ArrayList Components)
        {
            bool Success;

            mDesign     = design;
            mComponents = Components;

            Success = LoadSourceMultiIndex();
            Success = LoadSourceMultiMul();

            if (Success)
            {
                UpdateIndex();
                AddBlocksToMultiMul();
                GenerateNewMultiIdxFile();
                GenerateNewMultiMulFile();
            }

            if (Success)
            {
                return(mFreeSlot);
            }
            else
            {
                return(-1);
            }
        }
Beispiel #8
0
        public void ExportDesigns(ArrayList designs, string defaultFile)
        {
            if (designs.Count == 0)
            {
                return;
            }

            string filename = GetExportFileName(defaultFile);

            if (filename.Length > 0)
            {
                BinaryFileWriter writer = new BinaryFileWriter(File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None));

                // write file version
                writer.WriteShort(EXPORT_VERSION);
                // writer design count
                writer.WriteShort((short)designs.Count);

                for (int i = 0; i < designs.Count; ++i)
                {
                    DesignData design = (DesignData)designs[i];

                    if (!design.IsLoaded)
                    {
                        design.Load();
                    }

                    ExportDesign(design, writer);
                    design.Unload();
                }

                writer.Close();
                System.Windows.Forms.MessageBox.Show(string.Format("{0} designs were exported.", designs.Count));
            }
        }
Beispiel #9
0
        public void ExportDesign(DesignData design, BinaryFileWriter writer)
        {
            writer.WriteString(design.Name);
            writer.WriteString(design.Category);
            writer.WriteString(design.Subsection);
            writer.WriteInt(design.Width);
            writer.WriteInt(design.Height);
            writer.WriteInt(design.UserWidth);
            writer.WriteInt(design.UserHeight);

            // item count
            writer.WriteInt(design.Items.Count);

            for (int i = 0; i < design.Items.Count; ++i)
            {
                DesignItem item = design.Items[i];

                writer.WriteShort(item.ItemID);
                writer.WriteShort((short)item.X);
                writer.WriteShort((short)item.Y);
                writer.WriteShort((short)item.Z);
                writer.WriteShort(item.Level);
                writer.WriteShort(item.Hue);
            }
        }
Beispiel #10
0
        private void btnProperties_Click(object sender, System.EventArgs e)
        {
            if (SelectedNode != null)
            {
                if (!SelectedNode.Design.IsLoaded)
                {
                    SelectedNode.Design.Load();
                }

                DesignPropertyEditor dlg    = new DesignPropertyEditor();
                DesignData           design = SelectedNode.Design;

                dlg.LoadForm(ref design);

                if (dlg.DialogResult == DialogResult.OK)
                {
                    Cursor.Current = Cursors.WaitCursor;
                    design.Save();
                    Cursor.Current = Cursors.Default;
                }

                design.Unload();
                dlg.Dispose();
            }
        }
Beispiel #11
0
 private void RaiseExtractedEvent(DesignData design)
 {
     if (OnExtracted != null)
     {
         OnExtracted(design);
     }
 }
Beispiel #12
0
        public override void Export(DesignData design)
        {
            string filename = Utility.GetSaveFileName("(*.mlt)|*.mlt", "Multi Data File", "");

            if (filename.Length > 0)
            {
                if (!design.IsLoaded)
                {
                    design.Load();
                }

                int zoffset = CalculateMinZ(design.Items);

                BinaryFileWriter writer = new BinaryFileWriter(File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None));

                for (int i = 0; i < design.Items.Count; ++i)
                {
                    DesignItem item = design.Items[i];

                    writer.WriteShort(item.ItemID);
                    writer.WriteShort((short)item.X);
                    writer.WriteShort((short)item.Y);
                    writer.WriteShort((short)(item.Z - zoffset));
                    writer.WriteShort(1);
                    writer.WriteShort(item.Hue);
                }

                writer.Close();
            }
        }
        public static void LoadDesign(DesignData designHeader)
        {
            if (File.Exists(BIN_FILE))
            {
                BinaryFileReader reader = new BinaryFileReader(File.Open(BIN_FILE, FileMode.Open, FileAccess.Read, FileShare.Read));

                try
                {
                    reader.Seek(designHeader.FilePosition, SeekOrigin.Begin);

                    int count = designHeader.RecordCount;

                    // load the house components
                    int index, x, y, z, level, hue;

                    for (int i = 0; i < count; ++i)
                    {
                        index = 0;
                        x     = 0;
                        y     = 0;
                        z     = 0;
                        level = 0;
                        hue   = 0;

                        int compVersion = reader.ReadInt();

                        switch (compVersion)
                        {
                        case 0:
                            index = reader.ReadInt();
                            x     = reader.ReadInt();
                            y     = reader.ReadInt();
                            z     = reader.ReadInt();
                            level = reader.ReadInt();
                            break;

                        case 1:
                            index = reader.ReadInt();
                            x     = reader.ReadInt();
                            y     = reader.ReadInt();
                            z     = reader.ReadInt();
                            level = reader.ReadInt();
                            hue   = reader.ReadInt();
                            break;
                        }

                        designHeader.Items.Add(new DesignItem(index, x, y, z, level, hue));
                    }
                }
                catch (Exception e)
                {
                    System.Windows.Forms.MessageBox.Show("Unable to load design\n" + e.Message);
                }
                finally
                {
                    reader.Close();
                }
            }
        }
        public static void DeleteDesign(DesignData header)
        {
            int index = m_DesignHeaders.IndexOf(header);

            if (index != -1)
            {
                m_DesignHeaders.RemoveAt(index);
                SaveData();
            }
        }
        public static void SaveNewDesign(DesignData design)
        {
            m_UnsavedDesigns.Add(design);
            SaveData();

            if (OnNewDesignSaved != null)
            {
                OnNewDesignSaved(design);
            }
        }
Beispiel #16
0
        private void mnuImportMultiText_Click(object sender, System.EventArgs e)
        {
            Cursor.Current = Cursors.WaitCursor;
            MultiTextDataAdapter adapter = new MultiTextDataAdapter();
            DesignData           design  = adapter.ImportDesign();

            if (design != null)
            {
                design.Save();
            }

            Cursor.Current = Cursors.Default;
        }
Beispiel #17
0
        private void OpenDesignPreview(DesignData design)
        {
            Cursor.Current = Cursors.WaitCursor;

            if (!design.IsLoaded)
            {
                design.Load();
            }

            Cursor.Current = Cursors.Default;

            new DesignPreview().LoadForm(new HouseDesign(design));
        }
Beispiel #18
0
        public override DesignData ImportDesign()
        {
            string filename = GetImportFileName();

            if (!File.Exists(filename))
            {
                return(null);
            }

            DesignData    design      = new DesignData();
            DesignItemCol designItems = new DesignItemCol();

            StreamReader reader = new StreamReader(File.OpenRead(filename));

            string[] TextArr;
            string   Text;

            char[] Separator = { ' ' };

            try
            {
                while (reader.Peek() > -1)
                {
                    Text = reader.ReadLine();

                    if (IsMultiBlock(Text))
                    {
                        TextArr = Text.Split(Separator);

                        DesignItem designItem = new DesignItem();
                        designItem.ItemID = short.Parse(TextArr[0]);
                        designItem.X      = int.Parse(TextArr[1]);
                        designItem.Y      = int.Parse(TextArr[2]);
                        designItem.Z      = int.Parse(TextArr[3]);

                        designItems.Add(designItem);
                    }
                }

                design.ImportItems(designItems, true, false);
            }
            catch
            {
            }
            finally
            {
                reader.Close();
            }

            return(design);
        }
        public static void LoadDesignHeaders()
        {
            if (File.Exists(INDEX_FILE))
            {
                BinaryFileReader reader = new BinaryFileReader(File.Open(INDEX_FILE, FileMode.Open, FileAccess.Read, FileShare.Read));

                try
                {
                    int count   = reader.ReadInt();
                    int version = reader.ReadInt();

                    m_DesignHeaders = new ArrayList(count);

                    for (int i = 0; i < count; ++i)
                    {
                        DesignData header = new DesignData();

                        switch (version)
                        {
                        case 0:
                            header.Name         = reader.ReadString();
                            header.Category     = reader.ReadString();
                            header.Subsection   = reader.ReadString();
                            header.Width        = reader.ReadInt();
                            header.Height       = reader.ReadInt();
                            header.UserWidth    = reader.ReadInt();
                            header.UserHeight   = reader.ReadInt();
                            header.FilePosition = reader.ReadLong();
                            header.RecordCount  = reader.ReadInt();
                            break;
                        }

                        m_DesignHeaders.Add(header);
                    }
                }
                catch (Exception e)
                {
                    m_DesignHeaders.Clear();
                    System.Windows.Forms.MessageBox.Show("Unable to load the designs\n" + e.Message);
                }
                finally
                {
                    reader.Close();
                }
            }
            else
            {
                m_DesignHeaders = new ArrayList();
            }
        }
        private static void WriteSavedComponentData(BinaryFileReader oldBinReader, BinaryFileWriter binWriter)
        {
            for (int i = 0; i < m_DesignHeaders.Count; ++i)
            {
                DesignData header = (DesignData)m_DesignHeaders[i];

                oldBinReader.Seek(header.FilePosition, SeekOrigin.Begin);
                // update record start position
                header.FilePosition = binWriter.Position;

                // write component data
                WriteSavedComponentData(header, oldBinReader, binWriter);
            }
        }
        public static void UpdateDesign(DesignData design)
        {
            if (!design.IsNewRecord)
            {
                int index = m_DesignHeaders.IndexOf(design);

                if (index != -1)
                {
                    m_DesignHeaders.RemoveAt(index);
                }
            }

            m_UnsavedDesigns.Add(design);
            SaveData();
        }
Beispiel #22
0
        public void LoadForm(DesignData design)
        {
            if (design != null)
            {
                _design      = design;
                lblName.Text = _design.Name;

                moveItemControl1.Enabled = false;

                Show();
            }
            else
            {
                Close();
            }
        }
Beispiel #23
0
        private static void LoadCategories(ArrayList headers)
        {
            for (int i = 0; i < headers.Count; ++i)
            {
                DesignData header = (DesignData)headers[i];

                string category   = (header.Category == null || header.Category.Length == 0) ? "Misc" : header.Category;
                string subSection = (header.Subsection == null || header.Subsection.Length == 0) ? "Misc" : header.Subsection;

                Hashtable subSections = GetSubSections(category);

                if (!subSections.ContainsKey(subSection))
                {
                    subSections.Add(subSection, null);
                }
            }
        }
Beispiel #24
0
        public void AddDesign(DesignData design)
        {
            int index = FindSubsection(design.Subsection.ToLower());

            SubsectionNode subsection = null;

            if (index != -1)
            {
                subsection = (SubsectionNode)this.Nodes[index];
            }
            else
            {
                subsection = new SubsectionNode(design.Subsection);
                this.Nodes.Add(subsection);
            }

            subsection.Nodes.Add(new DesignNode(design));
        }
Beispiel #25
0
        // used to convert components into collection of design items
        private void ExportDesignItems(ref DesignData design)
        {
            for (int i = 0; i < HouseDesign.Levels; ++i)
            {
                for (int x = 0; x < design.Width; ++x)
                {
                    for (int y = 0; y < design.Height; ++y)
                    {
                        ArrayList list = m_Components[x][y][i];

                        foreach (HouseComponent hc in list)
                        {
                            design.Items.Add(new DesignItem(hc.Index, x, y, hc.Z, i, hc.Hue));
                        }
                    }
                }
            }
        }
        public override DesignData ImportDesign()
        {
            string filename = GetImportFileName();

            if (!File.Exists(filename))
            {
                return(null);
            }

            BinaryFileReader reader = new BinaryFileReader(File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.Read));

            short version = reader.ReadShort();

            DesignData design = new DesignData();

            if (version == 1)
            {
                design.Name       = reader.ReadString();
                design.Category   = reader.ReadString();
                design.Subsection = reader.ReadString();
                design.Width      = reader.ReadInt();
                design.Height     = reader.ReadInt();
                design.UserWidth  = reader.ReadInt();
                design.UserHeight = reader.ReadInt();

                int count = reader.ReadInt();

                for (int i = 0; i < count; ++i)
                {
                    short index = reader.ReadShort();
                    short x     = reader.ReadShort();
                    short y     = reader.ReadShort();
                    short z     = reader.ReadShort();
                    short level = reader.ReadShort();
                    short hue   = reader.ReadShort();

                    design.Items.Add(new DesignItem(index, x, y, z, level, hue));
                }
            }

            reader.Close();

            return(design);
        }
Beispiel #27
0
        public void LoadForm(ref DesignData design)
        {
            PopulateCategories();
            SelectCategory(design.Category);

            m_Name             = design.Name;
            m_Category         = design.Category;
            m_Subsection       = design.Subsection;
            txtName.Text       = design.Name;
            cboCategory.Text   = design.Category;
            cboSubSection.Text = design.Subsection;

            this.ShowDialog();

            if (!m_Cancelled)
            {
                design.Name       = m_Name;
                design.Category   = m_Category;
                design.Subsection = m_Subsection;
            }
        }
        public override void Export(DesignData design)
        {
            string filename = GetExportFileName(design.Name);

            if (filename.Length > 0)
            {
                if (!design.IsLoaded)
                {
                    design.Load();
                }

                BinaryFileWriter writer = new BinaryFileWriter(File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None));

                writer.WriteShort(EXPORT_VERSION);
                writer.WriteString(design.Name);
                writer.WriteString(design.Category);
                writer.WriteString(design.Subsection);
                writer.WriteInt(design.Width);
                writer.WriteInt(design.Height);
                writer.WriteInt(design.UserWidth);
                writer.WriteInt(design.UserHeight);

                // item count
                writer.WriteInt(design.Items.Count);

                for (int i = 0; i < design.Items.Count; ++i)
                {
                    DesignItem item = design.Items[i];

                    writer.WriteShort(item.ItemID);
                    writer.WriteShort((short)item.X);
                    writer.WriteShort((short)item.Y);
                    writer.WriteShort((short)item.Z);
                    writer.WriteShort(item.Level);
                    writer.WriteShort(item.Hue);
                }

                writer.Close();
            }
        }
Beispiel #29
0
        // Extract the user selected items
        private void StartExtraction(object state)
        {
            ExtractRequestArgs args = CreateExtractRequestArgs();
            // submit the request to the server
            ExtractResponse resp = Connection.ExtractDesign(args);

            if (resp == null)
            {
                RaiseExtractedEvent(null);
                return;
            }
            else
            {
                _items = resp.Items != null ? resp.Items : new DesignItemCol();
            }

            if (_frozen && _mode == ExtractMode.Area)
            {
                for (int i = 0; i < resp.Rects.Count; ++i)
                {
                    ExtractFrozenItems(resp.Rects[i], resp.Map, _hues);
                }
            }

            if (resp == null || resp.Items.Count == 0)
            {
                RaiseExtractedEvent(null);
            }

            DesignData design = null;

            if (resp.Items.Count > 0)
            {
                design = new DesignData(_name, _category, _subsection);
                design.ImportItems(resp.Items, true, _foundation);
            }

            RaiseExtractedEvent(design);
        }
Beispiel #30
0
        public HouseDesign(DesignData fileHeader)
        {
            m_FileHeader = fileHeader;
            m_Name       = fileHeader.Name;
            m_Category   = fileHeader.Category;
            m_SubSection = fileHeader.Subsection;
            m_Width      = fileHeader.Width;
            m_Height     = fileHeader.Height;
            m_UserWidth  = fileHeader.UserWidth;
            m_UserHeight = fileHeader.UserHeight;

            m_Components = null;
            Clear();

            if (fileHeader == null)
            {
                return;
            }

            if (!m_FileHeader.IsLoaded)
            {
                m_FileHeader.Load();
            }

            for (int i = 0; i < fileHeader.Items.Count; ++i)
            {
                DesignItem item = fileHeader.Items[i];

                HouseComponent hc = new HouseComponent(item.ItemID, item.Z);
                hc.Hue = item.Hue;

                m_Components[item.X][item.Y][GetZLevel(item.Z)].Add(hc);
            }

            Sort();

            // unload design items to conserve memory
            m_FileHeader.Unload();
        }