Advanced Strategic Command
alliancesetup.h
Go to the documentation of this file.
1 /*
2  This file is part of Advanced Strategic Command; http://www.asc-hq.de
3  Copyright (C) 1994-2010 Martin Bickel and Marc Schellenberger
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; see the file COPYING. If not, write to the
17  Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18  Boston, MA 02111-1307 USA
19 */
20 
21 
22 #ifndef ALLIANCESETUP_H
23 #define ALLIANCESETUP_H
24 
25 #include <map>
26 #include <pgscrollwidget.h>
27 #include "../gamemap.h"
28 
29 class AllianceSetupWidget : public PG_ScrollWidget {
30  GameMap* actmap;
31  bool allEditable;
32 
33  struct PlayerWidgets {
34  PG_LineEdit* name;
35  PG_DropDown* type;
36  int pos;
37  };
38 
39  public:
41 
42  protected:
43 
44  vector< vector< DiplomaticTransitions > > stateChanges;
45  vector< vector< DiplomaticStates > > states;
46 
47  typedef map<int,PG_Widget*> DiplomaticWidgets;
49 
50  vector<PlayerWidgets> playerWidgets;
51 
52  int linearize( int actingPlayer, int secondPlayer );
53  void setState( DiplomaticStates s, int actingPlayer, int secondPlayer );
54 
55  DiplomaticStates& getState( int actingPlayer, int secondPlayer );
56 
57  public:
58 
59  class ApplyStrategy {
60  public:
61  virtual void sneakAttack ( GameMap* map, int actingPlayer, int towardsPlayer ) = 0;
62  virtual void setState ( GameMap* map, int actingPlayer, int towardsPlayer, DiplomaticStates newState ) = 0;
63  virtual ~ApplyStrategy(){};
64  };
65 
66  AllianceSetupWidget( GameMap* gamemap, ApplyStrategy* applyStrategy, bool allEditable, PG_Widget *parent, const PG_Rect &r, const std::string &style="ScrollWidget" );
67  void Apply();
69 
70  private:
71  ApplyStrategy* strategy;
72 
73 };
74 
76  virtual void sneakAttack ( GameMap* map, int actingPlayer, int towardsPlayer );
77  virtual void setState ( GameMap* map, int actingPlayer, int towardsPlayer, DiplomaticStates newState );
78 };
79 
80 
84 bool setupalliances( GameMap* actmap, AllianceSetupWidget::ApplyStrategy* strategy, bool supervisor = false );
85 
86 
87 #endif
88 
void setState(DiplomaticStates s, int actingPlayer, int secondPlayer)
DiplomaticStates
Definition: player.h:53
bool setupalliances(GameMap *actmap, AllianceSetupWidget::ApplyStrategy *strategy, bool supervisor=false)
runs the Alliance-Setup dialog.
int linearize(int actingPlayer, int secondPlayer)
AllianceSetupWidget(GameMap *gamemap, ApplyStrategy *applyStrategy, bool allEditable, PG_Widget *parent, const PG_Rect &r, const std::string &style="ScrollWidget")
virtual void setState(GameMap *map, int actingPlayer, int towardsPlayer, DiplomaticStates newState)=0
virtual void sneakAttack(GameMap *map, int actingPlayer, int towardsPlayer)=0
map< int, PG_Widget * > DiplomaticWidgets
Definition: alliancesetup.h:47
DiplomaticWidgets diplomaticWidgets
Definition: alliancesetup.h:48
vector< PlayerWidgets > playerWidgets
Definition: alliancesetup.h:50
DiplomaticStates & getState(int actingPlayer, int secondPlayer)
vector< vector< DiplomaticStates > > states
Definition: alliancesetup.h:45
GameMap * actmap
Definition: spfst.cpp:64
vector< vector< DiplomaticTransitions > > stateChanges
Definition: alliancesetup.h:44
The map. THE central structure of ASC, which holds everything not globally available together...
Definition: gamemap.h:182