|
|
- 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
-
-
|