This commit is contained in:
aozhiwei 2021-09-27 12:05:02 +00:00
parent 8f2a0c7f99
commit 3afaa7a2cb
3 changed files with 46 additions and 4 deletions

View File

@ -6,6 +6,7 @@
#include "matchteam.h" #include "matchteam.h"
#include "matchmgr.h" #include "matchmgr.h"
#include "GGListener.h" #include "GGListener.h"
#include "metamgr.h"
struct RawTeamMember struct RawTeamMember
{ {
@ -35,6 +36,9 @@ void MatchTeam::Init(f8::MsgHdr& hdr, const cs::CMJoin& msg)
team->Update(); team->Update();
}, },
&timer_attacher.timer_list_); &timer_attacher.timer_list_);
phase_= kMatchCombining;
phase_start_tick_ = a8::XGetTickCount();
countdown_ = MetaMgr::Instance()->match_team_time;
AddRawMember(hdr, msg); AddRawMember(hdr, msg);
} }
@ -46,6 +50,7 @@ void MatchTeam::AddRawMember(f8::MsgHdr& hdr, const cs::CMJoin& msg)
member->socket_handle = hdr.socket_handle; member->socket_handle = hdr.socket_handle;
member->msg = msg; member->msg = msg;
raw_member_hash_[msg.account_id()] = member; raw_member_hash_[msg.account_id()] = member;
curr_member_hash_.push_back(member);
if (!first_member_) { if (!first_member_) {
first_member_ = member; first_member_ = member;
} }
@ -64,7 +69,7 @@ bool MatchTeam::IsValidMember(const cs::CMJoin& msg)
void MatchTeam::Update() void MatchTeam::Update()
{ {
if (master_team_ == this) { if (IsMasterTeam()) {
UpdateMaster(); UpdateMaster();
} else { } else {
UpdateSlave(); UpdateSlave();
@ -79,7 +84,7 @@ void MatchTeam::SyncMatchInfo()
member->FillMFMatchTeamMember(notifymsg.mutable_info()->add_members()); member->FillMFMatchTeamMember(notifymsg.mutable_info()->add_members());
} }
notifymsg.mutable_info()->set_phase(phase_); notifymsg.mutable_info()->set_phase(phase_);
notifymsg.mutable_info()->set_countdown(countdown_); notifymsg.mutable_info()->set_countdown(phase_left_time_);
for (auto& member : curr_member_hash_) { for (auto& member : curr_member_hash_) {
if (member->socket_handle != 0) { if (member->socket_handle != 0) {
GGListener::Instance()->SendToClient(member->socket_handle, 0, notifymsg); GGListener::Instance()->SendToClient(member->socket_handle, 0, notifymsg);
@ -111,17 +116,25 @@ void MatchTeam::TryCombineTeam()
void MatchTeam::UpdateMaster() void MatchTeam::UpdateMaster()
{ {
phase_left_time_ = GetPhaseLeftTime();
switch (phase_) { switch (phase_) {
case kMatchCombining: case kMatchCombining:
{ {
if (GetPredictMemberNum() < MAX_TEAM_NUM) { if (GetPredictMemberNum() < MAX_TEAM_NUM) {
TryCombineTeam(); TryCombineTeam();
} }
if (phase_left_time_ <= 0) {
phase_ = kMatchChoose;
phase_start_tick_ = a8::XGetTickCount();
}
} }
break; break;
case kMatchChoose: case kMatchChoose:
{ {
if (phase_left_time_ <= 0) {
phase_ = kMatchLock;
phase_start_tick_ = a8::XGetTickCount();
}
} }
break; break;
case kMatchLock: case kMatchLock:
@ -239,5 +252,11 @@ std::string MatchTeam::GetTeamUUid()
bool MatchTeam::IsShuaRobotTime() bool MatchTeam::IsShuaRobotTime()
{ {
return false; return phase_ == kMatchCombining && phase_left_time_ <= MetaMgr::Instance()->match_robot_time;
}
int MatchTeam::GetPhaseLeftTime()
{
int passtime = (a8::XGetTickCount() - phase_start_tick_) / 1000;
return std::max(0, countdown_ - passtime);
} }

View File

@ -38,10 +38,15 @@ class MatchTeam
bool CanCombine(MatchTeam* b); bool CanCombine(MatchTeam* b);
bool IsShuaRobotTime(); bool IsShuaRobotTime();
void Combine(MatchTeam* b); void Combine(MatchTeam* b);
bool IsMasterTeam() { return master_team_ == this; };
bool IsSlaveTeam() { return master_team_ != this; };
int GetPhaseLeftTime();
private: private:
long long phase_start_tick_ = 0;
int phase_= kMatchCombining; int phase_= kMatchCombining;
int countdown_ = 0; int countdown_ = 0;
int phase_left_time_ = 0;
long long create_tick_ = 0; long long create_tick_ = 0;
std::map<std::string, std::shared_ptr<RawTeamMember>> raw_member_hash_; std::map<std::string, std::shared_ptr<RawTeamMember>> raw_member_hash_;
std::shared_ptr<RawTeamMember> first_member_; std::shared_ptr<RawTeamMember> first_member_;

View File

@ -578,6 +578,24 @@ private:
map.Init2(); map.Init2();
} }
} }
if (MetaMgr::Instance()->match_team_time <= 0) {
abort();
}
if (MetaMgr::Instance()->match_robot_time <= 0) {
abort();
}
if (MetaMgr::Instance()->match_robot_time >= MetaMgr::Instance()->match_team_time) {
abort();
}
if (MetaMgr::Instance()->match_choose_time <= 0) {
abort();
}
if (MetaMgr::Instance()->match_lock_time <= 0) {
abort();
}
if (MetaMgr::Instance()->match_lock_time >= MetaMgr::Instance()->match_choose_time) {
abort();
}
} }
void BindToMetaData() void BindToMetaData()