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

185 lines
6.8 KiB
Lua

MainPlayerView = {}
MainPlayerView.__index = MainPlayerView
local mapNpcOp = "UI_MainPlayer"
local GlobalSysConfig = ConfigManager.GetConfig(ConfigName.GlobalSystemConfig)
require("View/PlayerLiveView")
function MainPlayerView.New(isSelf, root, rect, pos,_NpvData,sortingOrder)
local instance
instance = {}
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
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)
local _sex, npc, scale
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)
_sex = NameManager.roleSex
instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,1, nil,sortingOrder,NPCPosType.maincity)
if PlayerManager.GetPlayerRide() > 0 then
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,240,0)
else
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,210,0)
end
--如果修行开启设置修行标识
if ActTimeCtrlManager.SingleFuncState(108) then
--屏蔽段位显示
instance.ImprintImg1:SetActive(false)
PracticeManager.SetPracticeIcon(instance.ImprintImg1,PracticeManager.PracticeLevel)
end
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)
_sex = _NpvData.sex
if _sex == 0 then zuoqi = 80008 end
local PlayerLiveViewData = {
skin = _NpvData.userSkin,
sex = _NpvData.sex,
ride = _NpvData.userMount,
designation = _NpvData.userTitle
}
if _NpvData.userMount > 0 then
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,240,0)
else
Util.GetGameObject(instance.leader, "name").transform.localPosition = Vector3.New(0,210,0)
end
instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,2, PlayerLiveViewData,sortingOrder,NPCPosType.maincity)
end
-- instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,1, nil)
--instance.NpcGO:SetNameHeight(200)
instance.NpcGO:OnOpen()
instance.NpcGO:OnSortingOrderChange(sortingOrder)
if isSelf then
instance.NpcGO:SetSelfTag()
instance.NpcGO:SetEffectScale(0.9)
end
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
function MainPlayerView:SetName()
self.NameText.text = PracticeManager.SetNameColor(PlayerManager.nickName,PracticeManager.PracticeLevel)
end
function MainPlayerView:SetWalkDir(dir)
if not self.curDir or self.curDir ~= dir then
self.curDir = dir
-- self.SkeletonGraphic.transform.localEulerAngles = Vector3.New(0, dir.y, 0)
-- self.SkeletonGraphic.AnimationState:SetAnimation(0, dir.animation, true)
self.NpcGO:SetWalkDir(dir)
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)
PlayerManager.MainPanelRoleMonveState = true
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
self:SetWalkDir(WALK_DIR.RUN_LEFT)
else
self:SetWalkDir(WALK_DIR.RUN_RIGHT)
end
else
if dY > 0 then
self:SetWalkDir(WALK_DIR.RUN_UP)
else
self:SetWalkDir(WALK_DIR.RUN_DOWN)
end
end
end)
end
function MainPlayerView:PlayerIdle()
-- self.SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
-- self.SkeletonGraphic.transform.localEulerAngles = Vector3.zero
self:SetWalkDir(WALK_DIR.IDLE_FRONT)
self.curDir = nil
end
function MainPlayerView:Dispose()
self:RemoveListener()
self.NpcGO:OnClose()
poolManager:UnLoadAsset(mapNpcOp, self.leader, PoolManager.AssetType.GameObject)
self.leader = nil
if self.tweener then
self.tweener:Kill()
end
end