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

151 lines
5.1 KiB
Lua
Raw Normal View History

2020-08-25 15:46:38 +08:00
MainPlayerView = {}
2020-05-09 13:31:21 +08:00
MainPlayerView.__index = MainPlayerView
local mapNpcOp = "UI_MainPlayer"
2021-03-26 20:06:08 +08:00
require("View/PlayerLiveView")
function MainPlayerView.New(isSelf, root, rect, pos,_sex)
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-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)
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-27 20:01:39 +08:00
_sex = _sex or math.random(0,1)
local zuoqi = 0
if _sex == 0 then zuoqi = 80008 end
2021-03-26 20:06:08 +08:00
local PlayerLiveViewData = {
skin = 80012,
2021-03-27 20:01:39 +08:00
sex = _sex,
ride = zuoqi,
2021-03-26 20:06:08 +08:00
}
2021-03-27 20:01:39 +08:00
instance.NpcGO = PlayerLiveView:New(instance.roleRootTran,2, PlayerLiveViewData)
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-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:SetName()
self.NameText.text = PlayerManager.nickName
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()
poolManager:UnLoadLive(mapNpc, self.NpcGO)
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