Field.FsDataProvider.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. using System;
  2. using System.IO;
  3. namespace OpenVIII.Fields
  4. {
  5. public static partial class Field
  6. {
  7. #region Classes
  8. public sealed class FsDataProvider : IDataProvider
  9. {
  10. #region Fields
  11. private readonly string _fieldDirectory;
  12. private readonly string _fieldPath;
  13. #endregion Fields
  14. #region Constructors
  15. public FsDataProvider(string fieldPath)
  16. {
  17. if (!File.Exists(fieldPath))
  18. throw new FileNotFoundException(fieldPath);
  19. _fieldPath = Path.ChangeExtension(fieldPath, extension: null);
  20. _fieldDirectory = Path.GetDirectoryName(fieldPath);
  21. }
  22. #endregion Constructors
  23. #region Methods
  24. public byte[] FindPart(Part part)
  25. {
  26. var filePath = GetFilePath(part);
  27. if (File.Exists(filePath))
  28. return File.ReadAllBytes(filePath);
  29. return null;
  30. }
  31. private string GetFilePath(Part part)
  32. {
  33. switch (part)
  34. {
  35. case Part.One: return Path.Combine(_fieldDirectory, "chara.one");
  36. case Part.Ca: return _fieldPath + ".ca";
  37. case Part.Id: return _fieldPath + ".ID";
  38. case Part.Inf: return _fieldPath + ".inf";
  39. case Part.Jsm: return _fieldPath + ".jsm";
  40. case Part.Map: return _fieldPath + ".map";
  41. case Part.Mim: return _fieldPath + ".mim";
  42. case Part.Mrt: return _fieldPath + ".mrt";
  43. case Part.Msd: return _fieldPath + ".msd";
  44. case Part.Pcb: return _fieldPath + ".pcb";
  45. case Part.Pmd: return _fieldPath + ".pmd";
  46. case Part.Pmp: return _fieldPath + ".pmp";
  47. case Part.Pvp: return _fieldPath + ".pvp";
  48. case Part.Rat: return _fieldPath + ".rat";
  49. case Part.Sfx: return _fieldPath + ".sfx";
  50. case Part.Sym: return _fieldPath + ".sym";
  51. case Part.Tdw: return _fieldPath + ".tdw";
  52. default: throw new NotSupportedException(part.ToString());
  53. }
  54. }
  55. #endregion Methods
  56. }
  57. #endregion Classes
  58. }
  59. }