LuaCodeGen.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.IO;
  5. using CommonAI.Zone.ZoneEditor;
  6. namespace GameEditorPlugin.Lua
  7. {
  8. public class LuaCodeGen
  9. {
  10. private static Encoding UTF8 = new UTF8Encoding(false);
  11. private readonly int sceneID;
  12. private readonly DirectoryInfo scene_proj;
  13. private readonly DirectoryInfo client_dir;
  14. private readonly DirectoryInfo server_dir;
  15. private readonly DirectoryInfo template_dir;
  16. public LuaCodeGen(DirectoryInfo scene_proj, int sceneID)
  17. {
  18. this.scene_proj = scene_proj;
  19. this.sceneID = sceneID;
  20. if (!scene_proj.Exists)
  21. {
  22. scene_proj.Create();
  23. client_dir = scene_proj.CreateSubdirectory("client");
  24. server_dir = scene_proj.CreateSubdirectory("server");
  25. }
  26. else
  27. {
  28. client_dir = new DirectoryInfo(scene_proj.FullName + "/client");
  29. server_dir = new DirectoryInfo(scene_proj.FullName + "/server");
  30. if (!client_dir.Exists) client_dir.Create();
  31. if (!server_dir.Exists) server_dir.Create();
  32. }
  33. template_dir = new DirectoryInfo(scene_proj.Parent.FullName + "/doc/template");
  34. }
  35. public FileInfo GenSceneScript(object data)
  36. {
  37. FileInfo ret = null;
  38. if (data is SceneData)
  39. {
  40. SceneData sdata = data as SceneData;
  41. FileInfo dst_zone_script = new FileInfo(server_dir.FullName + "/ZoneEvents.lua");
  42. ret = new FileInfo(server_dir.FullName + "/ZoneEvents.lua");
  43. if (!dst_zone_script.Exists)
  44. {
  45. string st = File.ReadAllText(template_dir.FullName + "/IZoneListener.lua", UTF8);
  46. st = st.Replace("_Name_", "_" + sdata.Name + "_");
  47. File.WriteAllText(ret.FullName, st, UTF8);
  48. }
  49. }
  50. else if (data is SceneObjectData)
  51. {
  52. SceneObjectData obj = (data as SceneObjectData);
  53. if (data is UnitData)
  54. {
  55. ret = RedirectTemplate(obj.Name, "IUnitListener.lua", server_dir);
  56. }
  57. else if (data is RegionData)
  58. {
  59. ret = RedirectTemplate(obj.Name, "IRegionListener.lua", server_dir);
  60. }
  61. else
  62. {
  63. ret = RedirectTemplate(obj.Name, "IFlagListener.lua", server_dir);
  64. }
  65. obj.Script = ret.Name;
  66. }
  67. return ret;
  68. }
  69. private FileInfo RedirectTemplate(string name, string template_file_name, DirectoryInfo dst_dir)
  70. {
  71. FileInfo dst_file = new FileInfo(dst_dir.FullName + "/" + name + "_Events.lua");
  72. if (!dst_file.Exists)
  73. {
  74. string ut = File.ReadAllText(template_dir.FullName + "/" + template_file_name, UTF8);
  75. ut = ut.Replace("_Name_", "_" + name + "_");
  76. File.WriteAllText(dst_file.FullName, ut, UTF8);
  77. }
  78. return dst_file;
  79. }
  80. }
  81. }