GSServer-CBT/soggy_resources/lua/Actor/SubGlobal/LimitRegionGlobalActor.lua
Akbar Yahya e0d4d8040c melon
2022-11-21 16:30:31 +08:00

213 lines
5.6 KiB
Lua
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

require('Actor/ActorCommon')
local subGlobalActorProxy = require('Actor/SubGlobal/SubGlobalActorProxy')
local LimitRegionGlobalActor = class("LimitRegionGlobalActor", subGlobalActorProxy)
LimitRegionGlobalActor.defaultAlias = "LimitRegionGlobal"
LimitRegionGlobalActor.TeachingDialogList =
{
{dialogID = 3500101, audioEvtName = "", duration = 3},
}
LimitRegionGlobalActor.TeachingDuration = 0
LimitRegionGlobalActor.TeachingDurationCnt = 0
LimitRegionGlobalActor.Teaching = false
LimitRegionGlobalActor.WarningDialogList =
{
--[[ {dialogID = 3520501, audioEvtName = "", duration = 3},
{dialogID = 3520601, audioEvtName = "", duration = 3},
{dialogID = 3520701, audioEvtName = "", duration = 3}, ]]
}
LimitRegionGlobalActor.WarningDialogIndex = 1
LimitRegionGlobalActor.WarningDuration = 0
LimitRegionGlobalActor.WarningDurationCnt = 0
LimitRegionGlobalActor.testLength = 25
LimitRegionGlobalActor.transOffset = 7
LimitRegionGlobalActor.checkTask = nil
LimitRegionGlobalActor.pauseTask = false
LimitRegionGlobalActor.Warnning = false
--@region Method
function LimitRegionGlobalActor:PerformWarningNarrator()
if self.WarningDialogList == nil then
return -1.0
end
local dialogNum = #(self.WarningDialogList)
if self.WarningDialogIndex > dialogNum then
return -1.0
end
local currDialog = self.WarningDialogList[self.WarningDialogIndex]
if currDialog == nil then
self.WarningDialogIndex = 1
currDialog = self.WarningDialogList[self.WarningDialogIndex]
if currDialog == nil then
return -1.0
end
end
self.WarningDuration = currDialog.duration
self.WarningDurationCnt = 0
local dialogID = currDialog.dialogID
self:SayWarningNarrator(dialogID)
return self.WarningDuration
end
function LimitRegionGlobalActor:StopPerformAllNarrator()
self:StopWarningNarrator()
end
function LimitRegionGlobalActor:PerformTeachingNarrator()
local currDialog = self.TeachingDialogList[1]
if currDialog == nil then
return false
end
local dialogID = currDialog.dialogID
self.TeachingDuration = currDialog.duration
self.TeachingDurationCnt = 0
local audioEvtName = currDialog.audioEvtName
self:SayWarningNarrator(dialogID)
return true
end
--@endregion
function LimitRegionGlobalActor:CheckLimit(task, deltaTime)
if self.Teaching then
self.TeachingDurationCnt = self.TeachingDurationCnt + deltaTime
if self.TeachingDurationCnt >= self.TeachingDuration then
self:StopWarningNarrator()
self.uActor:AvatarPaimonDisappear()
self.Teaching = false
end
end
self.WarningDurationCnt = self.WarningDurationCnt + deltaTime
local avatarPos = self.uActor:GetAvatarPos()
local radius = self:GetLimitRegionDis(avatarPos, self.testLength)
local curAlpha = 1
if radius < self.testLength then
curAlpha = radius / self.testLength
if self.WarningDurationCnt >= self.WarningDuration then
self.WarningDialogIndex = self.WarningDialogIndex + 1
if self:PerformWarningNarrator() ~= true then
self.WarningDialogIndex = 0
end
self.Warnning = true
end
else
if self.Warnning == true then
self:StopWarningNarrator()
self.Warnning = false
end
end
self.uActor:BlackScreen(curAlpha)
if radius ~= 0 then
return
end
local avatarPos = self.uActor:GetAvatarPos()
-- 人经常会莫名的拉到0,0,0点会播放语音并进行控制只能加个保护
local len = avatarPos.x * avatarPos.x + avatarPos.y * avatarPos.y + avatarPos.z * avatarPos.z;
if len == 0 then
return
end
local newPos = self:CheckNeedTrans(avatarPos, self.transOffset)
local disX = newPos.x - avatarPos.x
local disZ = newPos.z - avatarPos.z
local disSquare = disX * disX + disZ * disZ;
if disSquare < 10 then
return
end
if self.pauseTask then
return
end
self.pauseTask = true
self.uActor:AvatarPaimonAppear(function ()
self.pauseTask = false
-- self.uActor:AvatarPaimonPlayer("Domangic")
end)
self:PerformTeachingNarrator();
self.uActor:AvatarGotoPoint(newPos, function ()
end)
end
function LimitRegionGlobalActor:PerformTeachingNarrator()
local currDialog = self.TeachingDialogList[1]
if currDialog == nil then
return false
end
local dialogID = currDialog.dialogID
self.TeachingDuration = currDialog.duration
self.TeachingDurationCnt = 0
local audioEvtName = currDialog.audioEvtName
self:SayWarningNarrator(dialogID)
if audioEvtName ~= nil and audioEvtName ~= "" then
self.uActor:PlayAudio(audioEvtName)
end
self.Teaching = true
end
function LimitRegionGlobalActor:Register()
print("CreateLimitRegion")
self:CreateLimitRegion("CB1OpenArea")
if self.checkTask == nil then
self.checkTask = self:CreateTask(self.MOVE_TASK_ID, LuaTaskType.LIMIT_REGION, "Lock")
self.checkTask:InitWithData(self, self)
--self.checkTask:TickEvent('+', self.CheckLimit)
end
end
function LimitRegionGlobalActor:UseFreshmeatRegion()
print("FreshmeatRegion")
self:DestroyLimitRegion("CB1OpenArea")
self:CreateLimitRegion("FreshmeatRegion")
end
function LimitRegionGlobalActor:OnFinishedRegion()
print("DestroyLimitRegion")
globalActor:EnablePlayerInput(true)
globalActor:BackPage()
self:DestroyLimitRegion("FreshmeatRegion")
self:CreateLimitRegion("CB1OpenArea")
-- actorMgr:DestroyActor("LimitRegionGlobal")
end
function LimitRegionGlobalActor:FinishLimitRegion()
self.uActor:BlackScreen(1)
globalActor:ShowPage("InLevelMapPageContext")
globalActor:InvokePageFunction("ShowDisableLimitRegion")
globalActor:EnablePlayerInput(false)
self:CallDelay(3, self.OnFinishedRegion)
end
function LimitRegionGlobalActor:Unregister()
if self.checkTask ~= nill then
self.checkTask:FinishTask()
self.checkTask = nil
end
end
function LimitRegionGlobalActor:Start()
end
return LimitRegionGlobalActor