diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a57a556..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "src/libs/QuaTest"] - path = src/libs/QuaTest - url = https://github.com/qwreey75/QuaTest diff --git a/build.rbxmx b/build.rbxmx new file mode 100644 index 0000000..08f9c78 --- /dev/null +++ b/build.rbxmx @@ -0,0 +1,247 @@ + + + + Plugin + quad + + + + + class + local module = {}; + +function module.init(shared) + local new = {}; + local bind = shared.event.bind; + local items = shared.items; + + function new.make(ClassName,prop) + -- make thing + local item; + local classOfClassName = type(ClassName); + if classOfClassName == "string" then + item = Instance.new(ClassName); + elseif classOfClassName == "function" then + item = ClassName(); + elseif classOfClassName == "table" then + local func = ClassName.new or ClassName.New or ClassName.__new; + item = func(); + end + if not item then + local str = tostring(ClassName); + print(("fail to make item '%s', did you forget to checking the class '%s' is exist?"):format(str,str)); + end + + -- set property and adding child and binding functions + for index,value in pairs(prop) do + local valueType = typeof(value); + local indexType = typeof(index); + + -- child + if indexType ~= "string" then -- object + value.Parent = new; + elseif valueType == "function" and bind(value) then -- connect event + elseif indexType == "string" then + new[index] = value; -- set property + end + end + return item; + end + local make = new.make; + + function new.import(ClassName) + return function (prop) + if type(prop) == "string" then + local lastName = prop; + return function (nprop) + nprop.Name = lastName; + local item = make(ClassName,nprop); + items[lastName] = item; + return item; + end; + end + return make(ClassName,prop); + end; + end + + setmetatable(new,{ + __call = function (self,...) + return self.import(...); + end; + }); + + return new; +end + +return module; + + + + + event + local module = {}; + +function module.init(shared) + local new = {}; + local unpack = table.unpack; + local coroutineCreate = coroutine.create; + local coroutineResume = coroutine.resume; + + local prefix = "event::"; + local special = { + ["Property::(.+)"] = function (this,func,property) + this.GetPropertyChangedSignal(property):Connect(function() + func(this,this[property]); + end); + end; + ["CreatedSync::"] = function (this,func) + func(this); + end; + ["Created::"] = function (this,func) + coroutineResume(coroutineCreate(func),this); + end; + }; + + local prefixLen = #prefix; + setmetatable(new,{ + __call = function(self,eventName) + return prefix .. eventName; + end; + }); + + -- try binding, if key dose match with anything, ignore call + function new.bind(this,key,func) + -- check prefix + if key:sub(1,prefixLen) ~= prefix then + return; + end + key = key:sub(prefixLen + 1,-1); + + -- find special bindings + for specKey,specFunc in pairs(special) do + local find = {key:match(specKey)}; + if #find ~= 0 then + specFunc(this,func,unpack(find)); + return true; + end + end + + -- binding normal events + local event = this[key]; + if event then + event:Connect(function(...) + func(this,...); + end); + return true; + end + end + + -- property changed binding + local prefixProperty = prefix .. "Property::"; + function new.property(name) + return prefixProperty .. name; + end + + -- when created binding + new.created = prefix .. "Created::"; + new.createdSync = prefix .. "CreatedSync::"; + return new; +end + +return module; + + + + + store + + + + + + style + local module = {}; + +function module.init(shared) + local new = {}; + + function shared.new() + + end + + function shared. + + return new; +end + +return module; + + + + \ No newline at end of file diff --git a/src/init.lua b/src/init.lua index 9ee9eab..cab7134 100644 --- a/src/init.lua +++ b/src/init.lua @@ -35,7 +35,9 @@ function module.init() this.class = class; this.store = store; this.style = style; - --this.makeClass = + --this.makeClass = makeClass; + --this.tween = tween; + --this.plugin = plugin; return this; end