FairyGUI 生成模板修改

效果:

/** This is an automatically generated class by FairyGUI. Please do not modify it. **/

using ETModel;
using FairyGUI;

namespace ETHotfix.Main
 {

	[ObjectSystem]
	public class UI_SettingAwakeSystem : AwakeSystem<UI_Setting, GObject> {

		public override void Awake(UI_Setting self, GObject go) {
			self.Awake(go);
		}
	}

	public partial class UI_Setting : FUI {
		public const string UIPackageName = "Main";
		public const string UIResName = "Setting";
		public const string UIName = "Main.Setting";
		public GComponent self;

		public GButton m_toLogin;
		public GButton m_closeBtn;
		public GSlider m_soundSlider;
		public GSlider m_musicSlider;
		public GButton m_sound;
		public GButton m_music;
		public static string URL = "ui://yzjk0ph4nil";

		public void Awake(GObject go) {
			if (go == null) {
				return;
			}
			GObject = go;
			Name = UIName;
			self = (GComponent)go;
			self.Add(this);
			var com = go.asCom;
			if (com != null) {
				this.m_toLogin = (GButton)com.GetChild("toLogin");
				this.m_closeBtn = (GButton)com.GetChild("closeBtn");
				this.m_soundSlider = (GSlider)com.GetChild("soundSlider");
				this.m_musicSlider = (GSlider)com.GetChild("musicSlider");
				this.m_sound = (GButton)com.GetChild("sound");
				this.m_music = (GButton)com.GetChild("music");
				OnInitialization();
			}
		}

		partial void OnInitialization();

		public override void Dispose() {
			base.Dispose();
			self.Remove();
		}
	}
}
namespace ETHotfix {
	public partial class FGUIGenerate {
		public static async ETVoid Create_Main_Setting() {
			await FGUIHelper.Add<Main.UI_Setting>(Main.UI_Setting.UIPackageName, Main.UI_Setting.UIResName);
		}
	}
}

 

模板:

function onPublish(handler)
    --fprint("Handling gen code in plugin")
    if not handler.genCode then return end
    handler.genCode = false --prevent default output

    fprint("Handling gen code in plugin")
    genCode(handler) --do it myself
end

