00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef ALLIANCESETUP_H
00023 #define ALLIANCESETUP_H
00024
00025 #include <map>
00026 #include <pgscrollwidget.h>
00027 #include "../gamemap.h"
00028
00029 class AllianceSetupWidget : public PG_ScrollWidget {
00030 GameMap* actmap;
00031 bool allEditable;
00032
00033 struct PlayerWidgets {
00034 PG_LineEdit* name;
00035 PG_DropDown* type;
00036 int pos;
00037 };
00038
00039 public:
00040 enum DiplomaticTransitions { SNEAK_ATTACK, TO_WAR, TO_TRUCE, TO_PEACE, TO_PEACE_SV, TO_ALLIANCE };
00041
00042 protected:
00043
00044 vector< vector< DiplomaticTransitions > > stateChanges;
00045 vector< vector< DiplomaticStates > > states;
00046
00047 typedef map<int,PG_Widget*> DiplomaticWidgets;
00048 DiplomaticWidgets diplomaticWidgets;
00049
00050 vector<PlayerWidgets> playerWidgets;
00051
00052 int linearize( int actingPlayer, int secondPlayer );
00053 void setState( DiplomaticStates s, int actingPlayer, int secondPlayer );
00054
00055 DiplomaticStates& getState( int actingPlayer, int secondPlayer );
00056
00057 public:
00058
00059 class ApplyStrategy {
00060 public:
00061 virtual void sneakAttack ( GameMap* map, int actingPlayer, int towardsPlayer ) = 0;
00062 virtual void setState ( GameMap* map, int actingPlayer, int towardsPlayer, DiplomaticStates newState ) = 0;
00063 virtual ~ApplyStrategy(){};
00064 };
00065
00066 AllianceSetupWidget( GameMap* gamemap, ApplyStrategy* applyStrategy, bool allEditable, PG_Widget *parent, const PG_Rect &r, const std::string &style="ScrollWidget" );
00067 void Apply();
00068 ~AllianceSetupWidget();
00069
00070 private:
00071 ApplyStrategy* strategy;
00072
00073 };
00074
00075 class DirectAllianceSetupStrategy : public AllianceSetupWidget::ApplyStrategy {
00076 virtual void sneakAttack ( GameMap* map, int actingPlayer, int towardsPlayer );
00077 virtual void setState ( GameMap* map, int actingPlayer, int towardsPlayer, DiplomaticStates newState );
00078 };
00079
00080
00084 bool setupalliances( GameMap* actmap, AllianceSetupWidget::ApplyStrategy* strategy, bool supervisor = false );
00085
00086
00087 #endif
00088