miduo_client/Assets/ManagedResources/~Lua/View/SingleStoryPlayerView.lua

321 lines
11 KiB
Lua
Raw Normal View History

2021-04-22 18:13:28 +08:00
SingleStoryPlayerView = {}
local MapPointConfig = ConfigManager.GetConfig(ConfigName.MapPointConfig)
2021-05-13 16:32:40 +08:00
local _PlayTimeStamp = {
[0] = 0,
[1] = 0,
}
2021-04-22 18:13:28 +08:00
function SingleStoryPlayerView:New(gameObject)
local b = {}
b.gameObject = gameObject
b.transform = gameObject.transform
setmetatable(b, { __index = SingleStoryPlayerView })
return b
end
function SingleStoryPlayerView:InitComponent()
self.roleRoot = Util.GetGameObject(self.gameObject,"roleRoot")
self.nameDi = Util.GetGameObject(self.gameObject, "nemeDi")
self.name = Util.GetGameObject(self.nameDi, "name"):GetComponent("Text")
2021-04-26 09:41:41 +08:00
self.roadsList = {}
2021-04-26 18:29:47 +08:00
self.dirList = {}
2021-04-22 18:13:28 +08:00
self.roads = {}
self.startPos = {}
2021-04-26 09:41:41 +08:00
self.index = 1 --当前应该走哪一段 self.roads = self.roadsList[self.index] 第一段是出生点 从第二段开始跑图
2021-04-26 18:29:47 +08:00
self.roadsIndex = 0 --走到当前路线哪一步
2021-04-26 09:41:41 +08:00
self.callList = Stack.New()
self.state = 0
2021-04-22 18:13:28 +08:00
end
function SingleStoryPlayerView:OnOpen(parent)
self.parent = parent
2021-05-13 16:32:40 +08:00
_PlayTimeStamp = {
[0] = 0,
[1] = 0,
}
--LogGreen("_PlayTimeStamp[0]:".._PlayTimeStamp[0])
2021-04-22 18:13:28 +08:00
end
function SingleStoryPlayerView:SetData(data,playerType)
2021-04-26 18:29:47 +08:00
self.playerType = playerType
2021-04-22 18:13:28 +08:00
if self.playerLiveView then
self.playerLiveView:OnClose()
self.playerLiveView = nil
end
2021-04-26 09:41:41 +08:00
self.roleRoot.transform.localScale = Vector3.one
2021-04-22 18:13:28 +08:00
if playerType == 0 then
self:SetRoads0(data)
elseif playerType == 1 then
self:SetRoads1(data)
end
2021-04-26 09:41:41 +08:00
2021-04-22 18:13:28 +08:00
self.gameObject.transform.localPosition = self.startPos
self.gameObject.transform.localScale = Vector3.one * 1.5
end
function SingleStoryPlayerView:SetRoads0(data)
2021-04-26 18:29:47 +08:00
local index = 0
2021-04-26 09:41:41 +08:00
for i = 2 ,#data do
2021-04-26 18:29:47 +08:00
local vecs = string.split(data[i],',')
if #vecs < 3 then
if tonumber(vecs[1]) == 0 then
index = index + 1
if not self.roadsList[index] then
self.roadsList[index] = {}
end
if not self.dirList[index] then
self.dirList[index] = tonumber(vecs[2]) or 1
end
end
2021-04-26 09:41:41 +08:00
else
local road = {}
road.indexType = 0 -- 0 怪 1 人 2 地图
road.vec = Vector3.New(tonumber(vecs[1] or 0),tonumber(vecs[2] or 0),tonumber(vecs[3] or 0))
if tonumber(vecs[4]) and tonumber(vecs[4]) > 0 then
local event = {}
event.eventType = tonumber(vecs[4])
event.groups = {}
for j = 5,#vecs do
table.insert(event.groups,tonumber(vecs[j]))
end
road.event = event
end
table.insert(self.roadsList[index],road)
end
end
2021-04-27 19:51:40 +08:00
-- for k,v in ipairs(self.roadsList) do
2021-05-13 16:32:40 +08:00
-- --LogGreen("Monster k:"..k.." dirList:"..self.dirList[k])
2021-04-27 19:51:40 +08:00
-- for n,m in ipairs(v) do
2021-05-13 16:32:40 +08:00
-- --LogGreen("Monster k:"..k.." n:"..n.." vec:"..tostring(m.vec))
2021-04-27 19:51:40 +08:00
-- end
-- end
2021-04-26 18:29:47 +08:00
self.startPos = self.roadsList[1][1].vec
local pointId = tonumber(data[1])
self.playerLiveView = MonsterLiveView:New(self.roleRoot,pointId)
self:SetWalkDir(self.dirList[1])
2021-04-22 18:13:28 +08:00
end
function SingleStoryPlayerView:SetRoads1(data)
2021-04-26 18:29:47 +08:00
self.playerLiveView = PlayerLiveView:New(self.roleRoot,2,{
skin = PlayerManager.GetPlayerSkin(),
sex = NameManager.roleSex,
ride = 0,
designation = 0,
})
2021-04-26 09:41:41 +08:00
self.playerLiveView:OnOpen(GetPlayerRoleSingleConFig().Scale14)
2021-04-22 18:13:28 +08:00
self.playerLiveView.name = "npc"
2021-04-26 09:41:41 +08:00
--PlayUIAnim(self.gameObject)
2021-04-26 18:29:47 +08:00
local index = 0
2021-04-26 09:41:41 +08:00
for i = 1 ,#data do
if tonumber(data[i][1]) and tonumber(data[i][1]) == 0 then
index = index + 1
if not self.roadsList[index] then
self.roadsList[index] = {}
end
2021-04-26 18:29:47 +08:00
if not self.dirList[index] then
self.dirList[index] = tonumber(data[i][2]) or 1
end
2021-04-26 09:41:41 +08:00
else
local road = {}
road.indexType = tonumber(data[i][1]) -- 0 怪 1 人 2 地图
local vecs = string.split(data[i][2],',')
road.vec = Vector3.New(tonumber(vecs[1]),tonumber(vecs[2]),tonumber(vecs[3]))
if tonumber(data[i][3]) and tonumber(data[i][3]) > 0 then
local event = {}
event.eventType = tonumber(data[i][3])
event.groups = {}
for j = 4,#data[i] do
table.insert(event.groups,tonumber(data[i][j]))
end
road.event = event
end
table.insert(self.roadsList[index],road)
end
2021-04-22 18:13:28 +08:00
end
2021-04-27 19:51:40 +08:00
-- for k,v in ipairs(self.roadsList) do
2021-05-13 16:32:40 +08:00
-- --LogGreen("Player k:"..k.." dirList:"..self.dirList[k])
2021-04-27 19:51:40 +08:00
-- for n,m in ipairs(v) do
2021-05-13 16:32:40 +08:00
-- --LogGreen("Player k:"..k.." n:"..n.." vec:"..tostring(m.vec))
2021-04-27 19:51:40 +08:00
-- end
-- end
2021-04-26 18:29:47 +08:00
self.startPos = self.roadsList[1][1].vec
self:SetWalkDir(self.dirList[1])
2021-04-22 18:13:28 +08:00
end
2021-04-27 19:51:40 +08:00
function SingleStoryPlayerView:RunMap(isSetRoleDir)
2021-04-26 18:29:47 +08:00
self.roadsIndex = 0
2021-04-26 09:41:41 +08:00
self.state = 1
self.index = self.index + 1
self.roads = self.roadsList[self.index]
2021-04-29 15:35:18 +08:00
if self.dirList[self.index] ~= self.eventpoint then
self.eventpoint = self.dirList[self.index]
self:SetRoleDir()
end
2021-04-26 09:41:41 +08:00
if not self.roads or #self.roads < 1 then
self.state = 0
return
2021-04-22 18:13:28 +08:00
end
2021-04-26 09:41:41 +08:00
self.callList:Clear()
for i = #self.roads, 1, -1 do
local data = self.roads[i]
self.callList:Push(function ()
local go = self.gameObject
if data.indexType == 2 then
go = self.parent.map
end
2021-04-27 19:51:40 +08:00
local dis
2021-05-13 16:32:40 +08:00
----LogGreen("isSetRoleDir:"..isSetRoleDir)
2021-04-27 19:51:40 +08:00
if data.indexType == 2 or isSetRoleDir == 10 then
2021-04-29 15:35:18 +08:00
dis = math.abs(self:SetRoleDirAction(data.vec,go.transform.localPosition,false))
2021-04-27 19:51:40 +08:00
else
2021-04-29 15:35:18 +08:00
dis = math.abs(self:SetRoleDirAction(data.vec,go.transform.localPosition,true))
2021-04-27 19:51:40 +08:00
end
2021-04-26 09:41:41 +08:00
local speed = 0
if data.indexType ~= 0 then
speed = (1/600)*dis
else
speed = (1/550)*dis
end
2021-04-29 15:35:18 +08:00
self.tween = go.gameObject.transform:DOLocalMove(data.vec, speed, false):OnStart(function() end):OnUpdate(function() --TODO:测试速度
self:PlayStepSound(data.indexType,isSetRoleDir)
2021-04-22 18:13:28 +08:00
end):OnComplete(function ()
2021-04-26 09:41:41 +08:00
if data.event and data.event.eventType > 0 then
2021-04-26 18:29:47 +08:00
self:SetRoleDir()
2021-04-26 09:41:41 +08:00
self.parent:CheckTrigger(data.event,self)
else
self:StackPop()
end
2021-04-22 18:13:28 +08:00
end):SetEase(Ease.Linear)
end)
end
self:StackPop()
2021-04-26 09:41:41 +08:00
end
2021-05-13 15:49:39 +08:00
function SingleStoryPlayerView:PlaySound(time,Sound,curTimeStamp,timeStamp)
2021-05-13 16:32:40 +08:00
--LogGreen("curTimeStamp:"..curTimeStamp.." timeStamp:"..timeStamp.." curTimeStamp - timeStamp:"..curTimeStamp - timeStamp)
2021-05-13 15:49:39 +08:00
if curTimeStamp - timeStamp >= time then
2021-05-13 16:32:40 +08:00
--LogGreen("播放音效:"..Sound)
2021-05-13 15:49:39 +08:00
SoundManager.PlaySound(Sound)
return true
end
return false
end
function SingleStoryPlayerView:PlayStepSound(indexType,isSetRoleDir)
2021-05-13 16:32:40 +08:00
self.curTimeStamp = GetTimeStamp()
2021-05-13 15:49:39 +08:00
if indexType == 0 then
2021-05-13 16:32:40 +08:00
self.isSet = self:PlaySound(0.5,(isSetRoleDir == 10 and SoundConfig.STORY_VOICE_1_4 or SoundConfig.STORY_FOOT_1_2),self.curTimeStamp,_PlayTimeStamp[0])
2021-05-13 15:49:39 +08:00
if self.isSet then
2021-05-13 16:32:40 +08:00
_PlayTimeStamp[0] = self.curTimeStamp
2021-05-13 15:49:39 +08:00
end
2021-05-13 16:32:40 +08:00
--LogGreen("_PlayTimeStamp[0]:".._PlayTimeStamp[0])
2021-05-13 15:49:39 +08:00
elseif indexType == 1 then
2021-05-13 16:32:40 +08:00
self.isSet = self:PlaySound(0.2,SoundConfig.STORY_FOOT_1_1,self.curTimeStamp,_PlayTimeStamp[1])
2021-05-13 15:49:39 +08:00
if self.isSet then
2021-05-13 16:32:40 +08:00
_PlayTimeStamp[1] = self.curTimeStamp
2021-05-13 15:49:39 +08:00
end
else
2021-05-13 16:32:40 +08:00
self.isSet = self:PlaySound(0.5,(isSetRoleDir == 10 and SoundConfig.STORY_VOICE_1_4 or SoundConfig.STORY_FOOT_1_2),self.curTimeStamp,_PlayTimeStamp[0])
2021-05-13 15:49:39 +08:00
if self.isSet then
2021-05-13 16:32:40 +08:00
_PlayTimeStamp[0] = self.curTimeStamp
2021-05-13 15:49:39 +08:00
end
2021-05-13 16:32:40 +08:00
--LogGreen("_PlayTimeStamp[0]:".._PlayTimeStamp[0])
self.isSet = self:PlaySound(0.2,SoundConfig.STORY_FOOT_1_1,self.curTimeStamp,_PlayTimeStamp[1])
2021-05-13 15:49:39 +08:00
if self.isSet then
2021-05-13 16:32:40 +08:00
_PlayTimeStamp[1] = self.curTimeStamp
2021-05-13 15:49:39 +08:00
end
end
end
2021-04-26 09:41:41 +08:00
-- 角色相关
2021-04-26 18:29:47 +08:00
function SingleStoryPlayerView:SetRoleDirAction(pos,go,indexType)
2021-04-29 15:35:18 +08:00
local du = pos.x - go.x
local dy = pos.y - go.y
2021-04-26 09:41:41 +08:00
if du > 0 then
2021-04-27 19:51:40 +08:00
if indexType then
2021-04-26 18:29:47 +08:00
self:SetWalkDir(WALK_DIR.RUN_RIGHT)
2021-04-27 19:51:40 +08:00
self.eventpoint = 4
2021-04-26 18:29:47 +08:00
end
2021-04-26 09:41:41 +08:00
return du
elseif du < 0 then
2021-04-27 19:51:40 +08:00
if indexType then
2021-04-26 18:29:47 +08:00
self:SetWalkDir(WALK_DIR.RUN_LEFT)
2021-04-27 19:51:40 +08:00
self.eventpoint = 3
2021-04-26 18:29:47 +08:00
end
2021-04-26 09:41:41 +08:00
return du
elseif dy < 0 then
2021-04-27 19:51:40 +08:00
if indexType then
2021-04-26 18:29:47 +08:00
self:SetWalkDir(WALK_DIR.RUN_DOWN)
2021-04-27 19:51:40 +08:00
self.eventpoint = 1
2021-04-26 18:29:47 +08:00
end
2021-04-26 09:41:41 +08:00
return dy
elseif dy > 0 then
2021-04-27 19:51:40 +08:00
if indexType then
2021-04-26 18:29:47 +08:00
self:SetWalkDir(WALK_DIR.RUN_UP)
2021-04-27 19:51:40 +08:00
self.eventpoint = 2
2021-04-26 18:29:47 +08:00
end
2021-04-26 09:41:41 +08:00
return dy
end
return 0
end
function SingleStoryPlayerView:SetWalkDir(dir)
self.playerLiveView:SetWalkDir(dir)
2021-04-22 18:13:28 +08:00
end
-- 角色停止行走时的朝向
2021-04-26 18:29:47 +08:00
function SingleStoryPlayerView:SetRoleDir()
2021-04-22 18:13:28 +08:00
self:SetWalkDir(self.eventpoint)
end
function SingleStoryPlayerView:StackPop()
if self.callList:Count() > 0 then
2021-04-26 18:29:47 +08:00
self.roadsIndex = self.roadsIndex + 1
2021-04-22 18:13:28 +08:00
self.callList:Pop()()
2021-04-26 09:41:41 +08:00
else
self.state = 0
2021-04-22 18:13:28 +08:00
end
end
function SingleStoryPlayerView:StopAction()
2021-04-29 15:35:18 +08:00
self.state = 0
self.callList:Clear()
self.roadsIndex = #self.roads
if self.roadsIndex < 1 then
self:SetRoleDir()
else
local vec = self:SetRoleDirAction(self.roads[self.roadsIndex].vec,self.roads[1].vec,true)
if vec == 0 then
self.eventpoint = self.dirList[self.index]
self:SetWalkDir()
end
self.gameObject.transform.localPosition = self.roads[self.roadsIndex].vec
end
2021-04-22 18:13:28 +08:00
end
function SingleStoryPlayerView:OnClose()
2021-04-26 09:41:41 +08:00
self.roadsList = {}
self.roads = {}
self.startPos = {}
self.index = 1 --当前应该走哪一段 self.roads = self.roadsList[self.index] 第一段是出生点 从第二段开始跑图
self.callList = Stack.New()
self.state = 0
if self.playerLiveView then
self.playerLiveView:OnClose()
end
2021-04-29 15:35:18 +08:00
if self.tween then
self.tween:Kill()
end
2021-05-13 16:32:40 +08:00
--LogGreen("_PlayTimeStamp[0]:".._PlayTimeStamp[0])
_PlayTimeStamp = {
[0] = 0,
[1] = 0,
}
2021-04-26 09:41:41 +08:00
end
function SingleStoryPlayerView:CheckState()
2021-05-13 16:32:40 +08:00
----LogGreen("self.state:"..self.state.." self.index:"..self.roadsIndex.." self.playerType:"..self.playerType.." #self.roadsList:"..#self.roadsList[self.index])
2021-04-26 18:29:47 +08:00
if self.state == 1 or self.roadsIndex < (self.roadsList[self.index] and #self.roadsList[self.index] or 0) then
2021-04-26 09:41:41 +08:00
return true
end
2021-04-26 18:29:47 +08:00
return false
2021-04-22 18:13:28 +08:00
end
2021-04-26 09:41:41 +08:00
2021-04-22 18:13:28 +08:00
return SingleStoryPlayerView