public bool IsTransitionPossible(DiplomaticContractState destinationState) { bool result = false; switch (this.State) { case DiplomaticContractState.Negotiation: { DiplomaticTerm.PropositionMethod propositionMethod = this.GetPropositionMethod(); if (destinationState == DiplomaticContractState.Proposed && propositionMethod == DiplomaticTerm.PropositionMethod.Negotiation) { result = this.IsValid(); } if (destinationState == DiplomaticContractState.Signed && propositionMethod == DiplomaticTerm.PropositionMethod.Declaration) { result = this.IsValid(); } if ((destinationState == DiplomaticContractState.Refused || destinationState == DiplomaticContractState.Ignored) && propositionMethod == DiplomaticTerm.PropositionMethod.Negotiation) { result = true; } break; } case DiplomaticContractState.Proposed: if (destinationState == DiplomaticContractState.Signed) { result = this.IsValid(); } if (destinationState == DiplomaticContractState.Refused) { result = true; } if (destinationState == DiplomaticContractState.Negotiation) { result = true; } if (destinationState == DiplomaticContractState.Ignored) { for (int i = 0; i < this.terms.Count; i++) { DiplomaticTerm diplomaticTerm = this.terms[i]; Diagnostics.Assert(diplomaticTerm != null); if (diplomaticTerm.EmpireWhichProvides.Index == this.EmpireWhichProposes.Index && !diplomaticTerm.CanApply(this, new string[0])) { result = true; } } } break; } return(result); }
private bool CanContractBeValidated() { if (this.DiplomaticContract.Terms.Count == 0) { return(false); } float cost = this.ComputeContractCost(this.DiplomaticContract.EmpireWhichProposes); if (!this.DepartmentOfTheTreasury.CanAfford(cost, SimulationProperties.EmpirePoint)) { return(false); } DiplomaticTerm.PropositionMethod propositionMethod = this.DiplomaticContract.GetPropositionMethod(); return((propositionMethod == DiplomaticTerm.PropositionMethod.Negotiation && this.DiplomaticContract.IsTransitionPossible(DiplomaticContractState.Proposed)) || (propositionMethod == DiplomaticTerm.PropositionMethod.Declaration && this.DiplomaticContract.IsTransitionPossible(DiplomaticContractState.Signed))); }