aozhiwei 5a3d41487f 1
2024-03-20 17:15:50 +08:00

80 lines
2.4 KiB
C++

#pragma once
namespace cs
{
class MFMobaBattleDataTeam;
class MFTeamFull;
class SMGameOver;
}
namespace a8
{
class MutableXObject;
}
class Room;
class Human;
class Team : public std::enable_shared_from_this<Team>
{
public:
Room* room = nullptr;
int team_rank = 0;
std::map<int, glm::vec3> target_pos;
int settlement_color = 0;
bool sending_battlereport = false;
bool already_report_battle = false;
Team();
~Team();
void SetInitTeamMemberNum(int init_num) { init_team_member_num_ = init_num; };
void SetAutoFill(bool auto_fill) { auto_fill_ = auto_fill; };
bool IsAutoFill() { return auto_fill_; };
int GetTeamId() { return team_id_; }
void SetTeamId(int team_id) { team_id_ = team_id; }
void TraverseMembers(std::function<bool (Human*)> func);
size_t GetMemberNum() { return members_.size(); }
void GetOveredHumans(std::set<Human*>& overed_humans);
Human* GetOneAliveMember(Human* exclude_hum);
Human* RandomOneAliveMember(Human* exclude_hum);
bool HasAliveMember();
int GetAliveNum();
int GetAlivePlayerNum();
void AddMember(Human* member);
void RemoveMember(Human* member);
bool IsFull();
void CombineTeam(Team* b_team);
bool CanCombine(Human* member);
void AddCombineMemberNum(int member_num);
Human* GetMemberByUniId(int member_id);
int GetInitTeamMemberNum() { return init_team_member_num_; };
bool HasReviveCoin(Human* member);
bool IsFreeTeam();
bool HasPlayer();
int GetPlayerNum();
void FillSMGameOver(cs::SMGameOver& msg);
void SendTeamBattleReport(Human* sender);
void GenBattleReportData(Human* player, a8::MutableXObject* params);
void GenBattleUuid();
void RunAway(Human* hum);
bool AllIsRunAway();
bool IsViewTeam() { return is_view_; }
void SetViewTeam() { is_view_ = true; }
void IncKillCount();
int GetKillCount();
long long GetLastKillFrameNo() { return last_kill_frameno_; }
bool MemberHasOb();
void FillMFMobaBattleDataTeam(cs::MFMobaBattleDataTeam* p);
void FillMFTeamFull(cs::MFTeamFull* p);
private:
int team_id_ = 0;
bool is_view_ = false;
int init_team_member_num_ = 0;
int combined_team_member_num_ = 0;
std::set<Human*> members_;
Human* first_member_ = nullptr;
bool auto_fill_ = false;
int kill_count_ = 0;
long long last_kill_frameno_ = 0;
};