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