feat: Added new setProperty custom values

This commit is contained in:
Qwreey 2022-12-17 14:26:34 +09:00
parent 5579ad134a
commit 21771d3025
3 changed files with 59 additions and 45 deletions

View file

@ -25,17 +25,39 @@ function module.init(shared)
local advancedTween = shared.tween; ---@module "src.libs.AdvancedTween" local advancedTween = shared.tween; ---@module "src.libs.AdvancedTween"
local round = shared.round; ---@module "src.libs.round" local round = shared.round; ---@module "src.libs.round"
local function InstanceNewWithName(classname,parent,name)
local item = InstanceNew(classname,parent)
item.Name = name
return item
end
local function setProperty(item,index,value,ClassName) local function setProperty(item,index,value,ClassName)
ClassName = ClassName or item.ClassName; ClassName = ClassName or item.ClassName;
local isImage = (ClassName == "ImageLabel" or ClassName == "ImageButton"); local isImage = (ClassName == "ImageLabel" or ClassName == "ImageButton");
if index == "roundSize" and isImage then if (index == "roundSize" or index == "RoundSize") and isImage then
if not round then if not round then
warn "module 'round' needs to be loaded for set images round size but it is not found on 'src.libs'. you should adding that to src.libs directory" warn "module 'round' needs to be loaded for set images round size but it is not found on 'src.libs'. you should adding that to src.libs directory"
end end
round.setRound(item,value); round.setRound(item,value);
elseif index == "uiRoundSize" then elseif index == "uiRoundSize" or index == "UIRoundSize" then
local uiCorner = InstanceNew("UICorner",item); local uiCorner = item:FindFirstChildOfClass("UICorner") or InstanceNewWithName("UICorner",item,"_quad_round");
uiCorner.CornerRadius = UDim.new(0,value); uiCorner.CornerRadius = UDim.new(0,value);
elseif index == "PaddingAll" or index == "paddingAll" then
local target = ClassName == "UIPadding" and item or (item:FindFirstChildOfClass("UIPadding") or InstanceNewWithName("UIPadding",item,"_quad_padding"));
target.PaddingLeft = value;
target.PaddingRight = value;
target.PaddingTop = value;
target.PaddingBottom = value;
elseif index == "PaddingAllOffset" or index == "PaddingAllOffset" then
local target = ClassName == "UIPadding" and item or (item:FindFirstChildOfClass("UIPadding") or InstanceNewWithName("UIPadding",item,"_quad_padding"));
local padding = UDim.new(0,value);
target.PaddingLeft = padding;
target.PaddingRight = padding;
target.PaddingTop = padding;
target.PaddingBottom = padding;
elseif index == "Scale" then
local target = ClassName == "UIScale" and item or (item:FindFirstChildOfClass("UIScale") or InstanceNewWithName("UIScale",item,"_quad_scale"));
target.Scale = value;
else else
item[index] = value; -- set property item[index] = value; -- set property
end end

View file

