Add aspects for new recruitment CA.

The aspects are:
- recruitment_diversity
- recruitment_instructions
- recruitment_more
- recruitment_randomness
- recruitment_save_gold

All aspects will only work with the new recruitment CA (not committed yet).
See http://wiki.wesnoth.org/AI_Recruitment
This commit is contained in:
flix 2013-09-23 17:09:26 +02:00
parent fb4361d666
commit 4959db0952
6 changed files with 213 additions and 11 deletions

View file

@ -77,9 +77,41 @@
[/value]
[/default]
[/aspect]
{DEFAULT_ASPECT_VALUE recruitment_diversity 1.0}
{DEFAULT_ASPECT_VALUE recruitment_ignore_bad_combat no}
{DEFAULT_ASPECT_VALUE recruitment_ignore_bad_movement no}
[aspect]
id=recruitment_instructions
engine=cpp
name=composite_aspect
[default]
engine=cpp
name=standard_aspect
[value]
[recruit]
importance=0
[/recruit]
[/value]
[/default]
[/aspect]
{DEFAULT_ASPECT_EMPTY recruitment_more}
{DEFAULT_ASPECT_EMPTY recruitment_pattern}
{DEFAULT_ASPECT_VALUE recruitment_randomness 15}
[aspect]
id=recruitment_save_gold
engine=cpp
name=composite_aspect
[default]
engine=cpp
name=standard_aspect
[value]
active=yes
begin=1.0
end=0.7
spend_all_gold=-1
[/value]
[/default]
[/aspect]
{DEFAULT_ASPECT_VALUE scout_village_targeting 3}
{DEFAULT_ASPECT_VALUE simple_targeting no}
{DEFAULT_ASPECT_VALUE support_villages no}

View file

@ -76,9 +76,14 @@ void configuration::init(const config &game_config)
well_known_aspects.push_back(well_known_aspect("passive_leader"));
well_known_aspects.push_back(well_known_aspect("passive_leader_shares_keep"));
well_known_aspects.push_back(well_known_aspect("recruitment"));
well_known_aspects.push_back(well_known_aspect("recruitment_diversity"));
well_known_aspects.push_back(well_known_aspect("recruitment_ignore_bad_combat"));
well_known_aspects.push_back(well_known_aspect("recruitment_ignore_bad_movement"));
well_known_aspects.push_back(well_known_aspect("recruitment_instructions"));
well_known_aspects.push_back(well_known_aspect("recruitment_more"));
well_known_aspects.push_back(well_known_aspect("recruitment_pattern"));
well_known_aspects.push_back(well_known_aspect("recruitment_randomness"));
well_known_aspects.push_back(well_known_aspect("recruitment_save_gold"));
well_known_aspects.push_back(well_known_aspect("scout_village_targeting"));
well_known_aspects.push_back(well_known_aspect("simple_targeting"));
well_known_aspects.push_back(well_known_aspect("support_villages"));

View file

