miduo_client/Assets/ManagedResources/~Lua/Modules/Guild/View/GuildMemberView.lua

146 lines
5.3 KiB
Lua

require("Modules/Map/Logic/TileMapView")
GuildMemberView = {}
GuildMemberView.__index = GuildMemberView
local mapNpcOp = "UI_effect_DiTu_member"
function GuildMemberView.New(isSelf, curXY, name, gPos, sex, Ctrl)
local instance = {}
setmetatable(instance, GuildMemberView)
instance.isSelf = isSelf
instance.spLoader = SpriteLoader.New()
local u, v = GuildMap_Pos2UV(curXY)
instance.posData = TileMapView.GetMapData():GetMapData(u, v)
instance.leader = poolManager:LoadAsset(mapNpcOp, PoolManager.AssetType.GameObject)
instance.leader:SetActive(false)
Util.GetGameObject(instance.leader, "root/ui"):GetComponent("Canvas").worldCamera = TileMapView.GetCamera()
instance.name = name
instance.mapNpc = ConfigManager.GetConfigDataByKey(ConfigName.PlayerRole, "Role", sex).LiveAnimName
local scale = sex == ROLE_SEX.BOY and 1 or 0.5
instance.NpcGO = poolManager:LoadAsset(instance.mapNpc, PoolManager.AssetType.GameObject)
instance.NpcGO:SetActive(true)
instance.NpcGO.transform:SetParent(Util.GetTransform(instance.leader, "root"))
instance.NpcGO.transform.localPosition = Vector3.New(0,0, -1)
instance.NpcGO.transform.localScale = Vector3.one * 30 * scale
instance.NpcGO.name = "npc"
Util.SetParticleSortLayer(instance.NpcGO, 0)
instance.SkeletonGraphic = Util.GetGameObject(instance.leader, "root/npc"):GetComponent("SkeletonAnimation")
instance.SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
instance.SkeletonGraphic.transform.localEulerAngles = Vector3.zero
--instance.leader.transform:SetParent(Ctrl.transform)
instance.leader.transform:SetParent(Util.GetTransform(Ctrl, "effectGroup2#"))
instance.leader:SetActive(true)
local v3 = TileMapView.GetLiveTilePos(u, v)
instance.leader.transform.localScale = Vector3.one
instance.leader.transform.localPosition = Vector3(v3.x, v3.y, v3.z - v)
instance.PosText = Util.GetGameObject(instance.leader, "root/ui/pos/text"):GetComponent("Text")
if isSelf then
Util.GetGameObject(instance.leader, "root/ui"):GetComponent("Canvas").sortingOrder = 5
instance.NameText = Util.GetGameObject(instance.leader, "root/ui/name/text"):GetComponent("Text")
else
Util.GetGameObject(instance.leader, "root/ui"):GetComponent("Canvas").sortingOrder = 0
instance.NameText = Util.GetGameObject(instance.leader, "root/ui/name/text2"):GetComponent("Text")
end
Util.GetGameObject(instance.leader, "root/ui/name/text"):SetActive(isSelf)
Util.GetGameObject(instance.leader, "root/ui/name/text2"):SetActive(not isSelf)
instance.guildPosIcon = Util.GetGameObject(instance.leader, "root/ui/name/root/Image"):GetComponent("Image")
instance:SetGuildPos(gPos)
instance.NameText.text = name
instance:AddListener()
instance:RefreshPos(u, v)
return instance
end
function GuildMemberView:AddListener()
end
--移除事件监听(用于子类重写)
function GuildMemberView:RemoveListener()
end
-- 点击角色
function GuildMemberView:OnClick()
end
--事件监听结束-------------
function GuildMemberView:RefreshPos(u, v)
self.posData = TileMapView.GetMapData():GetMapData(u, v)
self.PosText.text = string.format("(%d, %d)", u, v)
end
-- 设置角色行走方向
local WALK_DIR = {
RIGHT = {animation = "move2", y = 0},
LEFT = {animation = "move2", y = 180},
UP = {animation = "move3", y = 0},
DOWN = {animation = "move", y = 0},
}
function GuildMemberView:SetRoleDirAction(dU, dV, isBack)
-- local dU = isBack and self.posData.u - u or u - self.posData.u
-- local dV = isBack and self.posData.v - v or v - self.posData.v
if dU > 0 and math.abs(dU) > math.abs(dV) then
self:SetWalkDir(WALK_DIR.RIGHT)
elseif dU < 0 and math.abs(dU) > math.abs(dV) then
self:SetWalkDir(WALK_DIR.LEFT)
elseif dV > 0 and math.abs(dV) > math.abs(dU) then
self:SetWalkDir(WALK_DIR.UP)
elseif dV < 0 and math.abs(dV) > math.abs(dU) then
self:SetWalkDir(WALK_DIR.DOWN)
end
SoundManager.PlaySound(SoundConfig.Sound_FootStep..math.random(1,7))
end
function GuildMemberView: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)
end
end
function GuildMemberView:PlayerIdle()
self.SkeletonGraphic.AnimationState:SetAnimation(0, "idle", true)
self.SkeletonGraphic.transform.localEulerAngles = Vector3.zero
self.curDir = nil
end
function GuildMemberView:Dispose()
self.spLoader:Destroy()
self:RemoveListener()
if self.mapNpc then
poolManager:UnLoadLive(self.mapNpc, self.NpcGO)
self.mapNpc = nil
end
poolManager:UnLoadAsset(mapNpcOp, self.leader, PoolManager.AssetType.GameObject)
self.leader = nil
end
-- 设置职位显示
GuildMemberView.GPosToSprite = {
[GUILD_GRANT.MASTER] = "r_gonghui_toubiao_01",
[GUILD_GRANT.ADMIN] = "r_gonghui_toubiao_02",
}
function GuildMemberView:SetGuildPos(gPos)
if not gPos or gPos == GUILD_GRANT.MEMBER then
self.guildPosIcon.gameObject:SetActive(false)
else
self.guildPosIcon.gameObject:SetActive(true)
self.guildPosIcon.sprite = self.spLoader:LoadSprite(GuildMemberView.GPosToSprite[gPos]) -- 无用的
end
end