@ -1,23 +0,0 @@
local module = {}
function Lerp(Alpha,Point1,Point2)
return Point1 + ( (Point2 - Point1) * Alpha )
end
function module.Bezier(Alpha,...)
local New = {}
local Len = #{...}
for i = 1,Len do
if i ~= 1 then
New[#New+1] = Lerp(Alpha,select(...,i-1),select(...,i))
end
end
if Len <= 2 then
return New[1]
end
return module.Bezier(Alpha,unpack(New))
end
return module

View file

@ -41,6 +41,11 @@ module.EasingDirections = {
In = "In" ; -- 기본방향 In = "In" ; -- 기본방향
} }
---@deprecated
module.EasingDirection = module.EasingDirections
---@deprecated
module.EasingFunction = module.EasingFunctions
------------------------------------ ------------------------------------
-- Lerp 함수 -- Lerp 함수
------------------------------------ ------------------------------------
@ -68,21 +73,21 @@ function LerpProperties(Item,Old,New,Alpha)
Item[Property] = Lerp(OldValue,NewValue,Alpha) Item[Property] = Lerp(OldValue,NewValue,Alpha)
elseif Type == "UDim2" then elseif Type == "UDim2" then
Item[Property] = UDim2.new( Item[Property] = UDim2.new(
Lerp(OldValue.X.Scale or 0,NewValue.X.Scale or 0,Alpha), Lerp(OldValue.X.Scale ,NewValue.X.Scale ,Alpha),
Lerp(OldValue.X.Offset or 0,NewValue.X.Offset or 0,Alpha), Lerp(OldValue.X.Offset,NewValue.X.Offset,Alpha),
Lerp(OldValue.Y.Scale or 0,NewValue.Y.Scale or 0,Alpha), Lerp(OldValue.Y.Scale ,NewValue.Y.Scale ,Alpha),
Lerp(OldValue.Y.Offset or 0,NewValue.Y.Offset or 0,Alpha) Lerp(OldValue.Y.Offset,NewValue.Y.Offset,Alpha)
) )
elseif Type == "UDim" then elseif Type == "UDim" then
Item[Property] = UDim.new( Item[Property] = UDim.new(
Lerp(OldValue.Scale or 0,NewValue.Scale or 0,Alpha), Lerp(OldValue.Scale ,NewValue.Scale ),
Lerp(OldValue.Offset or 0,NewValue.Offset or 0,Alpha) Lerp(OldValue.Offset,NewValue.Offset)
) )
elseif Type == "Color3" then elseif Type == "Color3" then
Item[Property] = Color3.fromRGB( Item[Property] = Color3.fromRGB(
Lerp((OldValue.r or 0)*255,(NewValue.r or 0)*255,Alpha), Lerp(OldValue.r*255,NewValue.r*255),
Lerp((OldValue.g or 0)*255,(NewValue.g or 0)*255,Alpha), Lerp(OldValue.g*255,NewValue.g*255),
Lerp((OldValue.b or 0)*255,(NewValue.b or 0)*255,Alpha) Lerp(OldValue.b*255,NewValue.b*255)
) )
end end
end end
@ -103,7 +108,10 @@ end
--해당 함수가 실행됨 --해당 함수가 실행됨
--Properties : 트윈할 속성과 목표값 예시 : --Properties : 트윈할 속성과 목표값 예시 :
--Data.Properties.Position = UDim2.new(1,0,1,0) 처럼 하면 Position 속성의 목표를 1,0,1,0 으로 지정 --Data.Properties.Position = UDim2.new(1,0,1,0) 처럼 하면 Position 속성의 목표를 1,0,1,0 으로 지정
function module.RunTween(Item,Data,Properties,Ended) function module.RunTween(Item,Data,Properties,Ended,OnStepped,_)
-- remove self
if Item == module then Item = Data; Data = Properties; Properties = Ended; Ended = OnStepped; OnStepped = _; end
-- 시간 저장 -- 시간 저장
local Time = Data.Time or 1 local Time = Data.Time or 1
local EndTime = clock() + Time local EndTime = clock() + Time
@ -136,7 +144,8 @@ function module.RunTween(Item,Data,Properties,Ended)
local CallBack = Data.CallBack local CallBack = Data.CallBack
if CallBack then if CallBack then
for FncIndex,Fnc in pairs(CallBack) do for FncIndex,Fnc in pairs(CallBack) do
if type(Fnc) ~= "function" then if type(Fnc) ~= "function" or (type(tonumber(FncIndex)) ~= "number" and FncIndex ~= "*") then
warn(("Unprocessable callback function got, Ignored.\n - key: %s value: %s"):format(tostring(Fnc),tostring(FncIndex)))
CallBack[FncIndex] = nil CallBack[FncIndex] = nil
end end
end end
@ -197,7 +206,7 @@ function module.RunTween(Item,Data,Properties,Ended)
remove(BindedFunctions,find(BindedFunctions,Step)) remove(BindedFunctions,find(BindedFunctions,Step))
Index = 1 Index = 1
if Ended then if Ended then
Ended() Ended(Item)
end end
end end
@ -223,6 +232,7 @@ function module.RunTween(Item,Data,Properties,Ended)
end end
end end
end end
if OnStepped then OnStepped(Item,Index,Alpha) end
end end
-- 스캐줄에 등록 -- 스캐줄에 등록
@ -230,21 +240,24 @@ function module.RunTween(Item,Data,Properties,Ended)
end end
-- 여러개의 개체를 트윈시킴 -- 여러개의 개체를 트윈시킴
function module.RunTweens(Items,Data,Properties,Ended) function module.RunTweens(Items,Data,Properties,Ended,OnStepped,_)
local First = true -- remove self
if Items == module then Items = Data; Data = Properties; Properties = Ended; Ended = OnStepped; OnStepped = _; end
for _,Item in pairs(Items) do for _,Item in pairs(Items) do
module.RunTween(Item,Data,Properties,First and Ended) module.RunTween(Item,Data,Properties,Ended,OnStepped)
First = false
end end
end end
-- 트윈 멈추기 -- 트윈 멈추기
function module.StopTween(Item) function module.StopTween(Item,_)
if Item == module then Item = _ end
module.PlayIndex[Item] = nil module.PlayIndex[Item] = nil
end end
-- 해당 개체가 트윈중인지 반환 -- 해당 개체가 트윈중인지 반환
function module.IsTweening(Item) function module.IsTweening(Item,_)
if Item == module then Item = _ end
if module.PlayIndex[Item] == nil then if module.PlayIndex[Item] == nil then
return false return false
end end
@ -258,7 +271,9 @@ function module.IsTweening(Item)
end end
-- 해당 개체의 해당 프로퍼티가 트윈중인지 반환 -- 해당 개체의 해당 프로퍼티가 트윈중인지 반환
function module.IsPropertyTweening(Item,PropertyName) function module.IsPropertyTweening(Item,PropertyName,_)
if Item == module then Item = _ end
if module.PlayIndex[Item] == nil then if module.PlayIndex[Item] == nil then
return false return false
end end