local ScriptHelper = {}
--参数配置
ScriptHelper.Script_Type =
{
['ctrl'] = {type = 1, class = "%s = %s or BaseClass()", func = {[1] = "__init", [2] = "Instance", [3] = "GetView", [4] = "GetData", [5] = "ResetData"}},
['view'] = {type = 2, class = "%s = %s or BaseClass(BaseUIPanel)", func = {[1] = "__init", [2] = "loadLayoutCallback", [3] = "AddToStage", [4] = "RemoveFromStage"}},
['data'] = {type = 3, class = "%s = %s or BaseClass()", func = {[1] = "__init", [2] = "ResetData", [3] = "InitConfig", [4] = "GetConfig"}},
}
function ScriptHelper.New()
local obj = {}
setmetatable(obj, {__index = ScriptHelper})
ScriptHelper.__init(obj)
return obj
end
function ScriptHelper:__init()
self.script_base_name = self:GetConfig()
end
--函数方法格式化
function ScriptHelper:GetLuaFunctionFormat()
return "function %s:%s()"
end
function ScriptHelper:GetInstanceFormat()
return "if not %s._inst then\n" ..
"%s._inst = %s.New()\n" ..
"end\n" ..
"return %s._inst"
end
function ScriptHelper:GetViewFormat()
return "if not self.view then\n" ..
"require()\n" ..
"self.view = xxx.New()\n" ..
"end\n" ..
"return self.view"
end
function ScriptHelper:GetDataFormat()
return "if not self.data then\n" ..
"require()\n" ..
"self.data = xxx.New()\n" ..
"end\n" ..
"return self.data"
end
function ScriptHelper:Run(param, class_name)
io.write(string.format(param.class, class_name, class_name))
io.write("\n\n")
for i,v in ipairs(param.func) do
io.write(string.format(self:GetLuaFunctionFormat(), class_name, v))
io.write("\n")
if v == "Instance" then
io.write(string.format(self:GetInstanceFormat(), class_name, class_name, class_name, class_name))
elseif v == "GetView" then
io.write(self:GetViewFormat())
elseif v == "GetData" then
io.write(self:GetDataFormat())
else
io.write("--todo ...")
end
io.write("\n")
io.write("end")
io.write("\n\n")
end
end
function ScriptHelper:CreateCtrl(class_name)
self:Run(ScriptHelper.Script_Type.ctrl, class_name)
print("Script Ctrl Finish!")
end
function ScriptHelper:CreateView(class_name)
self:Run(ScriptHelper.Script_Type.view, class_name)
print("Script View Finish!")
end
function ScriptHelper:CreateData(class_name)
self:Run(ScriptHelper.Script_Type.data, class_name)
print("Script Data Finish!")
end
function ScriptHelper:GetClassName(file_name)
local class_name = ""
-- for v,_ in string.gmatch(file_name, "%w+") do
-- class_name = class_name .. string.gsub(v, "(%w)", function (arg)
-- return string.upper(arg)
-- end)
-- end
class_name = string.gsub(file_name, "_(%w)", function (arg)
return string.upper(arg)
end)
return string.upper(string.sub(class_name, 1, 1)) .. string.sub(class_name, 2, string.len(class_name))
end
function ScriptHelper:CreateFile(file_name, fix_name, func)
local full_file_name = ".\\TmpFile\\" .. file_name .. fix_name
-- 以只读方式打开文件
local file = io.open(full_file_name, "w+")
-- 设置默认输出文件为 test.lua
io.output(file)
func(self:GetClassName(file_name))
-- 关闭打开的文件
io.close(file)
end
function ScriptHelper:GetConfig()
local file = io.open(".\\Config\\LuaConfig.txt", "rb")
io.input(file)
local arg = io.read()
io.close()
return arg
end
function main()
os.execute("mkdir .\\TmpFile")
local helper = ScriptHelper.New()
helper:CreateFile(helper.script_base_name .. "_ctrl", ".lua", function (class_name)
helper:CreateCtrl(class_name)
end)
helper:CreateFile(helper.script_base_name .. "_data", ".lua", function (class_name)
helper:CreateData(class_name)
end)
helper:CreateFile(helper.script_base_name .. "_view", ".lua",function (class_name)
helper:CreateView(class_name)
end)
end
main()