mirror of
https://gitlab.com/YuukiPS/GSServer-CBT.git
synced 2024-12-25 15:29:22 +03:00
213 lines
5.6 KiB
Lua
213 lines
5.6 KiB
Lua
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 |