using System; using System.Collections.Generic; using System.Text; using System.IO; using CommonAI.Zone.ZoneEditor; namespace GameEditorPlugin.Lua { public class LuaCodeGen { private static Encoding UTF8 = new UTF8Encoding(false); private readonly int sceneID; private readonly DirectoryInfo scene_proj; private readonly DirectoryInfo client_dir; private readonly DirectoryInfo server_dir; private readonly DirectoryInfo template_dir; public LuaCodeGen(DirectoryInfo scene_proj, int sceneID) { this.scene_proj = scene_proj; this.sceneID = sceneID; if (!scene_proj.Exists) { scene_proj.Create(); client_dir = scene_proj.CreateSubdirectory("client"); server_dir = scene_proj.CreateSubdirectory("server"); } else { client_dir = new DirectoryInfo(scene_proj.FullName + "/client"); server_dir = new DirectoryInfo(scene_proj.FullName + "/server"); if (!client_dir.Exists) client_dir.Create(); if (!server_dir.Exists) server_dir.Create(); } template_dir = new DirectoryInfo(scene_proj.Parent.FullName + "/doc/template"); } public FileInfo GenSceneScript(object data) { FileInfo ret = null; if (data is SceneData) { SceneData sdata = data as SceneData; FileInfo dst_zone_script = new FileInfo(server_dir.FullName + "/ZoneEvents.lua"); ret = new FileInfo(server_dir.FullName + "/ZoneEvents.lua"); if (!dst_zone_script.Exists) { string st = File.ReadAllText(template_dir.FullName + "/IZoneListener.lua", UTF8); st = st.Replace("_Name_", "_" + sdata.Name + "_"); File.WriteAllText(ret.FullName, st, UTF8); } } else if (data is SceneObjectData) { SceneObjectData obj = (data as SceneObjectData); if (data is UnitData) { ret = RedirectTemplate(obj.Name, "IUnitListener.lua", server_dir); } else if (data is RegionData) { ret = RedirectTemplate(obj.Name, "IRegionListener.lua", server_dir); } else { ret = RedirectTemplate(obj.Name, "IFlagListener.lua", server_dir); } obj.Script = ret.Name; } return ret; } private FileInfo RedirectTemplate(string name, string template_file_name, DirectoryInfo dst_dir) { FileInfo dst_file = new FileInfo(dst_dir.FullName + "/" + name + "_Events.lua"); if (!dst_file.Exists) { string ut = File.ReadAllText(template_dir.FullName + "/" + template_file_name, UTF8); ut = ut.Replace("_Name_", "_" + name + "_"); File.WriteAllText(dst_file.FullName, ut, UTF8); } return dst_file; } } }