From 80242eb737643b4e0767f48ccbe72496caea912f Mon Sep 17 00:00:00 2001 From: Qwreey Date: Wed, 22 Feb 2023 03:52:05 +0900 Subject: [PATCH] =?UTF-8?q?docs:=20=ED=95=9C=EA=B5=AD=EC=96=B4=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C=20(=EB=A9=94=EC=9D=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80?= =?UTF-8?q?=20=EA=BE=B8=EB=B0=88=20=EB=82=A8=EC=9D=8C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- md/kr/changelogs.md | 8 + md/kr/gallery.md | 5 + md/kr/include/{direction.md => directions.md} | 0 md/kr/include/extend.md | 290 +++++++++++++++++- md/kr/include/quad.md | 0 md/kr/include/tween.md | 85 +++++ md/kr/include/tweenOptions.md | 18 +- .../{typeDirection.md => typeDirections.md} | 0 md/kr/index.md | 63 +--- md/kr/license.md | 16 + md/kr/reference/event.md | 3 + md/kr/reference/extend.md | 3 + md/kr/reference/index.md | 4 + md/kr/reference/lang.md | 17 + md/kr/reference/mounts.md | 3 + md/kr/reference/quadProperty.md | 3 + md/kr/reference/signal/bindable.md | 3 + md/kr/reference/signal/disconnecter.md | 3 + md/kr/reference/signal/index.md | 7 + md/kr/reference/store/index.md | 16 + md/kr/reference/store/objectList.md | 3 + md/kr/reference/tween/directions.md | 3 + md/kr/reference/tween/easings.md | 3 + md/kr/reference/tween/index.md | 3 + md/kr/reference/tween/tweenOptions.md | 4 + md/kr/todo.md | 36 +++ md/kr/tutorial/11_extend.md | 24 +- md/kr/tutorial/3_getObject.md | 8 +- md/kr/tutorial/6_tween.md | 1 + md/kr/tutorial/8_register.md | 9 + md/kr/tutorial/index.md | 146 ++++++++- mkdocs_en.yml | 2 +- mkdocs_kr.yml | 22 +- src/exports.lua | 2 +- src/mount.lua | 12 +- {testing/test => src}/tracker.lua | 0 src/types.lua | 6 +- 37 files changed, 717 insertions(+), 114 deletions(-) rename md/kr/include/{direction.md => directions.md} (100%) create mode 100644 md/kr/include/quad.md create mode 100644 md/kr/include/tween.md rename md/kr/include/{typeDirection.md => typeDirections.md} (100%) create mode 100644 md/kr/reference/event.md create mode 100644 md/kr/reference/extend.md create mode 100644 md/kr/reference/lang.md create mode 100644 md/kr/reference/mounts.md create mode 100644 md/kr/reference/quadProperty.md create mode 100644 md/kr/reference/signal/bindable.md create mode 100644 md/kr/reference/signal/disconnecter.md create mode 100644 md/kr/reference/signal/index.md create mode 100644 md/kr/reference/store/index.md create mode 100644 md/kr/reference/store/objectList.md create mode 100644 md/kr/reference/tween/index.md create mode 100644 md/kr/reference/tween/tweenOptions.md create mode 100644 md/kr/todo.md rename {testing/test => src}/tracker.lua (100%) diff --git a/md/kr/changelogs.md b/md/kr/changelogs.md index 8517c76..6bcafcc 100644 --- a/md/kr/changelogs.md +++ b/md/kr/changelogs.md @@ -1,6 +1,14 @@ # 버전 번경사항 +## 2.24 +모든 문서가 정리되었습니다. + +## 2.23 +객체 생성시 일어나는 오류를 해결했습니다. +이제 Extend 객체 내부 자식이 Unmount 되는 경우 __child 에서 제거됩니다. +types 의 오타를 고쳤습니다. + ## 2.22 더이상 Event.Prop 가 처음 생성시 실행되는 일이 일어나지 않습니다. diff --git a/md/kr/gallery.md b/md/kr/gallery.md index e69de29..92ce86b 100644 --- a/md/kr/gallery.md +++ b/md/kr/gallery.md @@ -0,0 +1,5 @@ + +# 갤러리 + +여기는 여러분들의 작품을 올려볼 수 있는 곳입니다! +Quad 를 사용한 여러가지 훌륭한 작품들을 보여주세요! diff --git a/md/kr/include/direction.md b/md/kr/include/directions.md similarity index 100% rename from md/kr/include/direction.md rename to md/kr/include/directions.md diff --git a/md/kr/include/extend.md b/md/kr/include/extend.md index 539cb89..e4fc479 100644 --- a/md/kr/include/extend.md +++ b/md/kr/include/extend.md @@ -1,31 +1,293 @@ -`self(name:string)` +`self(name:string)->linker` > Extend 메소드 전역에서 사용가능합니다. 링커를 만들며, `PropertyChangedSignal` 를 이어주거나, self 에 원하는 오브젝트를 넣는 용도로 사용됩니다. 자세한 정보는 Render 를 확인해주세요. --- -==REQUIRED== `:Render(props:valueStore)` +==Overwite== ==**REQUIRED**== `#!ts :Render(props:valueStore)`
화면에 그려지는 UI 를 만들어지게 하는 함수입니다. `Extend` 가 그려지려면 무조건 있어야합니다. -이 오브젝트를 그리는데 들어간 프로퍼티 목록을 첫번째 인자로 줍니다. 레지스터 문법이 사용될 수 있습니다. - -=== 예제 +이 오브젝트를 만드는데 들어간 프로퍼티 목록을 첫번째 인자로 줍니다. 레지스터 문법이 사용될 수 있습니다. ```lua +local ScreenGUI = script.Parent +local Quad = require(path.to.module).Init() +local Class = Quad.Class +local Event = Quad.Event +local Mount = Quad.Mount -``` +local TextButton = Class "TextButton" +local myClass = Class.Extend() +function myClass:Render(props) + return TextButton { + [Event "MouseButton1Click"] = function (self,x,y) + print(("버튼이 %d,%d 에서 눌렸습니다"):format(x,y)) + end; + Size = props "Size"; + Text = props "Text"; -- 레지스터를 이용합니다 + } +end + +local myImported = Class(myClass) +myImported.Size = UDim2.fromOffset(200,200) + +local test = myImported { + Text = "wow" +} +Mount(ScreenGUI, test) + +-- 텍스트를 업데이트합니다 +while task.wait(1) do + test.Text = "w"..("o"):rep(#test.Text-1).."w" +end ```
-==OPTION== AfterRender -Getter Setter -Update -GetPropertyChangedSignal -EmitPropertyChangedSignal -Unload -self() -UpdateTriggers +--- +==Overwite== ==Option== `#!ts :Init(props:valueStore)` +
+ +선택적인 메소드로, Render 가 수행 되기 전에 미리 props 값을 설정할 수 있습니다. + +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" + +local myClass = Class.Extend() +function myClass:Init(props) + -- Size 값이 없다면 기본값을 사용하도록 합니다. + props:Default("Size", UDim2.fromOffset(100,100)) + + -- 앞에 _ 를 붇여 내부 변수를 만듭니다. + -- 어디에서나 쓰일 수 있으며 register 에 영향주지 않습니다. + self._asdf = true +end +function myClass:Render(props) + return TextButton { + props "Size" + } +end + +local myImported = Class(myClass) +local myButton = myImported() -- 옵션 없음 +print(myButton.Size) +``` +
+ +--- + +==Overwite== ==Option== `#!ts :AfterRender(object:any)` +
+ +선택적인 메소드로, Render 가 수행 된 후 할 작업을 만들 수 있습니다. 첫번째 인자로 Render 가 반환한 값이 주어집니다. + +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" + +local myClass = Class.Extend() +function myClass:Render(props) + return TextButton { + self "_button"; -- 자기 자신에 이 버튼을 넣습니다 + } +end +function myClass:AfterRender(object) + print(self._button == object) -- true +end + +local myImported = Class(myClass) +myImported() -- 옵션 없음 +``` +
+ +--- + +==Overwite== ==Option== `#!ts :Update()` +
+ +`:Render` 와 `:AfterRender` 를 다시 실행하고, 이전에 있던 자식들을 다시 끌어옵니다. +이전의 Render 결과는 제거됩니다 +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" +local count = 0 + +local myClass = Class.Extend() +function myClass:Render(props) + print("Rendering!") + count = count + 1 + return TextButton { + self "_button"; + Name = tostring(count); + } +end +function myClass:AfterRender(object) + print(self._button.Name) +end + +local myImported = Class(myClass) +local myButton = myImported() +myButton:Update() -- update +myButton:Update() -- update +myButton:Update() -- update +``` +
+ +--- + +==Overwite== ==Option== `#!ts .Getter.(self)` +
+ +값을 얻는데 사용됩니다. +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" + +local myClass = Class.Extend() +function myClass:Render(props) + return TextButton {} +end +-- 값을 읽는데 사용할 함수를 등록합니다 +function myClass.Getter.Test(self) + return "Hello World" +end + +local myImported = Class(myClass) +print(myImported().Test) +``` +
+ +--- + +==Overwite== ==Option== `#!ts .Setter.(self,newValue:any)` +
+ +값을 설정하는데 사용됩니다. +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" + +local myClass = Class.Extend() +function myClass:Render(props) + return TextButton { + self "_button"; + Text = "wow"; + } +end +-- 값을 지정하는데 사용할 함수를 등록합니다 +function myClass.Setter.Test(self,newValue) + self._button.Text = newValue +end +function myClass.Getter.Test(self) + return self._button.Text +end + +local myImported = Class(myClass) +local myButton = myImported() +print(myButton.Test) +myButton.Test = "Hello World" +print(myButton.Test) +``` +
+ +--- + +==Overwite== ==Option== `#!ts .UpdateTriggers. = boolean?` +
+ +해당 값을 변경하면 Update 가 수행될지 여부를 지정합니다. +```lua +local Quad = require(path.to.module).Init() +local Class = Quad.Class + +local TextButton = Class "TextButton" +local count = 0 + +local myClass = Class.Extend() +function myClass:Render(props) + print("Rendering!") + count = count + 1 + return TextButton { + self "_button"; + Name = tostring(count); + } +end +function myClass:AfterRender(object) + print(self._button.Name) +end +-- 값 변경시 업데이트 여부를 지정합니다 +myClass.UpdateTriggers.Test = true + +local myImported = Class(myClass) +local myButton = myImported() +myButton.Test = 1 -- update +myButton.Test = 1 -- update +myButton.Test = 1 -- update +``` +
+ +--- + +==Overwite== ==Option== `#!ts :Unload(object)` +> :Destroy 가 호출될 때 사용됩니다. 따로 선언하지 않아도 연결을 모두 끊고 없에주지만 필요한 경우 직접 없에줄 수 있습니다. object 는 :Render 가 반환한 값입니다 + +--- + +`#!ts :GetPropertyChangedSignal(propertyName:string)->Bindable` +> 값 변경을 연결할 수 있는 `Bindable`을 반환합니다. `:EmitPropertyChangedSignal` 으로 이 시그널을 작동시킬 수 있습니다. 편의상 이 시그널이 작동할 때, 새로운 값이 첫번째 인자로 주어집니다. + +--- + +`#!ts :EmitPropertyChangedSignal(propertyName:string,changedValue:any?)` +
+ +프로퍼티 변경시 `:GetPropertyChangedSignal` 에 등록된 함수가 실행되도록 이 함수를 호출해 주어야 합니다. 일반적으로 `#!ts self.a = 1` 과 같은 방식으로 바로 값을 설정하는 경우 자동적으로 이 함수가 실행되지만, 텍스트 박스의 텍스트 처럼 객체의 변경사항을 연동해야 하는 경우 이 함수를 사용할 수 있습니다. `changedValue` 는 선택사항이며, 주어지지 않으면 `#!ts self[propertyName]`을 반환합니다. +```lua +local ScreenGUI = script.Parent +local Quad = require(path.to.module).Init() +local Class = Quad.Class +local Mount = Quad.Mount +local Evnet = Quad.Event + +local TextBox = Class "TextButton" + +local myClass = Class.Extend() +function myClass:Render(props) + return TextButton { + self "_box"; + Text = "test"; + Size = UDim2.fromOffset(200,200); + [Evnet.Prop "Text"] = function (this,newValue) + self:EmitPropertyChangedSignal("Text",newValue) + end; + -- [Evnet.Prop "Text"] = self "Text" 와 동일합니다. + -- self(name:string) 문법으로 변경 이벤트 역시 링크 + -- 할 수 있습니다. + } +end +function myClass.Getter.Text(self) + return self._box.Text +end + +local myImported = Class(myClass) +local myButton = myImported() +myButton:GetPropertyChangedSignal("Text"):Connect(function() + print(myButton.Text) +end) +Mount(ScreenGUI, myButton) +``` +
diff --git a/md/kr/include/quad.md b/md/kr/include/quad.md new file mode 100644 index 0000000..e69de29 diff --git a/md/kr/include/tween.md b/md/kr/include/tween.md new file mode 100644 index 0000000..856b4f3 --- /dev/null +++ b/md/kr/include/tween.md @@ -0,0 +1,85 @@ +`#!ts Tween.RunTween(Item:any, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)->TweenHandler` +> 트윈을 실행합니다. 트윈 옵션에 대한 정보는 [TweenOptions](./tweenOptions.md) 문서에서 찾을 수 있습니다. +> `Ended`, `OnStepped`, `Setter`, `Getter` 값이 설정되면 `Option` 안의 값보다 우선적으로 사용됩니다. 기능은 [TweenOptions](./tweenOptions.md)의 내용과 같습니다. +> 나중에 트윈을 중단시킬 수 있도록 `TweenHandler` 가 제공됩니다. +> 다른 트윈이 변경중인 속성이 다시 트윈하도록 호출되면, 이전 트윈에서 해당 속성은 트윈이 중단되며 새로운 트윈으로 덮어쓰기 됩니다. +```lua +Tween.RunTween(myFrame,{ + Time = 1; +},{ + Position = UDim2.new(1,0,1,0); +}) +``` + +--- + +`#!ts Tween.RunTweens(Items:{[number]:any}, Option:tweenOptions, Properties:{[string]:Lerpable}, Ended?, OnStepped?, Setter?, Getter?)` +> `#!ts Tween.RunTween` 와 같으나 여러 오브젝트를 한꺼번에 트윈합니다. 아무것도 반환하지 않습니다 +```lua +Tween.RunTween({myFrame1, myFrame2, myFrame3},{ + Time = 1; +},{ + Position = UDim2.new(1,0,1,0); +}) +``` + +--- + +`#!ts Tween.StopTween(ItemOrHandler:TweenHandler|any)` +
+ +트윈을 멈춥니다. `TweenHandler` 또는 오브젝트를 넣어 멈출 수 있습니다. 오브젝트를 넣으면 그 오브젝트에 실행중인 모든 트윈을 멈춥니다. + +=== "TweenHandler 이용" + + ```lua + local Handler = Tween.RunTween(myFrame,{ + Time = 1; + },{ + Position = UDim2.new(1,0,1,0); + }) + + Tween.StopTween(Handler) + ``` + +=== "오브젝트 이용" + + ```lua + local Handler = Tween.RunTween(myFrame,{ + Time = 1; + },{ + Position = UDim2.new(1,0,1,0); + }) + + Tween.StopTween(myFrame) + ``` +
+ +--- + +`#!ts Tween.StopPropertyTween(Item:any, PropertyName:string)` +> 오브젝트에 특정 프로퍼티의 트윈을 중단시킵니다. `TweenHandler` 는 사용할 수 없습니다. + +--- + +`#!ts Tween.StopPropertyTween(ItemOrHandler:IsTweening|any)->boolean` +> 해당 오브젝트 또는 `TweenHandler` 로 트윈이 진행중인지 여부를 판단합니다. + +--- + +`#!ts Tween.IsPropertyTweening(Item:any, PropertyName:string)` +> 해당 오브젝트의 프로퍼티가 트윈중이지 여부를 판단합니다. `TweenHandler` 는 사용할 수 없습니다. + +--- + +`Tween.Easings: { [string]: EasingFunction }` +> 이징 함수들이 담겨있습니다. +{!include/typeEasings.md!} +> 그래프와 미리보기는 [Easings](./easings.md) 에서 확인할 수 있습니다 + +--- + +`Tween.Easings: { [string]: EasingFunction }` +> 이징 함수들이 담겨있습니다. +{!include/typeDirections.md!} +> 자세한 정보는 [Easings](./directions.md) 에서 확인할 수 있습니다 diff --git a/md/kr/include/tweenOptions.md b/md/kr/include/tweenOptions.md index 7a5cb1e..51bbc1e 100644 --- a/md/kr/include/tweenOptions.md +++ b/md/kr/include/tweenOptions.md @@ -1,10 +1,10 @@ -==OPTION== `#!ts Time:number?` +==Option== `#!ts Time:number?` > 트윈의 총 길이를 정합니다. *아무 값도 지정하지 않으면 `#!ts 1`이 사용됩니다.* --- -==OPTION== `#!ts Easing:string|(index:number)->number?` +==Option== `#!ts Easing:string|(index:number)->number?` > 트윈의 가감속 정도를 결정합니다. 문자열 그대로 사용하거나, `#!ts Tween.Easings.Linear`와 같이 열거형 방식으로 사용할 수 있습니다. > 혹은 필요에 따라 함수를 지정할 수도 있습니다. 함수를 Easing 으로 사용하는 경우 첫번째 인자로 1차 진행도 (Linear, 0 에서 1 사이의 값) 값이 주어지며, 계산 결과로 실제 적용될 위치를 반환해야합니다. 반환값은 음수이거나 1 보다 클 수 있습니다. > *아무 값도 지정하지 않으면 `Exp2`가 사용됩니다.* @@ -13,32 +13,32 @@ --- -==OPTION== `#!ts Direction:string?` +==Option== `#!ts Direction:string?` > 트윈이 진행되는 방향입니다. 문자열 그대로 사용하거나, `#!ts Tween.Directions.Out`과 같이 열거형 방식으로 사용할 수 있습니다. > *아무 값도 지정하지 않으면 `Out`이 사용됩니다.* -{!include/typeDirection.md!} +{!include/typeDirections.md!} > 방향에 관한 자세한 설명과 미리보기는 [여기에서](../reference/tween/directions) 확인하세요 --- -==OPTION== `#!ts CallBack:{[number|"*"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?` +==Option== `#!ts CallBack:{[number|"*"|string]:(Item:any, Alpha:number, AbsolutePercent:number)->()}?` > 선택적인 필드이며, 트윈이 실행중인 도중에 함수를 실행시킬 수 있습니다. 트윈의 진행 정도에 따라서 한번 함수가 실행되거나 트윈 진행중 계속해서 실행되도록 만들 수 있습니다. > 인덱스가 숫자인 경우 해당 지점을 넘을 때 함수가 실행되도록 만들 수 있으며, `#!lua "*"` 를 인덱스로 사용하면 모든 부분에서 함수가 실행됩니다. > 함수에는 편의상 트윈을 하고있는 오브젝트, 위치값, 시간만을 고려한 1차 위치값이 제공됩니다. --- -==OPTION== `#!ts OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?` +==Option== `#!ts OnStepped:(Item:any, Alpha:number, AbsolutePercent:number)->()?` > CallBack 에 `#!lua "*"` 를 넣은것과 동일한 효과를 가지는 별칭입니다 --- -==OPTION== `#!ts Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?` +==Option== `#!ts Ended:(Item:any, Alpha:number, AbsolutePercent:number)->()?` > CallBack 에 `#!lua 1`을 넣은것과 동일한 효과를 가지는 별칭입니다 --- -==OPTION== `#!ts Getter:(Item:any, Property:string)->any?` +==Option== `#!ts Getter:(Item:any, Property:string)->any?` > 선택적인 필드이며, 트윈이 값을 얻으려 할 때 사용할 함수입니다. > 함수에 트윈하고 있는 오브젝트, 프로퍼티 이름이 제공됩니다. > ???+ warning @@ -46,7 +46,7 @@ --- -==OPTION== `#!ts Getter:(Item:any, Property:string, Value:Lerpable)->any?` +==Option== `#!ts Getter:(Item:any, Property:string, Value:Lerpable)->any?` > 선택적인 필드이며, 트윈이 값을 설정하려 할 때 사용할 함수입니다. > 함수에 트윈하고 있는 오브젝트, 프로퍼티 이름, 설정할 값이 제공됩니다. > ???+ warning diff --git a/md/kr/include/typeDirection.md b/md/kr/include/typeDirections.md similarity index 100% rename from md/kr/include/typeDirection.md rename to md/kr/include/typeDirections.md diff --git a/md/kr/index.md b/md/kr/index.md index 94b35e2..ab76e71 100644 --- a/md/kr/index.md +++ b/md/kr/index.md @@ -1,66 +1,5 @@ # Quad -처음오셨나요? [튜토리얼 문서](kr/tutorial/0gettingStarted)를 읽어보세요! +처음오셨나요? [튜토리얼 문서](tutorial)를 읽어보세요! 처음부터 차근차근 Quad 모듈을 정복할 수 있어요 - -## 튜토리얼 문서 목차 - -## API 레퍼런스 - -class - *__call*, import - *class* extend - *private* ~~make~~ - -event - *__call* - prop - created - createdSync - disconnecter - *private* ~~bind~~ - -mount - *__call* mount => mountClass|mountsClass - *class* mountClass|mountsClass - -store - getObject - getObjects => objectList - addObject - *class* objectList - *class* store - -style - *private* ~~parseStyles~~ - *__call* new - -tween (from @qwreey75:AdvancedTween) - -## 진행중이거나 검토중 - -### Spring - -Spring 물리 계산을 UI 애니메이션에 적용합니다 -WIP. 아직 진행중인 프로젝트. - -### Quad Debuger - -Register 의 상태와 Store 의 값, Class 의 동작 여부 등 Quad 의 여러 자원을 긴밀하게 디버그합니다. -WIP. 아직 진행중인 프로젝트. - -### Selection - -Tab 키등으로 버튼 선택하기 (... 가능함?) -WIP. 검토중인 프로젝트. - -### Quad Component Studio - -눈에 보이는 워지워그식 편집기를 이용해 Quad Class 를 생성합니다. -WIP. 아직 진행중인 프로젝트. - -### Quad WebRender - -HTML, CSS, JS 로써 스크립트를 변형해 스튜디오 없이 개발하는 가벼운 개발법입니다. -WIP. 검토중인 프로젝트. diff --git a/md/kr/license.md b/md/kr/license.md index b1783c1..7417bb1 100644 --- a/md/kr/license.md +++ b/md/kr/license.md @@ -1,6 +1,15 @@ +# 라이선스 + === "Korean" + | Permissions | Limitations | Conditions | + |-------------|-------------|------------| + | ✅ 상업적 사용 | ❎ 보증 | ❓ 라이선스와 저작권 고지 (권고사항) | + | ✅ 배포 | ❎ 무례하게 굴기 | | + | ✅ 변경/수정/2차저작 | ❎ 러시아를 비롯한 전쟁을 돕는 | | + | ✅ 개인적 사용 | ❎ 아무런 변경사항 없이 복제 | | + ``` qwreeykawaii license v1.3 Copyright 2023. Qwreey [qwreey75@gmail.com] @@ -55,6 +64,13 @@ === "English" + | Permissions | Limitations | Conditions | + |-------------|-------------|------------| + | ✅ Commercial use | ❎ Warranty | ❓ License and copyright notice (Recommendation) | + | ✅ Distribution | ❎ Being Rude | | + | ✅ Modification | ❎ Russian, And supporting war | | + | ✅ Private use | ❎ Copy without any modification | | + ``` qwreeykawaii license v1.3 diff --git a/md/kr/reference/event.md b/md/kr/reference/event.md new file mode 100644 index 0000000..87f2018 --- /dev/null +++ b/md/kr/reference/event.md @@ -0,0 +1,3 @@ +# Event + +{!include/evnets.md!} diff --git a/md/kr/reference/extend.md b/md/kr/reference/extend.md new file mode 100644 index 0000000..89e7514 --- /dev/null +++ b/md/kr/reference/extend.md @@ -0,0 +1,3 @@ +# Extend + +{!include/extend.md!} diff --git a/md/kr/reference/index.md b/md/kr/reference/index.md index e69de29..e539bba 100644 --- a/md/kr/reference/index.md +++ b/md/kr/reference/index.md @@ -0,0 +1,4 @@ + +# Reference + +이 섹션은 api 내용을 나열하지만, 깊게 설명하지 않을 수 있습니다. [튜토리얼 문서](../tutorial/index.md)를 읽어보는것을 권장합니다. diff --git a/md/kr/reference/lang.md b/md/kr/reference/lang.md new file mode 100644 index 0000000..9860e12 --- /dev/null +++ b/md/kr/reference/lang.md @@ -0,0 +1,17 @@ +# Lang + +`#!ts Lang.FailedMessage:string` +> 아무런 번역 값도 얻어오지 못하였을때 보여줄 문자열입니다. +> 변경시 자동으로 업데이트가 이루워집니다. + +--- + +`#!ts Lang.CurrentLocale:Locale` +> 현제 사용중인 언어입니다. 변경시 자동으로 업데이트가 이루워집니다. +> Lang.Locales 안의 값을 사용합니다. + +--- + +## Lang.Locales + +{!include/locales.md!} diff --git a/md/kr/reference/mounts.md b/md/kr/reference/mounts.md new file mode 100644 index 0000000..742df16 --- /dev/null +++ b/md/kr/reference/mounts.md @@ -0,0 +1,3 @@ +# Mounts + +{!include/mounts.md!} diff --git a/md/kr/reference/quadProperty.md b/md/kr/reference/quadProperty.md new file mode 100644 index 0000000..4964480 --- /dev/null +++ b/md/kr/reference/quadProperty.md @@ -0,0 +1,3 @@ +# QuadProperty + +{!include/quadProperty.md!} diff --git a/md/kr/reference/signal/bindable.md b/md/kr/reference/signal/bindable.md new file mode 100644 index 0000000..483b443 --- /dev/null +++ b/md/kr/reference/signal/bindable.md @@ -0,0 +1,3 @@ +# Bindable + +{!include/bindable.md!} diff --git a/md/kr/reference/signal/disconnecter.md b/md/kr/reference/signal/disconnecter.md new file mode 100644 index 0000000..5f24bef --- /dev/null +++ b/md/kr/reference/signal/disconnecter.md @@ -0,0 +1,3 @@ +# Disconnecter + +{!include/disconnecter.md!} diff --git a/md/kr/reference/signal/index.md b/md/kr/reference/signal/index.md new file mode 100644 index 0000000..695be2b --- /dev/null +++ b/md/kr/reference/signal/index.md @@ -0,0 +1,7 @@ +# Signal + +`#! Signal.Bindable.New(id:string)->Bindable` +> 새로운 [Bindable](./bindable) 을 생성하거나 이전의 [Bindable](./bindable) 을 반환합니다. + +`#! Signal.Disconnecter.New(id:string)->Disconnecter` +> 새로운 [Disconnecter](./disconnecter) 을 생성하거나 이전의 [Disconnecter](./disconnecter) 을 반환합니다. diff --git a/md/kr/reference/store/index.md b/md/kr/reference/store/index.md new file mode 100644 index 0000000..f7822fe --- /dev/null +++ b/md/kr/reference/store/index.md @@ -0,0 +1,16 @@ + +# Store + +`#!ts Store.GetStore(id:string?)->store` +> 값들을 저장하고 레지스터를 생성할 수 있는 값 저장소를 반환합니다. + +--- + +`#!ts Store.GetObject(id:string)->Object?` +> 해당 id 를 가진 생성된 오브젝트를 반환합니다. + +--- + +`#!ts Store.GetObjects(id:string)->objectList?` +> 해당 id 를 가진 생성된 오브젝트들을 반환합니다. 반환은 [objectList](./objectList.md) 타입을 가지고 있습니다. +> 고급 ID 를 사용할 수 있습니다. 자세한 사항은 [튜토리얼 문서](../../tutorial/3_getObject.md#id)를 확인하세요. diff --git a/md/kr/reference/store/objectList.md b/md/kr/reference/store/objectList.md new file mode 100644 index 0000000..439f869 --- /dev/null +++ b/md/kr/reference/store/objectList.md @@ -0,0 +1,3 @@ +# ObjectList + +{!include/objectList.md!} diff --git a/md/kr/reference/tween/directions.md b/md/kr/reference/tween/directions.md index e69de29..7b2bc66 100644 --- a/md/kr/reference/tween/directions.md +++ b/md/kr/reference/tween/directions.md @@ -0,0 +1,3 @@ +# Tween.Directions + +{!include/directions.md!} diff --git a/md/kr/reference/tween/easings.md b/md/kr/reference/tween/easings.md index e69de29..d864846 100644 --- a/md/kr/reference/tween/easings.md +++ b/md/kr/reference/tween/easings.md @@ -0,0 +1,3 @@ +# Tween.Easings + +{!include/easings.md!} diff --git a/md/kr/reference/tween/index.md b/md/kr/reference/tween/index.md new file mode 100644 index 0000000..42ca824 --- /dev/null +++ b/md/kr/reference/tween/index.md @@ -0,0 +1,3 @@ +# Tween + +{!include/tween.md!} diff --git a/md/kr/reference/tween/tweenOptions.md b/md/kr/reference/tween/tweenOptions.md new file mode 100644 index 0000000..9ea72db --- /dev/null +++ b/md/kr/reference/tween/tweenOptions.md @@ -0,0 +1,4 @@ + +# TweenOptions + +{!include/tweenOptions.md!} diff --git a/md/kr/todo.md b/md/kr/todo.md new file mode 100644 index 0000000..570fb1a --- /dev/null +++ b/md/kr/todo.md @@ -0,0 +1,36 @@ +# 할일 + +## 진행중이거나 검토중 + +### Spring + +Spring 물리 계산을 UI 애니메이션에 적용합니다 +WIP. 아직 진행중인 프로젝트. + +### Quad Debuger + +Register 의 상태와 Store 의 값, Class 의 동작 여부 등 Quad 의 여러 자원을 긴밀하게 디버그합니다. +WIP. 아직 진행중인 프로젝트. + +### Selection + +Tab 키등으로 버튼 선택하기 (... 가능함?) +WIP. 검토중인 프로젝트. + +--- + +## 먼 미래에 . . . + +*혹은 이루워지지 않는* + +### Quad Component Studio + +눈에 보이는 워지워그식 편집기를 이용해 Quad Class 를 생성합니다. + +### Quad WebRender + +HTML, CSS, JS 로써 스크립트를 변형해 스튜디오 없이 개발하는 가벼운 개발법입니다. + +### Quad Prerender + +미리 렌더링된 rbxm 객체를 반환합니다. lua 스크립트들이 매핑되어 일반적이게 돌아갑니다. diff --git a/md/kr/tutorial/11_extend.md b/md/kr/tutorial/11_extend.md index 3c69126..def5bab 100644 --- a/md/kr/tutorial/11_extend.md +++ b/md/kr/tutorial/11_extend.md @@ -10,10 +10,11 @@ Quad 에서는 로블록스의 `Frame` 이나 `TextButton` 같은 기본 오브 > 2. 긴 코드를 나누어 코드마다 확실한 목적을 부여해 더 명확한 코드 작성이 가능해집니다. > 3. 자신만의 프로퍼티를 만들거나 완전히 원하는대로 오브젝트를 커스터마이징 할 수 있습니다. > 4. 함수나 생성기를 직접 만드는 것 보다 일관된 방법을 제공합니다. +> 5. 매우 유연합니다. 다양한 방법의 구현법을 원하는대로 사용할 수 있습니다. --- -## 나만의 클래스를 만들어보자 +## 나만의 클래스를 만들어보기 `Extend` 객체는 다음과 같이 생성합니다. ```lua @@ -25,7 +26,7 @@ local myClass = Class.Extend() ``` 일반적으로 Extend 는 한 모듈에 하나씩 넣습니다. -다음과 같은 코드 구조를 만들어보세요. +다음과 같은 코드 구조를 만들어보세요. 아래의 코드는 모든 `Extend` 문법을 설명합니다. ``` - ScreenGUI |-- localscript @@ -59,7 +60,7 @@ local myClass = Class.Extend() BackgroundColor3 = myStore "bgColor"; } - Mount(ScreenGUI,main) + Mount(ScreenGUI, main) print(Store.GetObject("main") == main) -- true -- 이 값을 바꾸면 연동된 BackgroundColor3 도 바뀔것입니다 @@ -104,8 +105,8 @@ local myClass = Class.Extend() -- 프로퍼티의 기본값을 정해줄 수 있습니다. -- 생성 시 값이 누락된 경우 사용할 값을 정해줄 수 있습니다 -- 키, 값 으로 구성합니다 - props:Default("Text","Testing Label") - props:Default("ZIndex",1) + props:Default("Text", "Testing Label") + props:Default("ZIndex", 1) end -- myClass 가 진짜 그려지는 부분입니다. @@ -117,6 +118,11 @@ local myClass = Class.Extend() -- 자식 오브젝트에도 사용할 수 있는 문법입니다. self "_label"; + -- _holder 는 예약된 값입니다. 자식들이 여기에 들어와야 + -- 함을 나타냅니다. 리스트나 그리드가 있는 경우 유용합니다. + -- 따로 설정하지 않는 경우 Render 가 리턴한 값을 사용합니다. + self "_holder"; + -- GetPropertyChangedSignal 가 작동할 수 있도록 -- 프로퍼티 변경 이벤트를 연결해줍니다 -- 이 또한 자식 오브젝트에도 사용할 수 있는 문법입니다. @@ -184,3 +190,11 @@ local myClass = Class.Extend() -- 만든 클래스를 반환해줍시다. return myClass ``` + +--- + +## Extend + +Extend 에서 사용할 수 있는 값들과 메소드입니다. + +{!include/extend.md!} diff --git a/md/kr/tutorial/3_getObject.md b/md/kr/tutorial/3_getObject.md index ca6b398..1bc5938 100644 --- a/md/kr/tutorial/3_getObject.md +++ b/md/kr/tutorial/3_getObject.md @@ -27,7 +27,7 @@ Mount(ScreenGUI, Store.GetObject("mainFrame")) 아이디에 허용되는 글자는 변수명과 같습니다. 대소문자, 숫자, 언더바(_) 를 허용합니다. 오브젝트 생성시 `#!ts Frame "mainFrame" {}` 와 같이 id 값을 지정해 준다면 생성된 오브젝트는 그 아이디를 가지게 됩니다. -`#!ts Store.GetObject(id:string)->Object` 는 생성된 객체중 가장 첫번째의 id 가 일치하는 오브젝트를 반환해 줍니다. +`#!ts Store.GetObject(id:string)->Object?` 는 생성된 객체중 가장 첫번째의 id 가 일치하는 오브젝트를 반환해 줍니다. ```lua local index = 1 @@ -169,10 +169,12 @@ id 기능을 조금더 고급적인 방법으로 사용할 수도 있습니다. + 또는(or) 연산 `#!ts ,` + 그리고(and) 연산 `#!ts &` -GetObjects 에는 이 두 연산을 사용할 수 있고, 생성시에는 `#!ts ,` 으로 여러 아이디를 부여해줄 수 있습니다. *띄어쓰기는 무시됩니다* +`GetObjects` 에는 이 두 연산을 사용할 수 있고, 생성시에는 `#!ts ,` 으로 여러 아이디를 부여해줄 수 있습니다. *띄어쓰기는 무시됩니다* ???+ Warning "주의" - 고급 ID 사용시 `#!ts objectList:Remove` 메소드는 사용할 수 없습니다 + + + `GetObject` 에는 이 방식을 사용할 수 없습니다. + + 고급 ID 사용시 `#!ts objectList:Remove` 메소드는 사용할 수 없습니다. --- diff --git a/md/kr/tutorial/6_tween.md b/md/kr/tutorial/6_tween.md index 52a8b02..1f20f81 100644 --- a/md/kr/tutorial/6_tween.md +++ b/md/kr/tutorial/6_tween.md @@ -79,5 +79,6 @@ Quad 에서는 실제로 직접적으로 Tween 을 사용할 일은 적으며 ## 트윈 함수 Quad 의 트윈에는 트윈을 멈추거나 트윈중인지 확인하는 등의 작업을 할 수 있는 여러 함수들이 제공됩니다. +Tween 안의 모든 함수와 값들은 다음과 같습니다. {!include/tween.md!} diff --git a/md/kr/tutorial/8_register.md b/md/kr/tutorial/8_register.md index 0cf3eaa..e9f7d5c 100644 --- a/md/kr/tutorial/8_register.md +++ b/md/kr/tutorial/8_register.md @@ -28,6 +28,15 @@ Frame { BackgroundColor3 = myStore "color" } myStore.color = Color3.fromRGB(0,0,0) ``` +???+ Warning "주의" + + 구현의 복잡성의 이유로 레지스터는 오브젝트 생성시에만 등록할 수 있습니다. + ```lua + local myFrame = Frame{} + Frame.BackgroundColor3 = myStore "color" + ``` + 위처럼 사용할 수 없습니다. + > 1. 스토어를 생성함. > 2. 기본 값을 설정함. > 3. 스토어를 호출해 레지스터를 얻어 등록함. diff --git a/md/kr/tutorial/index.md b/md/kr/tutorial/index.md index 5cc45e2..9695f7c 100644 --- a/md/kr/tutorial/index.md +++ b/md/kr/tutorial/index.md @@ -1,19 +1,56 @@ # Getting Started -???+ example "실험적인 모듈" - 이 모듈은 +!!! example "실험적인 모듈" + 이 모듈은 업데이트가 빈번합니다! 항상 Github 를 확인해주세요! + +--- ## 머리말 이 페이지는 Quad 모듈을 쉽게 시작할 수 있도록 튜토리얼을 제공하고 있습니다. 이 페이지를 정독해 Quad 모듈의 전반적인 사용법을 파악해보세요! -*주의: 이 모듈은 개발 진행이 매우 빠릅니다. 많은양의 변경 사항이 있을 수 있으므로 github 에서 변경사항을 계속해서 추적하세요* +[변경 사항은 여기](changelogs)에서 확인할 수 있습니다. -[변경 사항은 여기](changelogs)에서 확인할 수 있습니다 +--- ## 설치 +3가지 방법중 가장 편한 방법을 선택해 모듈을 설치해주세요. + +### 드레그 엔 드롭 / rbxmx 파일 + +드레그해 스튜디오에 넣을 수 있는 모듈 파일입니다. + +[RBXMX 다운로드](https://github.com/qwreey75/Quad/releases/latest/download/Quad.rbxmx){ .md-button .md-button--primary } + +다운로드해 스튜디오에 옮겨주세요. + +### git clone + +rojo 를 사용해 빌드하는 방법을 사용할 수 있다면 Quad 를 직접 빌드할 수 있습니다. + +```sh +git clone https://github.com/qwreey75/Quad Quad +cd Quad +make build +``` + +==윈도우의 경우 `make build` 대신 `rojo build default.project.json -o output.rbxmx` 를 입력해 주어야 합니다.== + +### git submodule + +프로젝트가 rojo 를 사용하고 git 을 사용하는 경우 submodule 로 추가할 수 있습니다. + +```sh +# 이미 submodule 을 사용하고 있는 경우 입력할 필요가 없습니다 +git submodule init +# 서브모듈의 루트는 직접 정해주세요 +git submodule add https://github.com/qwreey75/Quad Quad +``` + +--- + ## 모듈 불러오기/초기화 ```lua @@ -23,7 +60,7 @@ local Quad = require(path.to.module).Init() 모듈을 셋업하기 위해서는 `#!ts .Init(QuadId:string?)` 을 이용합니다. 일반적으로 `QuadId` 값은 필요하지 않지만, 나중에 소개할 Store 와 같은 일부 기능들이 `#!ts QuadId:string` 에 영향받기도 합니다. `#!ts .Init(QuadId:string)` 함수는 `QuadId` 가 같은 불러오기가 이미 있었던 경우, 초기화 하지 않고 불러왔던것을 반환합니다. -따라서 모듈들 끼리 `QuadId` 가 같은 경우 Store 와 같은것이 공유됩니다. +따라서 모듈들 끼리 `QuadId` 가 같은 경우 Store 같은것들이 공유됩니다. `QuadId` 가 비워진 경우 한번도 생성된 적 없는 새로운 Quad 가 생성됩니다 @@ -33,24 +70,109 @@ local Class = Quad.Class ``` 불러오기가 끝났다면 이제 Quad 의 자원들을 이용할 수 있습니다! -[다음 페이지로 넘어가 어서 활용해 봅시다](./1_importRobloxClass) +[다음 페이지로 넘어가 어서 활용해 봅시다](./1_import) -## 타입 불러오기 +--- + +## 추가적 환경 설정 + +### 타입 불러오기 기본적으로 이 모듈은 로드시 타입을 반환하지만. 직접적으로 타입을 지정하고 싶은 경우 types.lua 를 불러올 수 있습니다 ```lua -local types +local types = require(path.to.module.types) +local Quad = (require(path.to.module)::types.module).Init() ``` +--- + ## 테스트 환경 준비 테스트 환경은 rojo 와의 개발통합을 위해 Play 버튼을 누르지 않고 미리보기를 사용할 수 있도록 만들어줍니다 이를 통해 다른 코드 방식의 UI 프레임 워크보다 빠른 개발속도를 달성할 수 있습니다 -### 자동 리로드 +편의상을 위해 자동 리로드를 설정해 줄 수 있습니다. -*주의: rojo 환경이 아니라면 자동 리로드는 랙을 동반할 수 있습니다* -> 일반적으로, 로컬 편집 환경에서 로블록스의 script editor 는 한글자 한글자 변경시 마다 .Source 를 업데이트합니다. 이는 곳 한글자 한글자 타이핑 시 마다 UI 가 업데이트 될 수 있음을 의미합니다. Quad 의 tracker 모듈은 순간적으로 많은양의 리로드가 발생하지 않도록 적절한 쿨타임과 시간분배를 가지고 있지만, 이 경우에도 Ctrl+S 를 눌러 저장해야 적용되는 vscode 와 같은 타 편집기와는 차이가 날 수 있습니다. 코드가 커짐으로 인해 자동 리로드에서 퍼포먼스적 이슈를 겪는다면, rojo 를 활용해 코드를 외부로 옮긴 후, vscode 를 스튜디오 위에 놓고 미리보기와 코드를 동시에 보면서 편집하세요. +???+ Warning "주의" -### 수동 리로드 + ==rojo 환경이 아니라면 자동 리로드는 랙을 동반할 수 있습니다== + > 일반적으로, 로컬 편집 환경에서 로블록스의 script editor 는 한글자 한글자 변경시 마다 .Source 를 업데이트합니다. 이는 곳 한글자 한글자 타이핑 시 마다 UI 가 업데이트 될 수 있음을 의미합니다. Quad 의 tracker 모듈은 순간적으로 많은양의 리로드가 발생하지 않도록 적절한 쿨타임과 시간분배를 가지고 있지만, 이 경우에도 Ctrl+S 를 눌러 저장해야 적용되는 vscode 와 같은 타 편집기와는 차이가 날 수 있습니다. 코드가 커짐으로 인해 자동 리로드에서 퍼포먼스적 이슈를 겪는다면, rojo 를 활용해 코드를 외부로 옮긴 후, vscode 를 스튜디오 위에 놓고 미리보기와 코드를 동시에 보면서 편집하세요. + > 프로젝트가 매우 거대하지 않다면 크게 걱정하지 않아도 됩니다. + +다음과 같은 코드트리를 만들어주세요. + +``` + | Main (ModuleScript) + |-- Loader (LocalScript) + |-- Test (ModuleScript) +``` + +=== "Main" + + 실제로 UI 들을 그리는 코드들이 담깁니다. + ```lua + local Quad = require(path.to.module).Init() + local LocalPlayer = game.Players.LocalPlayer + local ScreenGUI = Instance.new("ScreenGui", + LocalPlayer and LocalPlayer.PlayerGui or game.StarterGui) + ScreenGUI.Name = "MyGUI" + ScreenGUI.ResetOnSpawn = false + + -- 실제 그리는 코드들이 들어갑니다. + + return function() + -- 테스트가 끝나 만든걸 지워야 할 때 사용됩니다. + -- 추후 설명될 Unmount() 를 이용하세요. + ScreenGUI:Destroy() + end + ``` + +=== "Loader" + + 게임을 플레이 할 때 코드가 로드될 수 있도록 만드는 로더입니다. + ```lua + require(script.Parent) + ``` + +=== "Test" + + 명령창에서 명령어 입력으로 테스트를 실행 할 수 있도록 만드는 코드들이 담깁니다. + ```lua + -- 모듈 위치로 알맞게 변경해주세요 + local Quad = path.to.module + local tracker = require(Quad.tracker) + + local module = {} + local function reload() + if module.unload then pcall(module.unload) end + if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end + module.testingModule = script.Parent:Clone() + module.testingModule.Parent = script.Parent.Parent + module.testingModule.Archivable = false + module.testingModule.Name = module.testingModule.Name .. "_TESTING" + module.unload = require(module.testingModule) + end + + -- 자동 리로드를 켭니다. 이미 켜져있으면 다시 로드합니다 + function module.load() + reload() + if not module.autoreload then + module.autoreload = tracker.new(script.Parent) + module.autoreload:init(); wait() + module.autoreload:connect("updated",reload) + end + end + + -- 자동 리로드를 끄고 테스트로 생긴것을 지웁니다 + function module.unload() + if module.autoreload then pcall(module.autoreload.deinit,module.autoreload) end + if module.unload then pcall(module.unload) end + if module.testingModule then pcall(module.testingModule.Destroy,module.testingModule) end + module.autoreload = nil + module.unload = nil + module.testingModule = nil + end + + return module + ``` diff --git a/mkdocs_en.yml b/mkdocs_en.yml index 6bfe478..90e4903 100644 --- a/mkdocs_en.yml +++ b/mkdocs_en.yml @@ -7,7 +7,7 @@ copyright: Copyright © 2020 - 2023 Qwreey # 사이드바 nav: - 'index.md' + - Home: 'index.md' # 다중 언어 설정 extra: diff --git a/mkdocs_kr.yml b/mkdocs_kr.yml index 8678869..4a4d80a 100644 --- a/mkdocs_kr.yml +++ b/mkdocs_kr.yml @@ -9,9 +9,10 @@ copyright: Copyright © 2020 - 2023 Qwreey nav: - 홈: - 'index.md' - - 라이선스: 'license.md' - - 변경사항: 'changelogs.md' - 갤러리: 'gallery.md' + - 변경사항: 'changelogs.md' + - 라이선스: 'license.md' + - 로드맵: 'todo.md' - 튜토리얼: - tutorial/index.md - Import: 'tutorial/1_import.md' @@ -27,6 +28,23 @@ nav: - Extend: 'tutorial/11_extend.md' - 레퍼런스: - 'reference/index.md' + - Signal: + - 'reference/signal/index.md' + - Bindable: 'reference/signal/bindable.md' + - Disconnecter: 'reference/signal/disconnecter.md' + - Store: + - 'reference/store/index.md' + - ObjectList: 'reference/store/objectList.md' + - Tween: + - 'reference/tween/index.md' + - TweenOptions: 'reference/tween/tweenOptions.md' + - Easings: 'reference/tween/easings.md' + - Directions: 'reference/tween/directions.md' + - Event: 'event.md' + - Extend: 'extend.md' + - Lang: 'lang.md' + - Mounts: 'mounts.md' + - QuadProperty: 'quadProperty.md' extra: # 다중 언어 설정 diff --git a/src/exports.lua b/src/exports.lua index 3377fc6..a2ca97a 100644 --- a/src/exports.lua +++ b/src/exports.lua @@ -21,7 +21,7 @@ local round = require "libs.round" local customWarn = require "libs.customWarn" local IS_TEST = false -local VER = "2.22" .. (IS_TEST and "B" or "") +local VER = "2.24" .. (IS_TEST and "B" or "") if IS_TEST then warn("You are using BETA version of quad now. Many features may change in the future and unstable. AS USING BETA VERSION OF QUAD, YOU SHOULD KNOW IT WILL BUGGY SOMETIME. still on development - you can ignore this message if have no issue. if you have issue on using quad, please report issue on github. VERSION: "..VER) end diff --git a/src/mount.lua b/src/mount.lua index 7ea2e53..d2c24b7 100644 --- a/src/mount.lua +++ b/src/mount.lua @@ -31,8 +31,16 @@ function module.init(shared) if destroyThis then pcall(destroyThis,this) end - --if sef.to when - -- todo for remove child on parent + if type(self.to) == "table" then + local parentChild = rawget(self.to,"__child") + if parentChild then + for i,v in pairs(parentChild) do + if v == this then + parentChild[i] = nil + end + end + end + end end self.this = nil end diff --git a/testing/test/tracker.lua b/src/tracker.lua similarity index 100% rename from testing/test/tracker.lua rename to src/tracker.lua diff --git a/src/types.lua b/src/types.lua index 7356996..4df7e0d 100644 --- a/src/types.lua +++ b/src/types.lua @@ -184,7 +184,7 @@ export type Lerpable = Color3|UDim|UDim2|number|Vector2|Vector3|CFrame export type TweenHandler = ()->(); export type module_tween = { EasingFunctions:EasingFunctions; - Easing:EasingFunctions; + Easings:EasingFunctions; EasingDirections:EasingDirections; Directions:EasingDirections; LerpProperties: (item:item&(DOM|any),old:{[string]:Lerpable},new:{[string]:Lerpable},alpha:number,setter:(item:item&(DOM|any),property:string,value:Lerpable)->()?)->(); @@ -313,8 +313,8 @@ export type module_lang = { Swedish: Locale & "sv_se"; Arabic: Locale & "ar_001"; }; - Lang: Locale; - Default: Locale; + CurrentLocale: Locale; + FailedMessage: string; } & (id:string)->(langOptions)->register; -------------------