00001 #ifndef _SIMPLE_NO_PROMOTE_MOVE_ACTION_H
00002 #define _SIMPLE_NO_PROMOTE_MOVE_ACTION_H
00003
00004 #include "osl/move_action/concept.h"
00005 namespace osl
00006 {
00007 namespace effect_action
00008 {
00012 template<class Action>
00013 class SimpleNoPromote
00014 {
00015 BOOST_CLASS_REQUIRE(Action,osl::move_action,Concept);
00016 private:
00017 Action & ac;
00018 public:
00019 SimpleNoPromote(Action & a) :ac(a){}
00020 template<Player P,Ptype Type>
00021 void doActionPtype(Piece p1,Position to){
00022 if(!p1.isPromoted())
00023 ac.simpleMove(p1.position(),to,Type,false,P);
00024 }
00025 template<Player P>
00026 void doAction(Piece p1,Position to){
00027 if(!p1.isPromoted())
00028 ac.simpleMove(p1.position(),to,p1.ptype(),false,P);
00029 }
00030 bool done() const{ return false;}
00031 };
00032 }
00033
00034 }
00035 #endif // _SIMPLE_NO_PROMOTE_MOVE_ACTION_H
00036
00037
00038
00039