new aspect, leader_aggression, to control the aggression of the leader...

...separately. Default value is -4.0 - that's old implicit default
This commit is contained in:
Iurii Chernyi 2009-10-08 00:01:17 +00:00
parent 3aac24d0f2
commit 27d6b0f59b
7 changed files with 38 additions and 6 deletions

View file

@ -56,6 +56,7 @@
{DEFAULT_ASPECT_EMPTY_SLF avoid}
{DEFAULT_ASPECT_VALUE caution 0.25}
{DEFAULT_ASPECT_VALUE grouping offensive}
{DEFAULT_ASPECT_VALUE leader_aggression -4.0}
{DEFAULT_ASPECT_EMPTY leader_goal}
{DEFAULT_ASPECT_VALUE leader_value 3.0}
{DEFAULT_ASPECT_VALUE number_of_possible_recruits_to_force_recruit 3.1}

View file

@ -64,6 +64,7 @@ void configuration::init(const config &game_config)
well_known_aspects.push_back(well_known_aspect("avoid",false));
well_known_aspects.push_back(well_known_aspect("caution"));
well_known_aspects.push_back(well_known_aspect("grouping"));
well_known_aspects.push_back(well_known_aspect("leader_aggression"));
well_known_aspects.push_back(well_known_aspect("leader_goal",false));
well_known_aspects.push_back(well_known_aspect("leader_value"));
well_known_aspects.push_back(well_known_aspect("number_of_possible_recruits_to_force_recruit"));

View file

@ -158,6 +158,7 @@ readonly_context_impl::readonly_context_impl(side_context &context, const config
grouping_(),
goals_(),
keeps_(),
leader_aggression_(),
leader_goal_(),
leader_value_(),
move_maps_enemy_valid_(false),
@ -188,6 +189,7 @@ readonly_context_impl::readonly_context_impl(side_context &context, const config
add_known_aspect("avoid",avoid_);
add_known_aspect("caution",caution_);
add_known_aspect("grouping",grouping_);
add_known_aspect("leader_aggression",leader_aggression_);
add_known_aspect("leader_goal",leader_goal_);
add_known_aspect("leader_value",leader_value_);
add_known_aspect("number_of_possible_recruits_to_force_recruit",number_of_possible_recruits_to_force_recruit_);
@ -609,6 +611,14 @@ std::vector<goal_ptr>& readonly_context_impl::get_goals()
double readonly_context_impl::get_leader_aggression() const
{
if (leader_aggression_) {
return leader_aggression_->get();
}
return 0;
}
config readonly_context_impl::get_leader_goal() const
{

View file

@ -237,6 +237,9 @@ public:
virtual std::vector<goal_ptr>& get_goals() = 0;
virtual double get_leader_aggression() const = 0;
virtual config get_leader_goal() const = 0;
@ -657,6 +660,13 @@ public:
}
virtual double get_leader_aggression() const
{
return target_->get_leader_aggression();
}
virtual config get_leader_goal() const
{
return target_->get_leader_goal();
@ -1188,6 +1198,9 @@ public:
virtual double get_number_of_possible_recruits_to_force_recruit() const;
virtual double get_leader_aggression() const;
virtual config get_leader_goal() const;
@ -1311,6 +1324,7 @@ private:
aspect_type< std::string >::typesafe_ptr grouping_;
std::vector< goal_ptr > goals_;
mutable std::set<map_location> keeps_;
aspect_type<double>::typesafe_ptr leader_aggression_;
aspect_type< config >::typesafe_ptr leader_goal_;
aspect_type< double >::typesafe_ptr leader_value_;
mutable bool move_maps_enemy_valid_;

View file

@ -265,12 +265,8 @@ double attack_analysis::rating(double aggression, const readonly_context& ai_obj
aggression = 1.0;
}
//FIXME: One of suokko's reverted changes removed this. Should it be gone?
// Only use the leader if we do a serious amount of damage,
// compared to how much they do to us.
if(uses_leader && aggression > -4.0) {
LOG_AI << "uses leader..\n";
aggression = -4.0;
if(uses_leader) {
aggression = ai_obj.get_leader_aggression();
}
double value = chance_to_kill*target_value - avg_losses*(1.0-aggression);

View file

@ -225,6 +225,7 @@ const std::string holder::get_ai_overview()
s << "attack_depth: " << this->ai_->get_attack_depth() << std::endl;
s << "caution: " << this->ai_->get_caution() << std::endl;
s << "grouping: " << this->ai_->get_grouping() << std::endl;
s << "leader_aggression: " << this->ai_->get_leader_aggression() << std::endl;
s << "leader_value: " << this->ai_->get_leader_value() << std::endl;
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;

View file

@ -137,6 +137,9 @@ static register_aspect_factory< composite_aspect<double> >
static register_aspect_factory< composite_aspect<std::string> >
grouping__composite_aspect_factory("grouping*composite_aspect");
static register_aspect_factory< composite_aspect<double> >
leader_aggression__composite_aspect_factory("leader_aggression*composite_aspect");
static register_aspect_factory< composite_aspect<config> >
leader_goal__composite_aspect_factory("leader_goal*composite_aspect");
@ -199,6 +202,9 @@ static register_aspect_factory< standard_aspect<double> >
static register_aspect_factory< standard_aspect<std::string> >
grouping__standard_aspect_factory("grouping*standard_aspect");
static register_aspect_factory< standard_aspect<double> >
leader_aggression__standard_aspect_factory("leader_aggression*standard_aspect");
static register_aspect_factory< standard_aspect<config> >
leader_goal__standard_aspect_factory("leader_goal*standard_aspect");
@ -261,6 +267,9 @@ static register_aspect_factory< standard_aspect<double> >
static register_aspect_factory< standard_aspect<std::string> >
grouping__standard_aspect_factory2("grouping*");
static register_aspect_factory< standard_aspect<double> >
leader_aggression__standard_aspect_factory2("leader_aggression*");
static register_aspect_factory< standard_aspect<config> >
leader_goal__standard_aspect_factory2("leader_goal*");