JumpOneModel = JumpOneModel or BaseClass(BaseVo, true)
|
|
local JumpOneModel = JumpOneModel
|
|
|
|
JumpOneModel.REQUEST_INFO = "JumpOneModel.REQUEST_INFO"--请求协议
|
|
JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW = "JumpOneModel.OPEN_JUMP_ONE_MAIN_VIEW"--打开活动主界面
|
|
JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW = "JumpOneModel.OPEN_JUMP_ONE_SCENE_VIEW"--打开跳一跳场景界面
|
|
JumpOneModel.JUMP_UPDATE_BASEINFO = "JumpOneModel.JUMP_UPDATE_BASEINFO"--跳一跳刷新匹配信息
|
|
JumpOneModel.JUMP_UPDATE_MATCHINFO = "JumpOneModel.JUMP_UPDATE_MATCHINFO"--跳一跳刷新匹配信息
|
|
JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS = "JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS"--跳一跳刷新匹配队员
|
|
JumpOneModel.JUMP_UPDATE_GAME_INFO = "JumpOneModel.JUMP_UPDATE_GAME_INFO"--跳一跳游戏信息
|
|
JumpOneModel.JUMP_UPDATE_READY_TIME = "JumpOneModel.JUMP_UPDATE_READY_TIME"--跳一跳准备倒计时
|
|
JumpOneModel.JUMP_ADD_STEP = "JumpOneModel.JUMP_ADD_STEP"--跳一跳增加跳台
|
|
JumpOneModel.JUMP_START_JUMP = "JumpOneModel.JUMP_START_JUMP"--跳一跳开始跳跃
|
|
JumpOneModel.JUMP_UPDATE_MEMBER_INFO = "JumpOneModel.JUMP_UPDATE_MEMBER_INFO"--跳一跳更新玩家信息
|
|
JumpOneModel.JUMP_OFF_LINE_UPDATE = "JumpOneModel.JUMP_OFF_LINE_UPDATE"--跳一跳离线更新
|
|
JumpOneModel.JUMP_ON_LINE_UPDATE = "JumpOneModel.JUMP_ON_LINE_UPDATE"--跳一跳上线更新
|
|
JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW = "JumpOneModel.OPEN_JUMP_ONE_RESULT_VIEW"--跳一跳上结算界面
|
|
JumpOneModel.JUMP_END_NOTIFY = "JumpOneModel.JUMP_END_NOTIFY"--跳一跳跳跃结果通知
|
|
JumpOneModel.JUMP_GAME_END_NOTIFY = "JumpOneModel.JUMP_GAME_END_NOTIFY"--跳一跳游戏结束
|
|
JumpOneModel.JUMP_GAME_RESULT_NOTIFY = "JumpOneModel.JUMP_GAME_RESULT_NOTIFY"--跳一跳游戏结算
|
|
|
|
local GameMath_GetDistance = GameMath.GetDistance
|
|
|
|
function JumpOneModel:__init()
|
|
JumpOneModel.Instance = self
|
|
self:Reset()
|
|
end
|
|
|
|
JumpOneModel.STEP_START_ID = 1000
|
|
|
|
JumpOneModel.SCENE_HEIGHT = 1.1
|
|
|
|
JumpOneModel.GAME_STATE =
|
|
{
|
|
WAIT = 1,
|
|
READY = 2,
|
|
GAME = 3,
|
|
END = 4,
|
|
}
|
|
|
|
JumpOneModel.JUMP_TOUCH_STATE =
|
|
{
|
|
NONE = 1,
|
|
DOWN = 2,
|
|
UP = 3,
|
|
END = 4,
|
|
}
|
|
|
|
JumpOneModel.PLAYER_STATE =
|
|
{
|
|
OFF_LINE = 0, --离线
|
|
ON_LINE = 1, --正常在线
|
|
WAITING = 2, --等待进场
|
|
GAME_OUT = 3, --已经淘汰
|
|
}
|
|
|
|
function JumpOneModel:Reset()
|
|
self.view_info = {}--界面信息
|
|
self.reward_info = {}--奖励列表
|
|
self.game_info = {} --游戏信息
|
|
self.act_cfg = {} --活动配置
|
|
self.result_info = false--结算数据
|
|
self.is_quit_game = false--是否手动退出
|
|
end
|
|
|
|
function JumpOneModel:getInstance()
|
|
if JumpOneModel.Instance == nil then
|
|
JumpOneModel.Instance = JumpOneModel.New()
|
|
end
|
|
return JumpOneModel.Instance
|
|
end
|
|
|
|
--检测竞榜和图标是否需要开启
|
|
function JumpOneModel:SetActCfg(vo)
|
|
self.act_cfg = {}
|
|
self.act_cfg[vo.sub_type] = vo
|
|
end
|
|
|
|
--获取活动配置
|
|
function JumpOneModel:GetActCfg()
|
|
for k,v in pairs(self.act_cfg) do
|
|
return v
|
|
end
|
|
end
|
|
|
|
--检测竞榜和图标是否需要开启
|
|
function JumpOneModel:CheckJumpOneIconBoolOpen()
|
|
if #self.act_cfg == 0 then
|
|
return
|
|
end
|
|
if not GetModuleIsOpen(331, 121, true) then
|
|
return
|
|
end
|
|
local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE
|
|
for k,v in pairs(self.act_cfg) do
|
|
local icon_sub_type = base_type*1000 + v.sub_type
|
|
if v.sub_type >= 10001 then
|
|
icon_sub_type = base_type*100000 + v.sub_type
|
|
end
|
|
local cfg = v
|
|
if cfg and self.view_info and self.view_info.base_info and self.view_info.base_info.end_time then
|
|
local server_time = TimeUtil:getServerTime()
|
|
local is_open = self.view_info.base_info.end_time - server_time
|
|
if is_open > 0 then
|
|
ActivityIconManager:getInstance():addIcon(icon_sub_type, is_open)
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
|
|
end
|
|
else
|
|
ActivityIconManager:getInstance():deleteIcon(icon_sub_type)
|
|
end
|
|
end
|
|
end
|
|
|
|
--检测竞榜和图标是否需要显示匹配
|
|
function JumpOneModel:CheckJumpOneIconMatch()
|
|
if #self.act_cfg == 0 then
|
|
return
|
|
end
|
|
if not GetModuleIsOpen(331, 121, true) then
|
|
return
|
|
end
|
|
local base_type = CustomActivityModel.CustomActBaseType.JUMP_ONE
|
|
for k,v in pairs(self.act_cfg) do
|
|
local sub_base_type = base_type*1000
|
|
local cfg = v
|
|
if cfg then
|
|
GlobalEventSystem:Fire(ActivityIconManager.UPDATE_FUNCICON_SPECIAL_TIPS, sub_base_type+v.sub_type)
|
|
end
|
|
end
|
|
end
|
|
|
|
--设置活动开放信息
|
|
function JumpOneModel:SetOpenInfo(vo)
|
|
self.view_info.base_info = self.view_info.base_info or {}
|
|
self.view_info.base_info.end_time = vo.end_time
|
|
self:CheckJumpOneIconBoolOpen()
|
|
end
|
|
|
|
--设置基本信息
|
|
function JumpOneModel:SetJumoOneInfo(vo)
|
|
self.view_info = self.view_info or {}
|
|
self.view_info.base_info = vo
|
|
self:CheckJumpOneIconBoolOpen()
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_BASEINFO)
|
|
end
|
|
|
|
--设置匹配信息
|
|
function JumpOneModel:SetJumoOneMatchInfo(vo)
|
|
self.view_info = self.view_info or {}
|
|
self.view_info.match_info = vo
|
|
self:CheckJumpOneIconMatch()
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_MATCHINFO)
|
|
end
|
|
|
|
--当前是否在匹配状态
|
|
function JumpOneModel:IsInJumoOneMatchState()
|
|
if self.view_info and self.view_info.match_info then
|
|
return self.view_info.match_info.status == 1
|
|
end
|
|
return false
|
|
end
|
|
|
|
--设置匹配队员列表
|
|
function JumpOneModel:SetJumoOneMatchMembers(vo)
|
|
self.view_info = self.view_info or {}
|
|
self.view_info.match_members = vo
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_MATCH_MEMBERS)
|
|
end
|
|
|
|
--当前是否在匹配状态
|
|
function JumpOneModel:GetJumoOneMatchMembers()
|
|
if self.view_info and self.view_info.match_members then
|
|
return self.view_info.match_members.role_list
|
|
end
|
|
return nil
|
|
end
|
|
|
|
--清除匹配状态
|
|
function JumpOneModel:ResetJumoOneMatchInfo()
|
|
self.view_info = {}
|
|
self.game_info = {}
|
|
self:CheckJumpOneIconMatch()
|
|
end
|
|
|
|
--设置跳一跳开始倒计时时间
|
|
function JumpOneModel:SetJumpOneReadyTIme(vo)
|
|
self.game_info = self.game_info or {}
|
|
self.game_info.ready_info = vo
|
|
self.game_info.ready_info.left_time = vo.time - TimeUtil:getServerTime() + 1
|
|
self.game_info.game_state = JumpOneModel.GAME_STATE.READY
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_READY_TIME)
|
|
end
|
|
|
|
--设置跳一跳游戏信息
|
|
function JumpOneModel:SetJumpOneGameInfo(vo)
|
|
self.game_info = {}
|
|
self.game_info.game_info = vo
|
|
self.game_info.game_state = JumpOneModel.GAME_STATE.WAIT
|
|
local step_vo =
|
|
{
|
|
x = vo.x,
|
|
y = vo.y,
|
|
picture = vo.picture,
|
|
radius = vo.radius,
|
|
is_new = false,
|
|
}
|
|
vo.step_list =
|
|
{
|
|
[1] = step_vo,
|
|
}
|
|
if vo and #vo.step_list > 0 then
|
|
for i,v in ipairs(vo.step_list) do
|
|
v.step_id = JumpOneModel.STEP_START_ID + i
|
|
Scene.Instance:CreateJumpOneStep(v, v.step_id)
|
|
end
|
|
end
|
|
local role_list = vo.role_list
|
|
for i,v in ipairs(role_list) do
|
|
if v.life ~= 0 then
|
|
if v.online == 1 then
|
|
v.player_state = JumpOneModel.PLAYER_STATE.ONELINE
|
|
else
|
|
v.player_state = JumpOneModel.PLAYER_STATE.WAITING
|
|
end
|
|
else
|
|
v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT
|
|
end
|
|
end
|
|
self.game_info.game_info.role_list = role_list
|
|
self:SyncAllRolePos(vo.x, vo.y)
|
|
self:UpdateMemberVisible()
|
|
self.is_quit_game = false
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_GAME_INFO)
|
|
end
|
|
|
|
--设置跳一跳新跳台
|
|
function JumpOneModel:JumpOneAddNewStep(vo)
|
|
if not vo then
|
|
return
|
|
end
|
|
local step_vo =
|
|
{
|
|
x = vo.x,
|
|
y = vo.y,
|
|
picture = vo.picture,
|
|
radius = vo.radius,
|
|
is_end = vo.is_end,
|
|
is_new = true,
|
|
}
|
|
self.game_info.game_info = self.game_info.game_info or {}
|
|
self.game_info.game_info.step_list = self.game_info.game_info.step_list or {}
|
|
local list = self.game_info.game_info.step_list
|
|
local step_id = JumpOneModel.STEP_START_ID + 1
|
|
if #list >= 5 then
|
|
local step_info = list[1]
|
|
Scene.Instance:DeleteJumpOneStep(step_info.step_id)
|
|
table.remove(list, 1)
|
|
end
|
|
if #list > 0 then
|
|
step_id = list[#list].step_id + 1
|
|
end
|
|
step_vo.step_id = step_id
|
|
table.insert(list , step_vo)
|
|
self.game_info.game_info.step_list = list
|
|
Scene.Instance:CreateJumpOneStep(step_vo, step_vo.step_id)
|
|
self:UpdateMemberDir(vo.x, vo.y)
|
|
end
|
|
|
|
--设置跳一跳新跳台
|
|
function JumpOneModel:StartJump(vo)
|
|
if not vo then
|
|
return
|
|
end
|
|
self.game_info.is_sync_pos = false
|
|
self.game_info.game_info = self.game_info.game_info or {}
|
|
self.game_info.game_info.cur_jump_info = vo
|
|
local left_jump_time = vo.jump_time - TimeUtil:getServerTime()
|
|
local max_jump_time = self:GetMaxJumpTime()
|
|
self.game_info.game_info.cur_jump_info.left_jump_time = left_jump_time > max_jump_time and max_jump_time or left_jump_time
|
|
self.game_info.game_info.cur_jump_info.max_jump_time = max_jump_time
|
|
self.game_info.game_info.round = vo.round
|
|
self.game_info.game_state = JumpOneModel.GAME_STATE.GAME
|
|
self:SetJumpTouchState(JumpOneModel.JUMP_TOUCH_STATE.NONE)
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role then
|
|
local pos_x, pos_y = main_role:GetRealPos()
|
|
self:SyncAllRolePos(pos_x, pos_y)
|
|
end
|
|
self:UpdateMemberVisible()
|
|
self:Fire(JumpOneModel.JUMP_START_JUMP)
|
|
|
|
end
|
|
|
|
--是否是我的回合
|
|
function JumpOneModel:IsMyTurn()
|
|
local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info
|
|
if cur_jump_info and RoleManager.Instance.mainRoleInfo.role_id == cur_jump_info.role_id then
|
|
return true
|
|
end
|
|
end
|
|
|
|
--获取当前回合
|
|
function JumpOneModel:GetCurTurn()
|
|
if self.game_info.game_info and self.game_info.game_info.round then
|
|
return self.game_info.game_info.round
|
|
end
|
|
return 1
|
|
end
|
|
|
|
--跳一跳获取房间id
|
|
function JumpOneModel:GetRoomId()
|
|
return self.game_info.game_info and self.game_info.game_info.room_id or 1
|
|
end
|
|
|
|
--跳一跳跳跃处理
|
|
function JumpOneModel:JumpOneDoJumpHandle(role_id, jump_time)
|
|
local role = Scene.Instance:GetRole(role_id)
|
|
local last_step_info = self:GetLastStepInfo()
|
|
if role and last_step_info then
|
|
if jump_time > self:GetJumpMaxTouchTime() then
|
|
jump_time = self:GetJumpMaxTouchTime()
|
|
end
|
|
local is_success = self:CheckJumpResult(role, jump_time, last_step_info.x, last_step_info.y)
|
|
local distance = nil
|
|
local dir = role.direction
|
|
local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time)
|
|
local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist))
|
|
local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
|
|
local function onJumpEnd()
|
|
self:Fire(JumpOneModel.JUMP_END_NOTIFY, is_success and 1 or 0)
|
|
end
|
|
role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success)
|
|
if self:IsMyTurn() then
|
|
self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success)
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--跳一跳跳跃处理
|
|
function JumpOneModel:JumpOneDoJumpHandleFromServer(role_id, jump_time,status, pos_x, pos_y)
|
|
local last_step_info = self:GetLastStepInfo()
|
|
local role_list = self:GetGameMemberInfo()
|
|
if last_step_info and role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
if self:IsMyTurn() then
|
|
if status == 1 and v.role_id ~= RoleManager.Instance.mainRoleInfo.role_id then
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
role:SetRealPos(pos_x, pos_y)
|
|
end
|
|
end
|
|
else
|
|
if v.role_id == role_id then
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
local is_success = status == 1
|
|
local distance = nil
|
|
local dir = role.direction
|
|
local dist,move_hspeed,move_vspeed = role:GetGameJumpDistanceAndSpeed(jump_time)
|
|
local end_pos = co.TableXY(math.floor(role.real_pos.x + dir.x * dist) , math.floor(role.real_pos.y + dir.y * dist))
|
|
local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
|
|
local function onJumpEnd()
|
|
if status == 1 then
|
|
--如果触发到了下一个传送点,则同步到下一个传送点的位置
|
|
print('Cat:JumpOneModel.lua[353] data', self.game_info.is_sync_pos, pos_x, pos_y)
|
|
if self.game_info.is_sync_pos then
|
|
PrintTable(self.game_info.is_sync_pos)
|
|
self:SyncAllRolePos(self.game_info.is_sync_pos.x, self.game_info.is_sync_pos.y)
|
|
else
|
|
self:SyncAllRolePos(pos_x, pos_y)
|
|
end
|
|
end
|
|
self:Fire(JumpOneModel.JUMP_END_NOTIFY, status)
|
|
end
|
|
role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success, true)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--等待玩家跳跃完成,在同步位置
|
|
function JumpOneModel:SyncAllRolePos(x, y )
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
role:SetRealPos(x, y)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--等待玩家跳跃完成,在同步位置
|
|
function JumpOneModel:SyncTargetRolePos(x, y,role_id)
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
if v.role_id == role_id then
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
role:SetRealPos(x, y)
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
--跳一跳完美跳跃 *********** 内挂
|
|
function JumpOneModel:JumpOneDoMvpJumpHandle(role_id)
|
|
local role = Scene.Instance:GetRole(role_id)
|
|
local last_step_info = self:GetLastStepInfo()
|
|
if role and last_step_info then
|
|
local is_success = true
|
|
local end_pos = co.TableXY(last_step_info.x , last_step_info.y)
|
|
local start_pos = co.TableXY(role.real_pos.x, role.real_pos.y)
|
|
local dis = GameMath_GetDistance(end_pos.x, end_pos.y, start_pos.x, start_pos.y, true)
|
|
local move_hspeed ,move_vspeed, jump_time = role:GetGameMvpJumpSpeedAndTime(dis)
|
|
local function onJumpEnd()
|
|
self:Fire(JumpOneModel.JUMP_END_NOTIFY, 1)
|
|
end
|
|
role:DoGameFlyJump(end_pos,start_pos,move_hspeed,move_vspeed,onJumpEnd,not is_success)
|
|
jump_time = math.floor(jump_time * 1000)
|
|
if self:IsMyTurn() then
|
|
self:SyscJumpHandle(end_pos.x, end_pos.y, jump_time, is_success)
|
|
end
|
|
--GlobalEventSystem:Fire(SceneEventType.GAME_FLY_JUMP, jump_time,nil,nil,nil,nil,is_fail)
|
|
end
|
|
end
|
|
|
|
--跳一跳同步跳跃
|
|
function JumpOneModel:SyscJumpHandle(pos_x, pos_y, jump_time, is_success)
|
|
local room_id = self:GetRoomId()
|
|
local status = is_success and 1 or 0
|
|
local ticket = string.lower(Util.md5(room_id .. pos_x .. pos_y .. status .. jump_time .. "666JKLSDFRTYABJK666"))
|
|
local sub_type = self:GetActSubType()
|
|
self:Fire(JumpOneModel.REQUEST_INFO, 45910,room_id, pos_x, pos_y, status, jump_time, ticket, sub_type)
|
|
end
|
|
|
|
--跳一跳,服务器返回起跳准备处理
|
|
function JumpOneModel:JumpOneReadyJumpHandleFromServer(role_id)
|
|
--每次起跳前,同步下所有人的坐标和朝向
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role then
|
|
local pos_x, pos_y = main_role:GetRealPos()
|
|
self:SyncAllRolePos(pos_x, pos_y)
|
|
end
|
|
|
|
local last_step_info = self:GetLastStepInfo()
|
|
if last_step_info then
|
|
self:UpdateMemberDir(last_step_info.x, last_step_info.y)
|
|
end
|
|
self:JumpOneReadyJumpHandle(role_id, true)
|
|
end
|
|
|
|
|
|
--跳一跳起跳跳跃处理
|
|
function JumpOneModel:JumpOneReadyJumpHandle(role_id, from_server)
|
|
if from_server and role_id == RoleManager.Instance.mainRoleInfo.role_id then
|
|
return
|
|
end
|
|
local role = Scene.Instance:GetRole(role_id)
|
|
if role then
|
|
role:DoGameReadyJump()
|
|
end
|
|
end
|
|
|
|
--跳一跳起跳跳跃处理
|
|
function JumpOneModel:JumpOneJumpHandle(role_id)
|
|
local role = Scene.Instance:GetRole(role_id)
|
|
if role then
|
|
role:DoGameReadyJump()
|
|
end
|
|
end
|
|
|
|
--跳一跳摔倒处理
|
|
function JumpOneModel:JumpOneJumpDownHandle(role_id)
|
|
local role = Scene.Instance:GetRole(role_id)
|
|
if role then
|
|
role:DoGameDownJump()
|
|
end
|
|
end
|
|
|
|
--跳一跳更新玩家信息
|
|
function JumpOneModel:UpdateMemberInfo(vo)
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
if v.role_id == vo.role_id then
|
|
v.life = vo.life
|
|
if v.life == 0 then
|
|
v.player_state = JumpOneModel.PLAYER_STATE.GAME_OUT
|
|
end
|
|
self:Fire(JumpOneModel.JUMP_UPDATE_MEMBER_INFO)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳更新玩家信息
|
|
function JumpOneModel:GetGameMemberInfo()
|
|
local list = {}
|
|
if self.game_info and self.game_info.game_info then
|
|
list = self.game_info.game_info.role_list
|
|
end
|
|
return list
|
|
end
|
|
|
|
--跳一跳更新玩家信息
|
|
function JumpOneModel:GetGameMyInfo()
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
if v.role_id == RoleManager.Instance.mainRoleInfo.role_id then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳更新玩家信息
|
|
function JumpOneModel:UpdateMemberDir(target_x, target_y)
|
|
local role_list = self:GetGameMemberInfo()
|
|
local dir2 = Vector2.New(0, 1)
|
|
if not role_list or #role_list == 0 then
|
|
return
|
|
end
|
|
for i,v in ipairs(role_list) do
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
local pos_x, pos_y = role:GetRealPos()
|
|
local dir1 = Vector2.New(target_x - pos_x , target_y - pos_y )
|
|
dir1 = dir1:Normalize()
|
|
local rotate_y = Vector2.Angle(dir1, dir2)
|
|
role:SetDirection(Vector2.New(pos_x, pos_y), Vector2.New(target_x, target_y), true)
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳检测跳跃成功还是失败
|
|
function JumpOneModel:CheckJumpResult(role, jump_time, target_x, target_y)
|
|
if role then
|
|
local cur_jump_info = self:GetCurJumpInfo()
|
|
local last_step_info = self:GetLastStepInfo()
|
|
local step_radius = last_step_info.radius / 100 / 2 + 1
|
|
local dist = role:GetGameJumpDistanceAndSpeed(jump_time)
|
|
local dir = role.direction
|
|
local end_pos = co.TableXY(role.real_pos.x + dir.x * dist, role.real_pos.y + dir.y * dist)
|
|
local pos_1_x = end_pos.x / MainCamera.PixelsToUnits
|
|
local pos_1_y = end_pos.y / MainCamera.PixelsToUnits
|
|
local pos_2_x = target_x / MainCamera.PixelsToUnits
|
|
local pos_2_y = target_y / MainCamera.PixelsToUnits
|
|
local length = GameMath_GetDistance(pos_1_x, pos_1_y, pos_2_x, pos_2_y, false)
|
|
print('Cat:JumpOneModel.lua[539] cur pos ', pos_1_x, pos_1_y, pos_2_x, pos_2_y)
|
|
print('Cat:JumpOneModel.lua[332] length', length, step_radius, length <= step_radius)
|
|
return length <= step_radius
|
|
end
|
|
return false
|
|
end
|
|
|
|
|
|
--跳一跳获取当前跳跃的信息
|
|
function JumpOneModel:GetCurJumpInfo()
|
|
local cur_jump_info = self.game_info.game_info and self.game_info.game_info.cur_jump_info or false
|
|
return cur_jump_info
|
|
end
|
|
|
|
--跳一跳获取最新一个跳台的信息
|
|
function JumpOneModel:GetLastStepInfo()
|
|
local step_info
|
|
if self.game_info.game_info and self.game_info.game_info.step_list then
|
|
local list = self.game_info.game_info.step_list
|
|
step_info = list[#list]
|
|
end
|
|
return step_info
|
|
end
|
|
|
|
--跳一跳清除所有跳台
|
|
function JumpOneModel:ClearAllStep()
|
|
local step_list = self.game_info.game_info and self.game_info.game_info.step_list or false
|
|
if step_list and #step_list > 0 then
|
|
for k,v in pairs(step_list) do
|
|
Scene.Instance:DeleteJumpOneStep(v.step_id)
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳内部切场景
|
|
function JumpOneModel:SyncGameScene(vo)
|
|
self.game_info.is_sync_pos = vo
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role and vo then
|
|
main_role:SetRealPos(vo.x, vo.y)
|
|
GlobalEventSystem:Fire(SceneEventType.MOVEREQUEST, vo.x, vo.y, MOVE_TYPE.BLINK)
|
|
end
|
|
end
|
|
|
|
--跳一跳更新玩家的显示状态
|
|
function JumpOneModel:UpdateMemberVisible()
|
|
local show_role_id = false
|
|
local game_state = self:GetGameState()
|
|
if game_state == JumpOneModel.GAME_STATE.GAME and not self.is_quit_game then
|
|
local cur_jump_info = self:GetCurJumpInfo()
|
|
show_role_id = cur_jump_info.role_id ~= 0 and cur_jump_info.role_id or RoleManager.Instance.mainRoleInfo.role_id
|
|
|
|
else
|
|
show_role_id = RoleManager.Instance.mainRoleInfo.role_id
|
|
|
|
end
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for k,v in pairs(role_list) do
|
|
local role = Scene.Instance:GetRole(v.role_id)
|
|
if role then
|
|
role:SetModelHideFlag(SceneObj.ModelHideFlag.Story, v.role_id ~= show_role_id)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳获取游戏状态
|
|
function JumpOneModel:GetGameState()
|
|
local game_state = self.game_info and self.game_info.game_state or JumpOneModel.GAME_STATE.WAIT
|
|
return game_state
|
|
end
|
|
|
|
--跳一跳当前跳跃按下的状态
|
|
function JumpOneModel:GetJumpTouchState()
|
|
return self.game_info.game_info and self.game_info.game_info.jump_touch_state and self.game_info.game_info.jump_touch_state or JumpOneModel.JUMP_TOUCH_STATE.NONE
|
|
end
|
|
|
|
--跳一跳当前跳跃按下的状态
|
|
function JumpOneModel:SetJumpTouchState(state)
|
|
self.game_info.game_info = self.game_info.game_info or {}
|
|
self.game_info.game_info.jump_touch_state = state
|
|
end
|
|
|
|
--跳一跳离线更新
|
|
function JumpOneModel:SetOffLinePlayer(vo)
|
|
self.game_info.off_line_info = self.game_info.off_line_info or {}
|
|
self.game_info.off_line_info[vo.role_id] = vo
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for i,v in ipairs(role_list) do
|
|
if v.role_id == vo.role_id then
|
|
if v.life ~= 0 then
|
|
v.player_state = JumpOneModel.PLAYER_STATE.OFF_LINE
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
PrintTable(self.game_info.off_line_info)
|
|
self:Fire(JumpOneModel.JUMP_OFF_LINE_UPDATE)
|
|
end
|
|
|
|
--跳一跳上线更新
|
|
function JumpOneModel:SetOnLinePlayer(vo)
|
|
local role_list = self:GetGameMemberInfo()
|
|
if role_list and #role_list > 0 then
|
|
for i,v in ipairs(role_list) do
|
|
if v.role_id == vo.role_id then
|
|
if v.life ~= 0 then
|
|
v.player_state = JumpOneModel.PLAYER_STATE.ON_LINE
|
|
end
|
|
break
|
|
end
|
|
end
|
|
end
|
|
--玩家上线时,同步一次这个玩家的状态
|
|
local main_role = Scene.Instance.main_role
|
|
if main_role then
|
|
local pos_x, pos_y = main_role:GetRealPos()
|
|
self:SyncTargetRolePos(pos_x, pos_y, vo.role_id)
|
|
end
|
|
self:UpdateMemberVisible()
|
|
local last_step_info = self:GetLastStepInfo()
|
|
if last_step_info then
|
|
self:UpdateMemberDir(last_step_info.x, last_step_info.y)
|
|
end
|
|
self:Fire(JumpOneModel.JUMP_ON_LINE_UPDATE)
|
|
end
|
|
|
|
--跳一跳获取当前跳跃者的role_id
|
|
function JumpOneModel:GetCurjumperRoleId()
|
|
local cur_jump_info = self:GetCurJumpInfo()
|
|
local role_id = cur_jump_info and cur_jump_info.role_id or -1
|
|
return role_id
|
|
end
|
|
|
|
--跳一跳获取当前跳跃者的role_id
|
|
function JumpOneModel:GetPlayerStateByRoleId(role_id)
|
|
local player_state = JumpOneModel.PLAYER_STATE.ON_LINE
|
|
local member_list = self:GetGameMemberInfo()
|
|
if member_list and #member_list > 0 then
|
|
for i,v in ipairs(member_list) do
|
|
if v.role_id == role_id then
|
|
player_state = v.player_state
|
|
end
|
|
end
|
|
end
|
|
return player_state
|
|
end
|
|
|
|
|
|
--跳一跳获取跳跃者的信息
|
|
function JumpOneModel:GetPlayerInfoRoleId(role_id)
|
|
local member_list = self:GetGameMemberInfo()
|
|
if member_list and #member_list > 0 then
|
|
for i,v in ipairs(member_list) do
|
|
if v.role_id == role_id then
|
|
return v
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
--跳一跳获取玩家的命数
|
|
function JumpOneModel:GetPlayerLife(role_id)
|
|
local life_cnt = 0
|
|
local member_list = self:GetGameMemberInfo()
|
|
if member_list and #member_list > 0 then
|
|
for i,v in ipairs(member_list) do
|
|
if v.role_id == role_id then
|
|
life_cnt = v.life
|
|
end
|
|
end
|
|
end
|
|
return life_cnt
|
|
end
|
|
|
|
--跳一跳设置结算界面
|
|
function JumpOneModel:SetResultInfo(vo)
|
|
self.result_info = vo
|
|
self:Fire(JumpOneModel.JUMP_GAME_RESULT_NOTIFY)
|
|
end
|
|
|
|
--跳一跳游戏结束
|
|
function JumpOneModel:SetGameEnd(vo)
|
|
self.game_info.game_state = JumpOneModel.GAME_STATE.END
|
|
local time = vo.end_time - TimeUtil:getServerTime( )
|
|
self:Fire(JumpOneModel.JUMP_GAME_END_NOTIFY, time)
|
|
end
|
|
|
|
--跳一跳获取最少匹配时间
|
|
function JumpOneModel:GetMinMatchTime()
|
|
local time = 0
|
|
local cfg = Config.Jumpactkv
|
|
if cfg and cfg["jump_wait"] then
|
|
time = cfg["jump_wait"].value_content
|
|
end
|
|
return time
|
|
end
|
|
|
|
--跳一跳获取最少匹配人数
|
|
function JumpOneModel:GetMinMatchNum()
|
|
local num = 0
|
|
local cfg = Config.Jumpactkv
|
|
if cfg and cfg["jump_min_num"] then
|
|
num = cfg["jump_min_num"].value_content
|
|
end
|
|
return num
|
|
end
|
|
|
|
--跳跃最大蓄力时间
|
|
function JumpOneModel:GetJumpMaxTouchTime()
|
|
if not self.jump_max_touch_time then
|
|
local cfg = Config.Jumpactkv
|
|
if cfg and cfg["jump_max_second"] then
|
|
self.jump_max_touch_time = cfg["jump_max_second"].value_content
|
|
self.jump_max_touch_time = self.jump_max_touch_time * 1000
|
|
else
|
|
self.jump_max_touch_time = 4000
|
|
end
|
|
end
|
|
return self.jump_max_touch_time
|
|
end
|
|
|
|
|
|
--跳一跳最大跳跃操作时间
|
|
function JumpOneModel:GetMaxJumpTime()
|
|
if not self.max_jump_time then
|
|
local cfg = Config.Jumpactkv
|
|
if cfg and cfg["jump_time"] then
|
|
self.max_jump_time = cfg["jump_time"].value_content
|
|
else
|
|
time = 15
|
|
end
|
|
end
|
|
return self.max_jump_time
|
|
end
|
|
|
|
--获取角色的vo信息,用于不在线的玩家
|
|
function JumpOneModel:GetRoleVoByRoleId(role_id)
|
|
local role_list = self:GetGameMemberInfo()
|
|
local role_vo
|
|
if role_list and #role_list > 0 then
|
|
for i,v in ipairs(role_list) do
|
|
if v.role_id == role_id then
|
|
role_vo = v
|
|
end
|
|
end
|
|
end
|
|
return role_vo
|
|
end
|
|
|
|
--获取匹配开始时间
|
|
function JumpOneModel:GetMatchReadTime()
|
|
local time = 0
|
|
if self.view_info.match_members and self.view_info.match_members.begin_time ~= 0 then
|
|
time = self.view_info.match_members.begin_time - TimeUtil:getServerTime()
|
|
end
|
|
return time
|
|
end
|
|
|
|
--获取活动奖励
|
|
function JumpOneModel:GetlRewardList(base_type, sub_type)
|
|
if not self.reward_info or not self.reward_info[base_type] or not self.reward_info[base_type][sub_type] then
|
|
self.reward_info = self.reward_info or {}
|
|
local act_info = CustomActivityModel:getInstance():getOneActRewardList(base_type, sub_type)
|
|
if act_info then
|
|
local list = {}
|
|
for i=#act_info.reward_list,1,-1 do
|
|
local t = stringtotable(act_info.reward_list[i].reward)
|
|
table.insert(list, t[1])
|
|
end
|
|
self.reward_info = self.reward_info or {}
|
|
self.reward_info[base_type] = self.reward_info[base_type] or {}
|
|
self.reward_info[base_type][sub_type] = list
|
|
end
|
|
end
|
|
return self.reward_info and self.reward_info[base_type] and self.reward_info[base_type][sub_type] or {}
|
|
end
|
|
|
|
--获取活动开放
|
|
function JumpOneModel:GetOpenTime(open_time_table, last_time_table)
|
|
local str = ""
|
|
if not open_time_table or not last_time_table or open_time_table == 0 or #last_time_table == 0 then return end
|
|
for i=1,#open_time_table do
|
|
if str ~= "" then
|
|
str = str .. "\n"
|
|
end
|
|
local start_str = self:TimeTable2String(open_time_table[i])
|
|
local end_time_table =
|
|
{
|
|
[1] = tonumber(open_time_table[i][1]) + math.floor(tonumber(last_time_table[2]) / 3600),
|
|
[2] = tonumber(open_time_table[i][2]) + math.floor(tonumber(last_time_table[2]) % 3600),
|
|
}
|
|
|
|
local end_str = self:TimeTable2String(end_time_table)
|
|
local s = string.format("第%s场 %s ~%s", WordManager:getHanZiNumber(i), start_str, end_str)
|
|
str = str .. s
|
|
end
|
|
return str
|
|
end
|
|
|
|
--解析时间table
|
|
function JumpOneModel:TimeTable2String(time_table)
|
|
local str = ""
|
|
if time_table and time_table[1] and time_table[2] then
|
|
local h_s = tonumber(time_table[1]) > 10 and tostring(time_table[1]) or ("0" .. tostring(time_table[1]))
|
|
local m_s = tonumber(time_table[2]) > 10 and tostring(time_table[2]) or ("0" .. tostring(time_table[2]))
|
|
str = h_s .. ":" .. m_s
|
|
end
|
|
return str
|
|
end
|
|
|
|
--跳跃结束延时协议操作
|
|
function JumpOneModel:SyncJumpEndScmd()
|
|
local delay_func = function ()
|
|
local sub_type = self:GetActSubType()
|
|
self:Fire(JumpOneModel.REQUEST_INFO, 45909, self:GetRoomId(), 2, sub_type)
|
|
end
|
|
setTimeout(delay_func,0.5)
|
|
end
|
|
|
|
--获取当前活动的场次(客户端这里只会存在一场))
|
|
function JumpOneModel:GetActSubType()
|
|
local sub_type = 0
|
|
if self.act_cfg then
|
|
for k,v in pairs(self.act_cfg) do
|
|
sub_type = k
|
|
break
|
|
end
|
|
end
|
|
return sub_type
|
|
end
|