miduo_client/Assets/ManagedResources/~Lua/Modules/Main/View/MainPlayerView.lua

179 lines
6.6 KiB
Lua
Raw Normal View History

2021-04-20 13:58:00 +08:00
MainPlayerView = {}
2020-05-09 13:31:21 +08:00
MainPlayerView.__index = MainPlayerView
local mapNpcOp = "UI_MainPlayer"
2021-05-29 18:06:15 +08:00
local GlobalSysConfig = ConfigManager.GetConfig(ConfigName.GlobalSystemConfig)
2021-03-26 20:06:08 +08:00
require("View/PlayerLiveView")
function MainPlayerView.New(isSelf, root, rect, pos,_NpvData,sortingOrder)
2021-03-26 20:06:08 +08:00
local instance
instance = {}
2020-05-09 13:31:21 +08:00
setmetatable(instance, MainPlayerView)
instance.isSelf = isSelf
instance.leader = poolManager:LoadAsset(mapNpcOp, PoolManager.AssetType.GameObject)
instance.roleRootTran = Util.GetTransform(instance.leader, "roleRoot")
instance.leader:SetActive(true)
instance.leader.transform:SetParent(root.transform)
instance.leader.transform.localPosition = Vector3.zero
instance.leader.transform.localScale = Vector3.one
2021-06-02 11:08:24 +08:00
instance.ImprintImg1 = Util.GetGameObject(instance.leader, "name/text/Icon")--修行标识
instance.ImprintImg2 = Util.GetGameObject(instance.leader, "name/text2/Icon")--修行标识
instance.ImprintImg1:SetActive(false)
instance.ImprintImg2:SetActive(false)
2020-05-09 13:31:21 +08:00
2021-03-27 20:01:39 +08:00
local _sex, npc, scale
2020-05-09 13:31:21 +08:00
if isSelf then
instance.NameText = Util.GetGameObject(instance.leader, "name/text"):GetComponent("Text")
Util.GetGameObject(instance.leader, "name/text"):SetActive(true)
Util.GetGameObject(instance.leader, "name/text2"):SetActive(false)
2021-03-27 20:01:39 +08:00
_sex = NameManager.roleSex
instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,1, nil,sortingOrder,NPCPosType.maincity)
2021-03-30 10:28:03 +08:00
if PlayerManager.GetPlayerRide() > 0 then
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,239.9,0)
else
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,176.1,0)
end
2021-05-29 18:06:15 +08:00
--如果修行开启设置修行标识
if ActTimeCtrlManager.SingleFuncState(108) then
2021-06-02 11:08:24 +08:00
instance.ImprintImg1:SetActive(true)
PracticeManager.SetPracticeIcon(instance.ImprintImg1,PracticeManager.PracticeLevel)
2021-05-29 18:06:15 +08:00
end
2020-05-09 13:31:21 +08:00
else
instance.NameText = Util.GetGameObject(instance.leader, "name/text2"):GetComponent("Text")
Util.GetGameObject(instance.leader, "name/text"):SetActive(false)
Util.GetGameObject(instance.leader, "name/text2"):SetActive(true)
2021-03-29 16:45:04 +08:00
_sex = _NpvData.sex
2021-03-27 20:01:39 +08:00
if _sex == 0 then zuoqi = 80008 end
2021-03-26 20:06:08 +08:00
local PlayerLiveViewData = {
2021-03-29 16:45:04 +08:00
skin = _NpvData.userSkin,
sex = _NpvData.sex,
2021-03-29 16:45:04 +08:00
ride = _NpvData.userMount,
designation = _NpvData.userTitle
2021-03-26 20:06:08 +08:00
}
2021-03-30 10:28:03 +08:00
if _NpvData.userMount > 0 then
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,239.9,0)
else
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,176.1,0)
end
instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,2, PlayerLiveViewData,sortingOrder)
2020-05-09 13:31:21 +08:00
end
2021-03-27 20:01:39 +08:00
-- instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,1, nil)
2021-06-03 11:23:05 +08:00
--instance.NpcGO:SetNameHeight(3)
2021-03-26 20:06:08 +08:00
instance.NpcGO:OnOpen()
2020-05-09 13:31:21 +08:00
instance.NameText.text = PlayerManager.nickName
instance.rect = rect
instance.leader:GetComponent("RectTransform").anchoredPosition = pos
instance.lastPos = pos
instance:SetRolePosZ(pos)
instance:AddListener()
return instance
end
function MainPlayerView:AddListener()
end
--移除事件监听(用于子类重写)
function MainPlayerView:RemoveListener()
end
-- 点击角色
function MainPlayerView:OnClick()
end
function MainPlayerView:SetAutoMove()
if self.isSelf then return end
local x = math.random(self.rect.xMin, self.rect.xMax)
local y = math.random(self.rect.yMin, self.rect.yMax)
self:SetRolePos(Vector2.New(x, y), math.random(10, 100), function ()
self:SetAutoMove()
end)
end
function MainPlayerView:OnSortingOrderChange(sortingOrder)
if self.NpcGO and self.NpcGO.OnSortingOrderChange then
self.NpcGO:OnSortingOrderChange(sortingOrder)
end
end
2020-05-09 13:31:21 +08:00
function MainPlayerView:SetName()
2021-05-26 18:32:03 +08:00
self.NameText.text = PracticeManager.SetNameColor(PlayerManager.nickName,PracticeManager.PracticeLevel)
2020-05-09 13:31:21 +08:00
end
function MainPlayerView:SetWalkDir(dir)
if not self.curDir or self.curDir ~= dir then
self.curDir = dir
2021-03-26 20:06:08 +08:00
-- self.SkeletonGraphic.transform.localEulerAngles = Vector3.New(0, dir.y, 0)
-- self.SkeletonGraphic.AnimationState:SetAnimation(0, dir.animation, true)
self.NpcGO:SetWalkDir(dir)
2020-05-09 13:31:21 +08:00
end
end
--通过设置z值动态设定live2d层级
function MainPlayerView:SetRolePosZ(pos)
local v3 = self.roleRootTran.localPosition
self.roleRootTran.localPosition = Vector3.New(v3.x, v3.y, 10 * (pos.y - self.rect.yMin) / (self.rect.yMax - self.rect.yMin))
end
-- 设置角色的位置
function MainPlayerView:SetRolePos(pos, delay, func)
if self.tweener then
self.tweener:Kill()
self.lastPos = self.leader:GetComponent("RectTransform").anchoredPosition
end
local delay = delay or 0
local dX = pos.x - self.lastPos.x
local dY = pos.y - self.lastPos.y
local dis = Vector2.Distance(pos, self.lastPos)
local leaderTran = self.leader:GetComponent("RectTransform")
local ov2 = leaderTran.anchoredPosition
self.tweener = DoTween.To(DG.Tweening.Core.DOGetter_float( function () return 0 end),
DG.Tweening.Core.DOSetter_float(function (progress)
local v2 = Vector2.Lerp(ov2, pos, progress)
leaderTran.anchoredPosition = v2
self:SetRolePosZ(v2)
2021-03-22 13:47:59 +08:00
PlayerManager.MainPanelRoleMonveState = true
2020-05-09 13:31:21 +08:00
end), 1, dis / 200):SetEase(Ease.Linear):SetDelay(delay):SetEase(Ease.Linear):OnComplete(function ()
self.lastPos = pos
self:PlayerIdle()
if func then
func()
end
end):OnStart(function ()
if math.abs(dX) >= math.abs(dY) then
if dX > 0 then
2021-03-26 20:06:08 +08:00
self:SetWalkDir(WALK_DIR.RUN_RIGHT)
2020-05-09 13:31:21 +08:00
else
2021-03-26 20:06:08 +08:00
self:SetWalkDir(WALK_DIR.RUN_LEFT)
2020-05-09 13:31:21 +08:00
end
else
if dY > 0 then
2021-03-26 20:06:08 +08:00
self:SetWalkDir(WALK_DIR.RUN_UP)
2020-05-09 13:31:21 +08:00
else
2021-03-26 20:06:08 +08:00
self:SetWalkDir(WALK_DIR.RUN_DOWN)
2020-05-09 13:31:21 +08:00
end
end
end)
end
function MainPlayerView:PlayerIdle()
2021-03-26 20:06:08 +08:00
-- self.SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
-- self.SkeletonGraphic.transform.localEulerAngles = Vector3.zero
self:SetWalkDir(WALK_DIR.IDLE_FRONT)
2020-05-09 13:31:21 +08:00
self.curDir = nil
end
function MainPlayerView:Dispose()
self:RemoveListener()
2021-05-27 09:43:41 +08:00
self.NpcGO:OnClose()
2020-05-09 13:31:21 +08:00
poolManager:UnLoadAsset(mapNpcOp, self.leader, PoolManager.AssetType.GameObject)
self.leader = nil
2020-06-03 19:09:01 +08:00
if self.tweener then
self.tweener:Kill()
end
2020-06-23 18:36:24 +08:00
end