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:
parent
3aac24d0f2
commit
27d6b0f59b
7 changed files with 38 additions and 6 deletions
|
@ -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}
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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_;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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*");
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue