/[MorrowindCustomClothingSlotCreator]/trunk/libTES3FileFormat/PlugingClothing.cs
ViewVC logotype

Diff of /trunk/libTES3FileFormat/PlugingClothing.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 30 by william, Sat Jul 30 09:15:16 2011 UTC revision 33 by william, Sat Jul 30 11:47:53 2011 UTC
# Line 8  using System.Windows.Forms; Line 8  using System.Windows.Forms;
8    
9  namespace libTES3FileFormat  namespace libTES3FileFormat
10  {  {
11        
12      public enum ClothingTypes      public enum ClothingTypes
13      {      {
14          Pants,      /* 0 */          Pants,      /* 0 */
# Line 50  namespace libTES3FileFormat Line 50  namespace libTES3FileFormat
50      }      }
51      public class ClothingEntry : IClothingEntry, IComparable      public class ClothingEntry : IClothingEntry, IComparable
52      {      {
53          #region IComparable Members          internal EntryCommitEvent<ClothingEntry> OnEntryCommitEvent;
54    
55          public int CompareTo(object obj) { return this.CLOT_NAME.CompareTo((obj as ClothingEntry).CLOT_NAME); }          //internal BinaryWriter writer = null;
56    
57            public bool Commit(ICommitWriter commit_writer)
58            {
59                if (this.OnEntryCommitEvent != null)
60                {
61                    return this.OnEntryCommitEvent.Invoke(this, commit_writer);
62                }
63                return false;
64            }
65    
66    
67            internal bool WriteCommit(ICommitWriter commit_writer)
68            {
69                bool ret = true;
70                BinaryWriter bw = commit_writer.GetWriter();
71                if (bw == null) return false;
72                bw.Seek(this.Offset, SeekOrigin.Begin);
73                // write out the data
74                try
75                {
76                    bw.Write(this.CLOT_MAGIC);
77                    bw.Write(this.CLOT_SIZE);
78    
79                    bw.Write(this.CLOT_NAME_MAGIC);
80                    bw.Write(this.CLOT_NAME_LENGTH);
81                    bw.Write(ASCIIEncoding.ASCII.GetBytes(this.CLOT_NAME));
82    
83                    bw.Write(this.CLOT_MODL_MAGIC);
84                    bw.Write(this.CLOT_MODL_LENGTH);
85                    bw.Write(ASCIIEncoding.ASCII.GetBytes(this.CLOT_MODL));
86    
87                    bw.Write(this.CLOT_FULLNAME_MAGIC);
88                    bw.Write(this.CLOT_FULLNAME_LENGTH);
89                    bw.Write(ASCIIEncoding.ASCII.GetBytes(this.CLOT_FULLNAME));
90    
91                    bw.Write(this.CLOT_CTDT_MAGIC);
92                    bw.Write(this.CLOT_CTDT_SIZE);
93                    bw.Write(this.CLOT_CTDT_TYPE);
94                    bw.Write(this.CLOT_CTDT_WEIGHT);
95                    bw.Write(this.CLOT_CTDT_VALUE);
96                    bw.Write(this.CLOT_CTDT_ENCHANTPTS);
97                    
98                    bw.Write(this.CLOT_OTHER_DATA);
99                }
100                catch (Exception ex) { Console.WriteLine(ex.ToString()); ret = false; }
101                return ret;
102            }
103    
104            #region IComparable Members
105            public int CompareTo(object obj) { return this.CLOT_NAME.CompareTo((obj as ClothingEntry).CLOT_NAME); }
106          #endregion          #endregion
107          public ClothingEntry()          public ClothingEntry()
108          {          {
# Line 117  namespace libTES3FileFormat Line 166  namespace libTES3FileFormat
166      public interface IPlugingClothing : IParse, ICommit, IAsBytes, ISizeOffset      public interface IPlugingClothing : IParse, ICommit, IAsBytes, ISizeOffset
167      {      {
168          Dictionary<string, ClothingEntry> ClothingEntries { get; }          Dictionary<string, ClothingEntry> ClothingEntries { get; }
169            //bool CommitEntry(ClothingEntry entry);
170      }      }
171      public class PlugingClothing : IPlugingClothing, ICommitParseAsBytes      public class PlugingClothing : IPlugingClothing, ICommitParseAsBytes
172      {      {
# Line 153  namespace libTES3FileFormat Line 203  namespace libTES3FileFormat
203          }          }
204    
205          #endregion          #endregion
206    
207            internal bool CommitEntry(ClothingEntry entry, ICommitWriter writer)
208            {
209                bool ret = false;
210                //if (writer == null) writer = new BinaryWriter(this.reader);
211                
212                ret = entry.WriteCommit(writer);
213                return ret;
214            }
215            internal bool CommitAllEntries(ICommitWriter writer)
216            {
217                bool ret = false;
218                foreach (KeyValuePair<string, ClothingEntry> key_pair in this.ClothingEntries)
219                {
220                    ret = key_pair.Value.OnEntryCommitEvent(key_pair.Value, writer);
221                }
222                return ret;
223            }
224          #region IParse Members          #region IParse Members
225    
226          public bool Parse(MemoryStream stream)          public bool Parse(MemoryStream stream)
# Line 164  namespace libTES3FileFormat Line 232  namespace libTES3FileFormat
232              for (int i = 0; i < this.SectionOffsets.Count; i++)              for (int i = 0; i < this.SectionOffsets.Count; i++)
233              {              {
234                  ClothingEntry entry = new ClothingEntry();                  ClothingEntry entry = new ClothingEntry();
235                                    entry.OnEntryCommitEvent = new EntryCommitEvent<ClothingEntry>(this.CommitEntry); // commit callback
236                  entry.Offset = this.SectionOffsets[i]; // set the offset for this entry                  entry.Offset = this.SectionOffsets[i]; // set the offset for this entry
237    
238                  br.BaseStream.Seek(this.SectionOffsets[i], SeekOrigin.Begin);                  br.BaseStream.Seek(this.SectionOffsets[i], SeekOrigin.Begin);
# Line 286  namespace libTES3FileFormat Line 354  namespace libTES3FileFormat
354    
355          #region ICommit Members          #region ICommit Members
356    
357          public bool Commit(BinaryWriter writer)          public bool Commit(ICommitWriter writer)
358          {          {
359              throw new NotImplementedException();              return this.CommitAllEntries(writer);
360          }          }
361    
362          #endregion          #endregion

Legend:
Removed from v.30  
changed lines
  Added in v.33

  ViewVC Help
Powered by ViewVC 1.1.22