源战役客户端
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 
 
 

141 rindas
3.6 KiB

GotoComponent = GotoComponent or BaseClass(BaseItem)
local GotoComponent = GotoComponent
local RoleManager = RoleManager
local SceneManager = SceneManager
local GameMath = GameMath
function GotoComponent:__init()
self.base_file = "common"
self.layout_file = "GotoComponent"
self.update_enable = false
self.pos_change = false
self:Load()
end
function GotoComponent:Load_callback()
self.arrow = self:GetChild("Arrow")
self.circle = self:GetChild("Circle")
self:InitEvent()
if self.need_refreshData then
local pos = self.pos
self.pos = nil
self:SetData(pos)
end
end
function GotoComponent:InitEvent()
local function onBtnClickHandler(target)
if target == self.gameObject then
self:FindWay()
end
end
AddClickEvent(self.gameObject,onBtnClickHandler)
end
function GotoComponent:FindWay()
if self.pos then
local findVo = FindVo.New()
findVo.type = FindVo.POINT
findVo.sceneId = SceneManager.Instance:GetSceneId()
findVo.id = 0
findVo.x = self.pos.x / SceneObj.LogicRealRatio.x
findVo.y = self.pos.y / SceneObj.LogicRealRatio.y
Scene.Instance:FindElement(findVo)
end
end
function GotoComponent:SetData(pos)
if pos and (self.pos == nil or (self.pos.x ~= pos.x or self.pos.y ~= pos.y)) then
self.pos = pos
self.pos_change = true
if self.is_loaded then
self.need_refreshData = false
self.percentage = 0
self.runningTime = 0
self.reverse = false
self.time = 0.4
self:UpdateArrowPos()
self:StartUpdateBeat()
else
self.need_refreshData = true
end
end
end
function GotoComponent:__delete()
if self.update_enable then
self.update_enable = false
self:RemoveUpdateBeat()
end
end
function GotoComponent:StartUpdateBeat( )
if self._use_delete_method then return end
if not self.update_enable then
self.update_enable = true
Runner:getInstance():AddRunObj(self, 2)
local function onMainRoleMove()
self.pos_change = true
end
self.main_role_move_id = GlobalEventSystem:Bind(ObjectEventType.MAINROLE_MOVE_EVENT_IMME,onMainRoleMove)
end
end
function GotoComponent:RemoveUpdateBeat( )
if self.update_enable then
self.update_enable = false
Runner.Instance:RemoveRunObj(self)
self.pos = nil
if self.main_role_move_id then
GlobalEventSystem:UnBind(self.main_role_move_id)
self.main_role_move_id = nil
end
end
end
function GotoComponent:UpdateArrowPos()
local mx, my = RoleManager.Instance.mainRoleInfo.pos_x, RoleManager.Instance.mainRoleInfo.pos_y
local dir = co.TableXY(self.pos.x - mx, self.pos.y - my)
co.NormaliseXYTable(dir)
mx = mx + dir.x * 170
my = my + dir.y * 170 + 75
local pos = MainCamera.Instance:WorldToViewportPoint(mx, my, 0) / MainCamera.Instance:GetCameraRatio()
self:SetPosition(pos.x, pos.y)
end
function GotoComponent:Update(now_time,elapse_time)
if self.update_enable then
if self.pos_change then
self.pos_change = false
local mx, my = RoleManager.Instance.mainRoleInfo.pos_x, RoleManager.Instance.mainRoleInfo.pos_y + 75
local angle = SceneManager.Instance:GetAngle(co.TableXY(mx, my), self.pos, true)
if angle then
self.arrow.localRotation = Quaternion.Euler(0, 0, angle)
end
self:UpdateArrowPos()
end
local scale = GameMath.Lerp(1,0.88,self.percentage)
self.circle.localScale = Vector3(scale,scale,scale)
self:UpdatePercentage(now_time,elapse_time)
end
end
function GotoComponent:UpdatePercentage(now_time,elapse_time)
self.runningTime = self.runningTime + elapse_time
if self.reverse then
self.percentage = 1 - self.runningTime / self.time
else
self.percentage = self.runningTime / self.time
end
if self.percentage > 1 or self.percentage < 0 then
self.runningTime = 0
self.reverse = not self.reverse
end
end