1 #include "Diplomacy.h"
2
3 #include "../util/GameRules.h"
4 #include "../util/i18n.h"
5
6 FO_COMMON_API extern const int ALL_EMPIRES;
7
8 namespace {
AddRules(GameRules & rules)9 void AddRules(GameRules& rules) {
10 // determine if diplomacy allowed
11 rules.Add<std::string>("RULE_DIPLOMACY", "RULE_DIPLOMACY_DESC",
12 "MULTIPLAYER", "RULE_DIPLOMACY_ALLOWED_FOR_ALL", true,
13 DiscreteValidator<std::string>(std::set<std::string>({
14 "RULE_DIPLOMACY_ALLOWED_FOR_ALL",
15 "RULE_DIPLOMACY_FORBIDDEN_FOR_ALL"
16 })));
17 }
18 bool temp_bool = RegisterGameRules(&AddRules);
19 }
20
DiplomaticMessage()21 DiplomaticMessage::DiplomaticMessage() :
22 m_sender_empire(ALL_EMPIRES),
23 m_recipient_empire(ALL_EMPIRES),
24 m_type(INVALID_DIPLOMATIC_MESSAGE_TYPE)
25 {}
26
DiplomaticMessage(int sender_empire_id,int recipient_empire_id,DiplomaticMessageType type)27 DiplomaticMessage::DiplomaticMessage(int sender_empire_id, int recipient_empire_id, DiplomaticMessageType type) :
28 m_sender_empire(sender_empire_id),
29 m_recipient_empire(recipient_empire_id),
30 m_type(type)
31 {}
32
operator ==(const DiplomaticMessage & lhs,const DiplomaticMessage & rhs)33 bool operator==(const DiplomaticMessage& lhs, const DiplomaticMessage& rhs) {
34 return lhs.RecipientEmpireID() == rhs.RecipientEmpireID() &&
35 lhs.SenderEmpireID() == rhs.SenderEmpireID() &&
36 lhs.GetType() == rhs.GetType();
37 }
38
operator !=(const DiplomaticMessage & lhs,const DiplomaticMessage & rhs)39 bool operator!=(const DiplomaticMessage& lhs, const DiplomaticMessage& rhs)
40 { return !(lhs == rhs); }
41
Dump() const42 std::string DiplomaticMessage::Dump() const {
43 std::string retval;
44 retval += "Dimplomatic message from : " + std::to_string(m_sender_empire) +
45 " to: " + std::to_string(m_recipient_empire) + " about: ";
46 switch (m_type) {
47 case WAR_DECLARATION: retval += "War Declaration"; break;
48 case PEACE_PROPOSAL: retval += "Peace Proposal"; break;
49 case ACCEPT_PEACE_PROPOSAL: retval += "Accept Peace Proposal"; break;
50 case ALLIES_PROPOSAL: retval += "Allies Proposal"; break;
51 case ACCEPT_ALLIES_PROPOSAL: retval += "Accept Allies Proposal"; break;
52 case END_ALLIANCE_DECLARATION: retval += "End Alliance Declaration"; break;
53 case CANCEL_PROPOSAL: retval += "Cancel Proposal"; break;
54 case REJECT_PROPOSAL: retval += "Reject Proposal"; break;
55 case INVALID_DIPLOMATIC_MESSAGE_TYPE:
56 default: retval += "Invalid / Unknown"; break;
57 }
58 return retval;
59 }
60
IsAllowed() const61 bool DiplomaticMessage::IsAllowed() const {
62 return GetGameRules().Get<std::string>("RULE_DIPLOMACY") != UserStringNop("RULE_DIPLOMACY_FORBIDDEN_FOR_ALL");
63 }
64
65
DiplomaticStatusUpdateInfo()66 DiplomaticStatusUpdateInfo::DiplomaticStatusUpdateInfo() :
67 empire1_id(ALL_EMPIRES),
68 empire2_id(ALL_EMPIRES),
69 diplo_status(INVALID_DIPLOMATIC_STATUS)
70 {}
71
DiplomaticStatusUpdateInfo(int empire1_id_,int empire2_id_,DiplomaticStatus status)72 DiplomaticStatusUpdateInfo::DiplomaticStatusUpdateInfo(int empire1_id_, int empire2_id_, DiplomaticStatus status) :
73 empire1_id(empire1_id_),
74 empire2_id(empire2_id_),
75 diplo_status(status)
76 {}
77
78
WarDeclarationDiplomaticMessage(int sender_empire_id,int recipient_empire_id)79 DiplomaticMessage WarDeclarationDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
80 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::WAR_DECLARATION); }
81
PeaceProposalDiplomaticMessage(int sender_empire_id,int recipient_empire_id)82 DiplomaticMessage PeaceProposalDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
83 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::PEACE_PROPOSAL); }
84
AcceptPeaceDiplomaticMessage(int sender_empire_id,int recipient_empire_id)85 DiplomaticMessage AcceptPeaceDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
86 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::ACCEPT_PEACE_PROPOSAL); }
87
AlliesProposalDiplomaticMessage(int sender_empire_id,int recipient_empire_id)88 DiplomaticMessage AlliesProposalDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
89 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::ALLIES_PROPOSAL); }
90
AcceptAlliesDiplomaticMessage(int sender_empire_id,int recipient_empire_id)91 DiplomaticMessage AcceptAlliesDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
92 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::ACCEPT_ALLIES_PROPOSAL); }
93
EndAllianceDiplomaticMessage(int sender_empire_id,int recipient_empire_id)94 DiplomaticMessage EndAllianceDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
95 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::END_ALLIANCE_DECLARATION); }
96
CancelDiplomaticMessage(int sender_empire_id,int recipient_empire_id)97 DiplomaticMessage CancelDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
98 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::CANCEL_PROPOSAL); }
99
RejectProposalDiplomaticMessage(int sender_empire_id,int recipient_empire_id)100 DiplomaticMessage RejectProposalDiplomaticMessage(int sender_empire_id, int recipient_empire_id)
101 { return DiplomaticMessage(sender_empire_id, recipient_empire_id, DiplomaticMessage::REJECT_PROPOSAL); }
102
103