@ -183,9 +183,14 @@ readonly_context_impl::readonly_context_impl(side_context &context, const config
passive_leader_shares_keep_(),
possible_moves_(),
recruitment_(),
recruitment_diversity_(),
recruitment_ignore_bad_combat_(),
recruitment_ignore_bad_movement_(),
recruitment_instructions_(),
recruitment_more_(),
recruitment_pattern_(),
recruitment_randomness_(),
recruitment_save_gold_(),
recursion_counter_(context.get_recursion_count()),
scout_village_targeting_(),
simple_targeting_(),
@ -213,9 +218,14 @@ readonly_context_impl::readonly_context_impl(side_context &context, const config
add_known_aspect("passive_leader",passive_leader_);
add_known_aspect("passive_leader_shares_keep",passive_leader_shares_keep_);
add_known_aspect("recruitment",recruitment_);
add_known_aspect("recruitment_diversity",recruitment_diversity_);
add_known_aspect("recruitment_ignore_bad_combat",recruitment_ignore_bad_combat_);
add_known_aspect("recruitment_ignore_bad_movement",recruitment_ignore_bad_movement_);
add_known_aspect("recruitment_instructions",recruitment_instructions_);
add_known_aspect("recruitment_more",recruitment_more_);
add_known_aspect("recruitment_pattern",recruitment_pattern_);
add_known_aspect("recruitment_randomness",recruitment_randomness_);
add_known_aspect("recruitment_save_gold",recruitment_save_gold_);
add_known_aspect("scout_village_targeting",scout_village_targeting_);
add_known_aspect("simple_targeting",simple_targeting_);
add_known_aspect("support_villages",support_villages_);
@ -777,6 +787,15 @@ stage_ptr readonly_context_impl::get_recruitment(ai_context &context) const
}
double readonly_context_impl::get_recruitment_diversity() const
{
if (recruitment_diversity_) {
return recruitment_diversity_->get();
}
return 0.;
}
bool readonly_context_impl::get_recruitment_ignore_bad_combat() const
{
if (recruitment_ignore_bad_combat_) {
@ -795,6 +814,24 @@ bool readonly_context_impl::get_recruitment_ignore_bad_movement() const
}
const config readonly_context_impl::get_recruitment_instructions() const
{
if (recruitment_instructions_) {
return recruitment_instructions_->get();
}
return config();
}
const std::vector<std::string> readonly_context_impl::get_recruitment_more() const
{
if (recruitment_more_) {
return recruitment_more_->get();
}
return std::vector<std::string>();
}
const std::vector<std::string> readonly_context_impl::get_recruitment_pattern() const
{
if (recruitment_pattern_) {
@ -804,6 +841,24 @@ const std::vector<std::string> readonly_context_impl::get_recruitment_pattern()
}
int readonly_context_impl::get_recruitment_randomness() const
{
if (recruitment_randomness_) {
return recruitment_randomness_->get();
}
return 0;
}
const config readonly_context_impl::get_recruitment_save_gold() const
{
if (recruitment_save_gold_) {
return recruitment_save_gold_->get();
}
return config();
}
double readonly_context_impl::get_scout_village_targeting() const
{
if (scout_village_targeting_) {

View file

@ -303,15 +303,30 @@ public:
virtual stage_ptr get_recruitment(ai_context &context) const = 0;
virtual double get_recruitment_diversity() const = 0;
virtual bool get_recruitment_ignore_bad_combat() const = 0;
virtual bool get_recruitment_ignore_bad_movement() const = 0;
virtual const config get_recruitment_instructions() const = 0;
virtual const std::vector<std::string> get_recruitment_more() const = 0;
virtual const std::vector<std::string> get_recruitment_pattern() const = 0;
virtual int get_recruitment_randomness() const = 0;
virtual const config get_recruitment_save_gold() const = 0;
virtual double get_scout_village_targeting() const = 0;
@ -807,6 +822,12 @@ public:
}
virtual double get_recruitment_diversity() const
{
return target_->get_recruitment_diversity();
}
virtual bool get_recruitment_ignore_bad_combat() const
{
return target_->get_recruitment_ignore_bad_combat();
@ -819,12 +840,36 @@ public:
}
virtual const config get_recruitment_instructions() const
{
return target_->get_recruitment_instructions();
}
virtual const std::vector<std::string> get_recruitment_more() const
{
return target_->get_recruitment_more();
}
virtual const std::vector<std::string> get_recruitment_pattern() const
{
return target_->get_recruitment_pattern();
}
virtual int get_recruitment_randomness() const
{
return target_->get_recruitment_randomness();
}
virtual const config get_recruitment_save_gold() const
{
return target_->get_recruitment_save_gold();
}
virtual const move_map& get_srcdst() const
{
return target_->get_srcdst();
@ -1362,15 +1407,30 @@ public:
virtual stage_ptr get_recruitment(ai_context &context) const;
virtual double get_recruitment_diversity() const;
virtual bool get_recruitment_ignore_bad_combat() const;
virtual bool get_recruitment_ignore_bad_movement() const;
virtual const config get_recruitment_instructions() const;
virtual const std::vector<std::string> get_recruitment_more() const;
virtual const std::vector<std::string> get_recruitment_pattern() const;
virtual int get_recruitment_randomness() const;
virtual const config get_recruitment_save_gold() const;
virtual double get_scout_village_targeting() const;
@ -1493,9 +1553,14 @@ private:
aspect_type<bool>::typesafe_ptr passive_leader_shares_keep_;
mutable moves_map possible_moves_;
aspect_type< ministage >::typesafe_ptr recruitment_;
aspect_type< double >::typesafe_ptr recruitment_diversity_;
aspect_type< bool >::typesafe_ptr recruitment_ignore_bad_combat_;
aspect_type< bool >::typesafe_ptr recruitment_ignore_bad_movement_;
aspect_type< config >::typesafe_ptr recruitment_instructions_;
aspect_type< std::vector<std::string> >::typesafe_ptr recruitment_more_;
aspect_type< std::vector<std::string> >::typesafe_ptr recruitment_pattern_;
aspect_type< int >::typesafe_ptr recruitment_randomness_;
aspect_type< config >::typesafe_ptr recruitment_save_gold_;
recursion_counter recursion_counter_;
aspect_type< double >::typesafe_ptr scout_village_targeting_;
aspect_type< bool >::typesafe_ptr simple_targeting_;

View file

@ -245,16 +245,16 @@ const std::string holder::get_ai_overview()
s << "number_of_possible_recruits_to_force_recruit: " << this->ai_->get_number_of_possible_recruits_to_force_recruit() << std::endl;
s << "passive_leader: " << this->ai_->get_passive_leader() << std::endl;
s << "passive_leader_shares_keep: " << this->ai_->get_passive_leader_shares_keep() << std::endl;
s << "recruitment_diversity: " << this->ai_->get_recruitment_diversity() << std::endl;
s << "recruitment_ignore_bad_combat: " << this->ai_->get_recruitment_ignore_bad_combat() << std::endl;
s << "recruitment_ignore_bad_movement: " << this->ai_->get_recruitment_ignore_bad_movement() << std::endl;
// s << "recruitment_pattern: ";
// for(std::vector<std::string>::const_iterator i = this->ai_->get_recruitment_pattern().begin(); i != this->ai_->get_recruitment_pattern().end(); ++i) {
// if(i != this->ai_->get_recruitment_pattern().begin())
// s << ",";
//
// s << *i;
// }
// s << std::endl;
s << "recruitment_instructions: " << std::endl << "----config begin----" << std::endl;
s << this->ai_->get_recruitment_instructions() << "-----config end-----" << std::endl;
s << "recruitment_more: " << utils::join(this->ai_->get_recruitment_more()) << std::endl;
s << "recruitment_pattern: " << utils::join(this->ai_->get_recruitment_pattern()) << std::endl;
s << "recruitment_randomness: " << this->ai_->get_recruitment_randomness() << std::endl;
s << "recruitment_save_gold: " << std::endl << "----config begin----" << std::endl;
s << this->ai_->get_recruitment_save_gold() << "-----config end-----" << std::endl;
s << "scout_village_targeting: " << this->ai_->get_scout_village_targeting() << std::endl;
s << "simple_targeting: " << this->ai_->get_simple_targeting() << std::endl;
s << "support_villages: " << this->ai_->get_support_villages() << std::endl;

View file

@ -269,7 +269,10 @@ static register_aspect_factory< composite_aspect<bool> >
passive_leader_shares_keep__composite_aspect_factory("passive_leader_shares_keep*composite_aspect");
static register_aspect_factory< composite_aspect<ministage> >
recruitment__composite_aspect_factory("recruitment*composite_aspect");
recruitment__composite_aspect_factory("recruitment*composite_aspect");
static register_aspect_factory< composite_aspect<double> >
recruitment_diversity__composite_aspect_factory("recruitment_diversity*composite_aspect");
static register_aspect_factory< composite_aspect<bool> >
recruitment_ignore_bad_combat__composite_aspect_factory("recruitment_ignore_bad_combat*composite_aspect");
@ -277,9 +280,21 @@ static register_aspect_factory< composite_aspect<bool> >
static register_aspect_factory< composite_aspect<bool> >
recruitment_ignore_bad_movement__composite_aspect_factory("recruitment_ignore_bad_movement*composite_aspect");
static register_aspect_factory< composite_aspect<config> >
recruitment_instructions__composite_aspect_factory("recruitment_instructions*composite_aspect");
static register_aspect_factory< composite_aspect< std::vector<std::string> > >
recruitment_more__composite_aspect_factory("recruitment_more*composite_aspect");
static register_aspect_factory< composite_aspect< std::vector<std::string> > >
recruitment_pattern__composite_aspect_factory("recruitment_pattern*composite_aspect");
static register_aspect_factory< composite_aspect<int> >
recruitment_randomness__composite_aspect_factory("recruitment_randomness*composite_aspect");
static register_aspect_factory< composite_aspect<config> >
recruitment_save_gold__composite_aspect_factory("recruitment_save_gold*composite_aspect");
static register_aspect_factory< composite_aspect<double> >
scout_village_targeting__composite_aspect_factory("scout_village_targeting*composite_aspect");
@ -340,7 +355,10 @@ static register_aspect_factory< standard_aspect<bool> >
passive_leader_shares_keep__standard_aspect_factory("passive_leader_shares_keep*standard_aspect");
static register_aspect_factory< standard_aspect<ministage> >
recruitment__standard_aspect_factory("recruitment*standard_aspect");
recruitment__standard_aspect_factory("recruitment*standard_aspect");
static register_aspect_factory< standard_aspect<double> >
recruitment_diversity__standard_aspect_factory("recruitment_diversity*standard_aspect");
static register_aspect_factory< standard_aspect<bool> >
recruitment_ignore_bad_combat__standard_aspect_factory("recruitment_ignore_bad_combat*standard_aspect");
@ -348,9 +366,21 @@ static register_aspect_factory< standard_aspect<bool> >
static register_aspect_factory< standard_aspect<bool> >
recruitment_ignore_bad_movement__standard_aspect_factory("recruitment_ignore_bad_movement*standard_aspect");
static register_aspect_factory< standard_aspect<config> >
recruitment_instructions__standard_aspect_factory("recruitment_instructions*standard_aspect");
static register_aspect_factory< standard_aspect< std::vector<std::string> > >
recruitment_more__standard_aspect_factory("recruitment_more*standard_aspect");
static register_aspect_factory< standard_aspect< std::vector<std::string> > >
recruitment_pattern__standard_aspect_factory("recruitment_pattern*standard_aspect");
static register_aspect_factory< standard_aspect<int> >
recruitment_randomness__standard_aspect_factory("recruitment_randomness*standard_aspect");
static register_aspect_factory< standard_aspect<config> >
recruitment_save_gold__standard_aspect_factory("recruitment_save_gold*standard_aspect");
static register_aspect_factory< standard_aspect<double> >
scout_village_targeting__standard_aspect_factory("scout_village_targeting*standard_aspect");
@ -415,7 +445,10 @@ static register_aspect_factory< standard_aspect<bool> >
passive_leader_shares_keep__standard_aspect_factory2("passive_leader_shares_keep*");
static register_aspect_factory< standard_aspect<ministage> >
recruitment__standard_aspect_factory2("recruitment*");
recruitment__standard_aspect_factory2("recruitment*");
static register_aspect_factory< standard_aspect<double> >
recruitment_diversity__standard_aspect_factory2("recruitment_diversity*");
static register_aspect_factory< standard_aspect<bool> >
recruitment_ignore_bad_combat__standard_aspect_factory2("recruitment_ignore_bad_combat*");
@ -423,9 +456,21 @@ static register_aspect_factory< standard_aspect<bool> >
static register_aspect_factory< standard_aspect<bool> >
recruitment_ignore_bad_movement__standard_aspect_factory2("recruitment_ignore_bad_movement*");
static register_aspect_factory< standard_aspect<config> >
recruitment_instructions__standard_aspect_factory2("recruitment_instructions*");
static register_aspect_factory< standard_aspect< std::vector<std::string> > >
recruitment_more__standard_aspect_factory2("recruitment_more*");
static register_aspect_factory< standard_aspect< std::vector<std::string> > >
recruitment_pattern__standard_aspect_factory2("recruitment_pattern*");
static register_aspect_factory< standard_aspect<int> >
recruitment_randomness__standard_aspect_factory2("recruitment_randomness*");
static register_aspect_factory< standard_aspect<config> >
recruitment_save_gold__standard_aspect_factory2("recruitment_save_gold*");
static register_aspect_factory< standard_aspect<double> >
scout_village_targeting__standard_aspect_factory2("scout_village_targeting*");