diff --git a/build.rbxmx b/build.rbxmx
index 08f9c78..68ad819 100644
--- a/build.rbxmx
+++ b/build.rbxmx
@@ -28,18 +28,22 @@ frame{
]]
+require = require(script.require);
+local event = require("event");
+local store = require("store");
+local style = require("style");
+local class = require("class");
+local mount = require("mount");
+
function module.init()
local this = {items = {}};
- local event = require(script.event).init(this); if false then event = require("src.event").init(this); end
- local class = require(script.class).init(this); if false then class = require("src.class").init(this); end
- local store = require(script.store).init(this); if false then store = require("src.store").init(this); end
- local style = require(script.style).init(this); if false then style = require("src.style").init(this); end
+ this.event = event.init(this);
+ this.store = store.init(this);
+ this.style = style.init(this);
+ this.class = class.init(this);
+ this.mount = mount.init(this);
- this.event = event;
- this.class = class;
- this.store = store;
- this.style = style;
--this.makeClass = makeClass;
--this.tween = tween;
--this.plugin = plugin;
@@ -51,6 +55,12 @@ return module;
]]>
-
+
+ bind
+
+
+
+ -
class
local module = {};
@@ -58,21 +68,21 @@ return module;
function module.init(shared)
local new = {};
local bind = shared.event.bind;
- local items = shared.items;
+ local addObject = shared.store.addObject;
function new.make(ClassName,prop)
-- make thing
local item;
local classOfClassName = type(ClassName);
- if classOfClassName == "string" then
+ if classOfClassName == "string" then -- if classname is a string value, cdall instance.new for making new roblox instance
item = Instance.new(ClassName);
- elseif classOfClassName == "function" then
+ elseif classOfClassName == "function" then -- if classname is a function value, call it for making new object (OOP object)
item = ClassName();
- elseif classOfClassName == "table" then
+ elseif classOfClassName == "table" then -- if classname is a calss what is included new function, call it for making new object (object)
local func = ClassName.new or ClassName.New or ClassName.__new;
item = func();
end
- if not item then
+ if not item then -- if cannot make new object, ignore this call
local str = tostring(ClassName);
print(("fail to make item '%s', did you forget to checking the class '%s' is exist?"):format(str,str));
end
@@ -94,21 +104,26 @@ function module.init(shared)
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;
+ function new.import(ClassName) -- make new quad class object
+ local this = {styles = {}};
+ setmetatable(this,{
+ __call = function (self,prop)
+ if type(prop) == "string" then
+ local lastName = prop;
+ return function (nprop)
+ nprop.Name = lastName;
+ local item = make(ClassName,nprop);
+ addObject(lastName,item);
+ return item;
+ end;
+ end
+ return make(ClassName,prop);
+ end;
+ });
+ return this;
end
+ -- set module calling function
setmetatable(new,{
__call = function (self,...)
return self.import(...);
@@ -121,7 +136,7 @@ end
return module;
- -
+
-
event
local module = {};
@@ -196,7 +211,68 @@ end
return module;
- -
+
-
+
+ mount
+ local module = {};
+
+function module.init(shared)
+ local new = {};
+
+ -- we should add plugin support
+ function new.mount(to,this)
+ this.Parent = to;
+ end
+
+ setmetatable(new,{
+ __call = function (self,...)
+ self.mount(...);
+ end;
+ });
+
+ return new;
+end
+
+return module;
+
+
+ -
+
+ require
+ -- remove the roblox's require system,
+-- now, we can call modules with string path
+
+if (not workspace) and (not game) and (not script) then
+ return;
+end
+
+return function (query)
+ local typeQuery = type(query);
+
+ if typeQuery == "string" then
+ local object = script.Parent;
+ query = query:gsub("/",".");
+ -- local index = 0;
+ query:gsub("[^%.]+",function (this)
+ -- index = index + 1;
+ -- if index == 1 and this == "src" then
+ -- return;
+ -- end
+ local lastObject = object;
+ object = object[this];
+ if not object then
+ object = lastObject.libs
+ error(("[require] : object %s was not found from this worktree, require failed"):format(query));
+ end
+ end);
+ return require(object);
+ elseif typeQuery == "userdata" then
+ return require(query);
+ end
+end;
+
+
+ -
store
- -
+
-
style
local module = {};
@@ -231,12 +315,10 @@ return module;
function module.init(shared)
local new = {};
- function shared.new()
+ function shared.new(property)
end
- function shared.
-
return new;
end
diff --git a/build.sh b/build.sh
new file mode 100644
index 0000000..fa3e5ec
--- /dev/null
+++ b/build.sh
@@ -0,0 +1 @@
+rojo build default.project.json -o build.rbxmx
\ No newline at end of file
diff --git a/src/bind.lua b/src/bind.lua
new file mode 100644
index 0000000..e69de29
diff --git a/src/class.lua b/src/class.lua
index e5e2f65..c9a6e18 100644
--- a/src/class.lua
+++ b/src/class.lua
@@ -3,21 +3,21 @@ local module = {};
function module.init(shared)
local new = {};
local bind = shared.event.bind;
- local items = shared.items;
+ local addObject = shared.store.addObject;
function new.make(ClassName,prop)
-- make thing
local item;
local classOfClassName = type(ClassName);
- if classOfClassName == "string" then
+ if classOfClassName == "string" then -- if classname is a string value, cdall instance.new for making new roblox instance
item = Instance.new(ClassName);
- elseif classOfClassName == "function" then
+ elseif classOfClassName == "function" then -- if classname is a function value, call it for making new object (OOP object)
item = ClassName();
- elseif classOfClassName == "table" then
+ elseif classOfClassName == "table" then -- if classname is a calss what is included new function, call it for making new object (object)
local func = ClassName.new or ClassName.New or ClassName.__new;
item = func();
end
- if not item then
+ if not item then -- if cannot make new object, ignore this call
local str = tostring(ClassName);
print(("fail to make item '%s', did you forget to checking the class '%s' is exist?"):format(str,str));
end
@@ -29,7 +29,7 @@ function module.init(shared)
-- child
if indexType ~= "string" then -- object
- value.Parent = new;
+ value.Parent = item;
elseif valueType == "function" and bind(value) then -- connect event
elseif indexType == "string" then
new[index] = value; -- set property
@@ -39,21 +39,26 @@ function module.init(shared)
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;
+ function new.import(ClassName) -- make new quad class object
+ local this = {styles = {}};
+ setmetatable(this,{
+ __call = function (self,prop)
+ if type(prop) == "string" then
+ local lastName = prop;
+ return function (nprop)
+ nprop.Name = lastName;
+ local item = make(ClassName,nprop);
+ addObject(lastName,item);
+ return item;
+ end;
+ end
+ return make(ClassName,prop);
+ end;
+ });
+ return this;
end
+ -- set module calling function
setmetatable(new,{
__call = function (self,...)
return self.import(...);
diff --git a/src/init.lua b/src/init.lua
index cab7134..f2d2e83 100644
--- a/src/init.lua
+++ b/src/init.lua
@@ -23,18 +23,22 @@ frame{
]]
+require = require(script.require);
+local event = require("event");
+local store = require("store");
+local style = require("style");
+local class = require("class");
+local mount = require("mount");
+
function module.init()
local this = {items = {}};
- local event = require(script.event).init(this); if false then event = require("src.event").init(this); end
- local class = require(script.class).init(this); if false then class = require("src.class").init(this); end
- local store = require(script.store).init(this); if false then store = require("src.store").init(this); end
- local style = require(script.style).init(this); if false then style = require("src.style").init(this); end
+ this.event = event.init(this);
+ this.store = store.init(this);
+ this.style = style.init(this);
+ this.class = class.init(this);
+ this.mount = mount.init(this);
- this.event = event;
- this.class = class;
- this.store = store;
- this.style = style;
--this.makeClass = makeClass;
--this.tween = tween;
--this.plugin = plugin;
diff --git a/src/libs/QuaTest b/src/libs/QuaTest
deleted file mode 160000
index 7874691..0000000
--- a/src/libs/QuaTest
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 78746916147fc401984a1267c361a946a7784262
diff --git a/src/mount.lua b/src/mount.lua
new file mode 100644
index 0000000..32a4614
--- /dev/null
+++ b/src/mount.lua
@@ -0,0 +1,20 @@
+local module = {};
+
+function module.init(shared)
+ local new = {};
+
+ -- we should add plugin support
+ function new.mount(to,this)
+ this.Parent = to;
+ end
+
+ setmetatable(new,{
+ __call = function (self,...)
+ self.mount(...);
+ end;
+ });
+
+ return new;
+end
+
+return module;
\ No newline at end of file
diff --git a/src/require.lua b/src/require.lua
new file mode 100644
index 0000000..00ac067
--- /dev/null
+++ b/src/require.lua
@@ -0,0 +1,31 @@
+-- remove the roblox's require system,
+-- now, we can call modules with string path
+
+if (not workspace) and (not game) and (not script) then
+ return;
+end
+
+return function (query)
+ local typeQuery = type(query);
+
+ if typeQuery == "string" then
+ local object = script.Parent;
+ query = query:gsub("/",".");
+ -- local index = 0;
+ query:gsub("[^%.]+",function (this)
+ -- index = index + 1;
+ -- if index == 1 and this == "src" then
+ -- return;
+ -- end
+ local lastObject = object;
+ object = object[this];
+ if not object then
+ object = lastObject.libs
+ error(("[require] : object %s was not found from this worktree, require failed"):format(query));
+ end
+ end);
+ return require(object);
+ elseif typeQuery == "userdata" then
+ return require(query);
+ end
+end;
\ No newline at end of file
diff --git a/src/store.lua b/src/store.lua
index a66012c..698d865 100644
--- a/src/store.lua
+++ b/src/store.lua
@@ -6,16 +6,34 @@ but, it can't allows mulit id and object
this feature should be upgraded
]]
+local insert = table.insert;
function module.init(shared)
local new = {};
local items = shared.items;
- function new.getObject(id)
+ local objSpace = {};
+ function objSpace:each(func)
+ for i,v in ipairs(self) do
+ local ret = func(i,v);
+ if ret then
+ break;
+ end
+ end
+ end
+
+ function new.getObjects(id)
return items[id];
end
- function new.setObject(id,object)
- items[id] = object;
+ function new.addObject(id,object)
+ local array = items[id];
+ if not array then
+ array = setmetatable({},{__index = objSpace});
+ items[id] = array;
+ end
+ insert(array, object);
end
+
+ return new;
end
return module;
diff --git a/src/style.lua b/src/style.lua
index 0e44c3e..98196ef 100644
--- a/src/style.lua
+++ b/src/style.lua
@@ -3,12 +3,10 @@ local module = {};
function module.init(shared)
local new = {};
- function shared.new()
+ function shared.new(property)
end
- function shared.
-
return new;
end
diff --git a/test.lua b/test.lua
new file mode 100644
index 0000000..6ed0987
--- /dev/null
+++ b/test.lua
@@ -0,0 +1,37 @@
+local quad = require(script.quad) if false then quad = require("src"); end
+local render = quad.init();
+local gui = script.Parent;
+
+local class = render.class;
+local mount = render.mount;
+local store = render.store;
+local style = render.style;
+
+local frame = class "Frame";
+local text = class "TextLabel";
+
+mount(gui,frame "testFrame" {
+ text "texts" {
+ Text = "We can make ui like this";
+ };
+ text "texts" {
+ Text = "asdfasdfasdf";
+ };
+ text "texts" {
+ Text = "qweiufnwlqef";
+ };
+});
+
+store.getObjects("texts"):each(function(index,this)
+ this.Text = "이렇게 모든 택스트를 한꺼번에 바꿀 수도 있습니다";
+end);
+
+do local this = store.getObjects("testFrame")[1];
+ spawn(function ()
+ local flip = false;
+ while wait(0.5) do
+ flip = not flip;
+ this.BackgroundTransparency = flip and 1 or 0;
+ end
+ end);
+end