eafd8f4088
EN: 1.9.0.107 CN: 1.9.0.108 JP: 1.9.0.112 KR: 1.9.0.112
125 lines
4.2 KiB
Lua
125 lines
4.2 KiB
Lua
local CookieGridCtrl = class("CookieGridCtrl", BaseCtrl)
|
|
CookieGridCtrl._mapNodeConfig = {
|
|
imgCookieIcon = {sComponentName = "Image"},
|
|
imgTips = {},
|
|
imgHalo_01 = {},
|
|
imgHalo_02 = {},
|
|
imgHeart = {}
|
|
}
|
|
local CookieShapeEnum = {
|
|
Gear = 1,
|
|
Wrench = 2,
|
|
Ruler = 3,
|
|
Lens = 4
|
|
}
|
|
local IconPathDefault = {
|
|
[CookieShapeEnum.Gear] = "UI_Activity/_400010/SpriteAtlas/Sprite/zs_cookie_01",
|
|
[CookieShapeEnum.Lens] = "UI_Activity/_400010/SpriteAtlas/Sprite/zs_cookie_04",
|
|
[CookieShapeEnum.Ruler] = "UI_Activity/_400010/SpriteAtlas/Sprite/zs_cookie_03",
|
|
[CookieShapeEnum.Wrench] = "UI_Activity/_400010/SpriteAtlas/Sprite/zs_cookie_02"
|
|
}
|
|
local nPerfectTiming = 0.33
|
|
local colorPerfect = Color(1.0, 0.302, 0.796, 1.0)
|
|
function CookieGridCtrl:Init(nShape, nGreatTime, nPerfectTime)
|
|
self.animator = self.gameObject:GetComponent("Animator")
|
|
self.nShape = nShape
|
|
self:SetPngSprite(self._mapNode.imgCookieIcon, IconPathDefault[nShape])
|
|
NovaAPI.SetImageColor(self._mapNode.imgCookieIcon, Color(1, 1, 1, 0.15))
|
|
self:SetSelect(false)
|
|
self:PlayEnterAnim()
|
|
self.nGreatTime = nGreatTime
|
|
self.nPerfectTime = nPerfectTime
|
|
end
|
|
function CookieGridCtrl:SetFilled()
|
|
NovaAPI.SetImageColor(self._mapNode.imgCookieIcon, Color(1, 1, 1, 1))
|
|
self:PlayEnterAnim()
|
|
end
|
|
function CookieGridCtrl:GetGirdShape()
|
|
if nil ~= self.nShape then
|
|
return self.nShape
|
|
end
|
|
return 0
|
|
end
|
|
function CookieGridCtrl:SetSelect(bActive)
|
|
self._mapNode.imgTips:SetActive(bActive)
|
|
end
|
|
function CookieGridCtrl:PlayLightAnim()
|
|
self._mapNode.imgHalo_01:SetActive(false)
|
|
self._mapNode.imgHalo_02:SetActive(false)
|
|
self.animator:Play("CookieGrid_Light")
|
|
end
|
|
function CookieGridCtrl:PlayWrongAnim(nBlockTime, bShowHeart)
|
|
self._mapNode.imgHalo_01:SetActive(false)
|
|
self._mapNode.imgHalo_02:SetActive(false)
|
|
if nBlockTime == nil or nBlockTime <= 0 then
|
|
nBlockTime = 1
|
|
end
|
|
self._mapNode.imgHeart:SetActive(bShowHeart == true)
|
|
local nAnimLength = NovaAPI.GetAnimClipLength(self.animator, {
|
|
"CookieGrid_wrong"
|
|
})
|
|
local nSpeed = nAnimLength / nBlockTime
|
|
self.animator:SetFloat("WrongSpeed", nSpeed or 1)
|
|
self.animator:Play("CookieGrid_wrong", 0, 0)
|
|
end
|
|
function CookieGridCtrl:PlayHaloAnim(nSpeed)
|
|
self._mapNode.imgHalo_01:SetActive(true)
|
|
self._mapNode.imgHalo_02:SetActive(true)
|
|
self.animator:SetFloat("PlaySpeed", nSpeed or 1)
|
|
self.animator:Play("CookieGrid_play", 0, 0)
|
|
self:StartFadingColor()
|
|
end
|
|
function CookieGridCtrl:StartFadingColor()
|
|
if self.timerColorFade ~= nil then
|
|
self.timerColorFade:Cancel()
|
|
self.timerColorFade = nil
|
|
end
|
|
GameUIUtils.SetUIMaterialAnimationColorValue1(self._mapNode.imgHalo_01.gameObject, 1, 1, 1, 1)
|
|
local nTimeNeed = self.nGreatTime - self.nPerfectTime
|
|
self.colorCur = Color(1, 1, 1, 1)
|
|
self.nColorTime = 0
|
|
self.timerColorFade = self:AddTimer(0, 0.034, function()
|
|
self.nColorTime = self.nColorTime + 0.034
|
|
local tempColor = self:_LerpColor(self.colorCur, colorPerfect, self.nColorTime, nTimeNeed)
|
|
GameUIUtils.SetUIMaterialAnimationColorValue1(self._mapNode.imgHalo_01.gameObject, tempColor.r, tempColor.g, tempColor.b, tempColor.a)
|
|
end, true, true, true)
|
|
self:AddTimer(1, nTimeNeed + 0.1, function()
|
|
if self.timerColorFade ~= nil then
|
|
self.timerColorFade:Cancel()
|
|
self.timerColorFade = nil
|
|
end
|
|
self._mapNode.imgHalo_01:SetActive(false)
|
|
self._mapNode.imgHalo_02:SetActive(false)
|
|
end, true, true, true)
|
|
end
|
|
function CookieGridCtrl:_LerpColor(currentColor, targetColor, elapsedTime, totalTime)
|
|
if totalTime <= 0 then
|
|
return {
|
|
r = targetColor.r,
|
|
g = targetColor.g,
|
|
b = targetColor.b,
|
|
a = targetColor.a or 1
|
|
}
|
|
end
|
|
local t = elapsedTime / totalTime
|
|
if 1 < t then
|
|
t = 1
|
|
end
|
|
if t < 0 then
|
|
t = 0
|
|
end
|
|
local res = Color(currentColor.r + (targetColor.r - currentColor.r) * t, currentColor.g + (targetColor.g - currentColor.g) * t, currentColor.b + (targetColor.b - currentColor.b) * t, (currentColor.a or 1) + ((targetColor.a or 1) - (currentColor.a or 1)) * t)
|
|
return res
|
|
end
|
|
function CookieGridCtrl:StopAllAnim()
|
|
self.animator:Play("Empty", 0, 0)
|
|
self._mapNode.imgHalo_01:SetActive(false)
|
|
self._mapNode.imgHalo_02:SetActive(false)
|
|
end
|
|
function CookieGridCtrl:PlayEnterAnim()
|
|
self._mapNode.imgHalo_01:SetActive(false)
|
|
self._mapNode.imgHalo_02:SetActive(false)
|
|
self.animator:Play("CookieGrid_in", 0, 0)
|
|
end
|
|
return CookieGridCtrl
|