alliancesetup.h

Go to the documentation of this file.
00001 /*
00002      This file is part of Advanced Strategic Command; http://www.asc-hq.de
00003      Copyright (C) 1994-2010  Martin Bickel  and  Marc Schellenberger
00004  
00005      This program is free software; you can redistribute it and/or modify
00006      it under the terms of the GNU General Public License as published by
00007      the Free Software Foundation; either version 2 of the License, or
00008      (at your option) any later version.
00009  
00010      This program is distributed in the hope that it will be useful,
00011      but WITHOUT ANY WARRANTY; without even the implied warranty of
00012      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013      GNU General Public License for more details.
00014  
00015      You should have received a copy of the GNU General Public License
00016      along with this program; see the file COPYING. If not, write to the 
00017      Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
00018      Boston, MA  02111-1307  USA
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 

Generated on Mon May 14 01:31:39 2012 for Advanced Strategic Command by  doxygen 1.5.1