-- this is copied from Editor-Install-Path/Resources/Data/StreamingAssets/Scripts
function genCode(handler) 
    local settings = handler.project:GetSettings("Publish").codeGeneration
    local codePkgName = handler:ToFilename(handler.pkg.name); --convert chinese to pinyin, remove special chars etc.
    local exportCodePath = handler.exportCodePath..'/'..codePkgName
    local namespaceName = codePkgName
    local ns = 'fgui'
    
    if settings.packageName~=nil and settings.packageName~='' then
        namespaceName = settings.packageName..'.'..namespaceName;
    end

    --CollectClasses(stripeMemeber, stripeClass, fguiNamespace)
    local classes = handler:CollectClasses(settings.ignoreNoname, settings.ignoreNoname, ns)
    handler:SetupCodeFolder(exportCodePath, "ts") --check if target folder exists, and delete old files

    local getMemberByName = settings.getMemberByName

    local classCnt = classes.Count
    local writer = CodeWriter.new({ blockFromNewLine=false, usingTabs = true  })
    for i=0,classCnt-1 do
        local classInfo = classes[i]
        local members = classInfo.members
        local references = classInfo.references
        writer:reset()

        local refCount = references.Count
        if refCount>0 then
            for j=0,refCount-1 do
                local ref = references[j]
                writer:writeln('import %s from "./%s";', ref, ref)
            end
            writer:writeln()
        end

        writer:writeln('using ETModel;')
        writer:writeln('using FairyGUI;')
        writer:writeln()
        writer:writeln('namespace ETHotfix.%s',namespaceName)
        writer:writeln()
        writer:startBlock()
        writer:writeln()
        writer:writeln('[ObjectSystem]')
        writer:writeln('public class %sAwakeSystem : AwakeSystem<%s, GObject>',classInfo.className,classInfo.className)
        writer:startBlock()
        writer:writeln()
        writer:writeln('public override void Awake(%s self, GObject go)',classInfo.className)
        writer:startBlock()
        writer:writeln('self.Awake(go);')
        writer:endBlock()
        writer:endBlock()
        writer:writeln()


        writer:writeln('public partial class %s : %s', classInfo.className, 'FUI')
        writer:startBlock()
        writer:writeln('public const string UIPackageName = "%s";', handler.pkg.name)
        writer:writeln('public const string UIResName = "%s";', classInfo.resName)
        writer:writeln('public const string UIName = "%s.%s";', handler.pkg.name,classInfo.resName)
        writer:writeln('public GComponent self;', classInfo.resName)
        writer:writeln()

        local memberCnt = members.Count
        for j=0,memberCnt-1 do
            local memberInfo = members[j]
            writer:writeln('public %s %s;', string.gsub(memberInfo.type,'fgui.',''),memberInfo.varName)
        end
        writer:writeln('public static string URL = "ui://%s%s";', handler.pkg.id, classInfo.classId)
        writer:writeln()

        writer:writeln('public void Awake(GObject go)')
        writer:startBlock()
        writer:writeln('if (go == null)')
        writer:startBlock()
        writer:writeln('return;')
        writer:endBlock()
        writer:writeln('GObject = go;')
        writer:writeln('Name = UIName;')
        writer:writeln('self = (GComponent)go;')
        writer:writeln('self.Add(this);')
        writer:writeln('var com = go.asCom;')
        writer:writeln('if (com != null)')
        writer:startBlock()
        for j=0,memberCnt-1 do
            local memberInfo = members[j]
            if memberInfo.group==0 then
                if getMemberByName then
                    writer:writeln('this.%s = (%s)com.GetChild("%s");', memberInfo.varName, string.gsub(memberInfo.type,'fgui.',''), memberInfo.name)
                else
                    writer:writeln('this.%s = (%s)com.GetChildAt(%s);', memberInfo.varName, string.gsub(memberInfo.type,'fgui.',''), memberInfo.index)
                end
            elseif memberInfo.group==1 then
                if getMemberByName then
                    writer:writeln('this.%s = com.GetController("%s");', memberInfo.varName, memberInfo.name)
                else
                    writer:writeln('this.%s = com.GetControllerAt(%s);', memberInfo.varName, memberInfo.index)
                end
            else
                if getMemberByName then
                    writer:writeln('this.%s = com.GetTransition("%s");', memberInfo.varName, memberInfo.name)
                else
                    writer:writeln('this.%s = com.GetTransitionAt(%s);', memberInfo.varName, memberInfo.index)
                end
            end
        end
        writer:writeln('OnInitialization();')
        writer:endBlock()
        writer:endBlock()
        writer:writeln()
        writer:writeln('partial void OnInitialization();')
        writer:writeln()
        writer:writeln('public override void Dispose()')
        writer:startBlock()
        writer:writeln('base.Dispose();')
        writer:writeln('self.Remove();')
        writer:endBlock()
        writer:endBlock() --class
        writer:endBlock()

        writer:writeln('namespace ETHotfix')
        writer:startBlock()
        writer:writeln('public partial class FGUIGenerate')
        writer:startBlock()
        writer:writeln('public static async ETVoid Create_%s_%s()',handler.pkg.name,classInfo.resName)
        writer:startBlock()
        local tmp = namespaceName..'.'..classInfo.className;
        writer:writeln('await FGUIHelper.Add<%s>(%s.UIPackageName, %s.UIResName);',tmp,tmp,tmp)
        writer:endBlock()
        writer:endBlock()
        writer:endBlock()

        writer:save(exportCodePath..'/'..classInfo.className..'.cs')
    end

end

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章