2025-06-04 05:12:01 +08:00

181 lines
4.2 KiB
Plaintext

autoImport("MessageFlyer3dTo2d")
FMEmission = class("FMEmission")
FMEmission.ViewType = UIViewType.NormalLayer;
FMEmission.ins = nil
function FMEmission.Ins()
if (FMEmission.ins == nil) then
FMEmission.ins = FMEmission.new()
end
return FMEmission.ins
end
function FMEmission:ctor()
end
function FMEmission:AttachGO(go)
self.gameObject = go
end
function FMEmission:Init()
if (GameObjectUtil.Instance:ObjectIsNULL(self.transFlyerRoot)) then
self.transFlyerRoot = GameObject.Find("MessageFlyerRoot").transform
end
if (GameObjectUtil.Instance:ObjectIsNULL(self.transPosSimulation)) then
self.transPosSimulation = GameObjectUtil.Instance:DeepFind(self.gameObject, "PosSimulation").transform
end
if self.posSimulation == nil then
self.posSimulation = self.transPosSimulation:GetComponent("FMPosSimulation")
end
if self.flyersOnJob == nil then
self.flyersOnJob = {}
end
if self.flyerBerth == nil then
self.flyerBerth = {}
end
if (self.queue == nil) then
self.queue = {}
end
self.flyerCount = 50
self.isRuning = false
if self.transMainCamera == nil then
self.transMainCamera = GameObject.FindGameObjectWithTag("MainCamera").transform
end
end
function FMEmission:Launch(str, color, pos)
if (self.flyerCount > 0) then
local mf = nil
local isFromBerth = false
if #self.flyerBerth > 0 then
mf = self.flyerBerth[1]
isFromBerth = true
else
mf = MessageFlyer3dTo2d.new()
mf:AttachGO(self.transFlyerRoot.gameObject)
end
if (GameObjectUtil.Instance:ObjectIsNULL(mf.gameObject)) then
mf:AttachGO(self.transFlyerRoot.gameObject)
end
local speed = math.random(5, 20)
mf:Initialize(str, color, speed, pos)
mf:Start()
if isFromBerth then
table.remove(self.flyerBerth, 1)
end
local pos = self:AddIntoFlyersOnJob(mf)
mf.jobPos = pos
self.flyerCount = self.flyerCount - 1
else
table.insert(self.queue, {str = str, color = color, pos = pos})
end
end
function FMEmission:Open()
if (not self:IsPronteraSouthGate()) then return end
if (self.isRuning) then return end
self.isRuning = true
self.gameObject:SetActive(true)
end
function FMEmission:Close()
if (not self:IsPronteraSouthGate()) then return end
if (not self.isRuning) then return end
self.isRuning = false
while #self.flyersOnJob > 0 do
local flyer = self.flyersOnJob[1]
flyer:Stop()
flyer:ResetLab()
table.remove(self.flyersOnJob, 1)
self:BackBerth(flyer)
end
self.gameObject:SetActive(false)
EventManager.Me():RemoveEventListener(ServiceEvent.NUserUserBarrageMsgCmd, self.OnReceiveFlyingMessage, self)
end
function FMEmission:AngleOfSend()
local transMainCamera = GameObject.FindGameObjectsWithTag("MainCamera")[1].transform
local eulerY = transMainCamera.rotation.eulerAngles.y;
eulerY = eulerY + 45
if eulerY > 360 then
eulerY = eulerY - 360
end
return eulerY
end
function FMEmission:Reset()
self:Close()
Component.Destroy(self.posSimulation)
self.posSimulation = nil
end
function FMEmission:PosOfSend()
local quaternion = self.transMainCamera.rotation
local tempRotation = quaternion.eulerAngles
local oldXRotation = tempRotation.x
tempRotation.x = 0
quaternion.eulerAngles = tempRotation
self.transMainCamera.rotation = quaternion
local pos = self.transMainCamera:TransformPoint(Vector3(0, math.random(2000, 5000), 10000))
tempRotation.x = oldXRotation
quaternion.eulerAngles = tempRotation
self.transMainCamera.rotation = quaternion
return pos
end
function FMEmission:IsPronteraSouthGate()
return Game.MapManager:GetMapID() == 2
end
function FMEmission:QueueLaunch()
if self.queue ~= nil and #self.queue > 0 then
local waitingMan = self.queue[1]
table.remove(self.queue, 1)
local str = waitingMan.str
local color = waitingMan.color
local pos = waitingMan.pos
self:Launch(str, color, pos)
end
end
function FMEmission:BackBerth(mf)
if mf ~= nil then
if self.flyerBerth == nil then
self.flyerBerth = {}
end
table.insert(self.flyerBerth, mf)
end
end
function FMEmission:AddIntoFlyersOnJob(mf)
if mf == nil then return end
if self.flyersOnJob == nil then
self.flyersOnJob = {}
end
table.insert(self.flyersOnJob, mf)
return #self.flyersOnJob
end
function FMEmission:RemoveFromFlyersOnJob(pos)
if self.flyersOnJob ~= nil then
table.remove(self.flyersOnJob, pos)
end
end