Vegastrike 0.5.1 rc1  1.0
Original sources for Vegastrike Evolved
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
comm_ai.cpp File Reference
#include "comm_ai.h"
#include "faction_generic.h"
#include "communication.h"
#include "cmd/collection.h"
#include "gfx/cockpit_generic.h"
#include "cmd/images.h"
#include "configxml.h"
#include "vs_globals.h"
#include "cmd/script/flightgroup.h"
#include "cmd/unit_util.h"
#include "vs_random.h"
#include "cmd/unit_find.h"
#include "cmd/pilot.h"
#include "universe_util.h"

Go to the source code of this file.

Functions

bool MatchingMood (const CommunicationMessage &c, float mood, float randomresponse, float relationship)
 
void GetMadAt (Unit *un, Unit *parent, int numhits=0)
 
void AllUnitsCloseAndEngage (Unit *un, int faction)
 
static int InList (std::string item, Unit *un)
 
static bool isDockedAtAll (Unit *un)
 

Function Documentation

void AllUnitsCloseAndEngage ( Unit un,
int  faction 
)

Definition at line 98 of file comm_ai.cpp.

References _Universe, Universe::activeStarSystem(), UniverseUtil::adjustRelationModifierInt(), UnitCollection::createIterator(), Flightgroup::directive, Unit::faction, Unit::getFlightgroup(), GetMadAt(), UnitUtil::getRelationFromFaction(), StarSystem::getUnitList(), VegaConfig::getVariable(), i, Magnitude(), XMLSupport::parse_float(), Unit::Position(), Unit::Target(), Unit::TargetTurret(), vs_config, and Universe::whichPlayerStarship().

Referenced by Unit::ApplyDamage(), and CommunicatingAI::TerminateContrabandSearch().

99 {
100  Unit *ally;
101  static float contraband_assist_range =
102  XMLSupport::parse_float( vs_config->getVariable( "physics", "contraband_assist_range", "50000" ) );
103  float relation = 0;
104  static float minrel = XMLSupport::parse_float( vs_config->getVariable( "AI", "max_faction_contraband_relation", "-.05" ) );
105  static float adj = XMLSupport::parse_float( vs_config->getVariable( "AI", "faction_contraband_relation_adjust", "-.025" ) );
106  float delta;
107  int cp = _Universe->whichPlayerStarship( un );
108  if (cp != -1) {
109  if ( ( relation = UnitUtil::getRelationFromFaction( un, faction ) ) > minrel )
110  delta = minrel-relation;
111  else
112  delta = adj;
114  }
116  (ally = *i) != NULL;
117  ++i)
118  //Vector loc;
119  if (ally->faction == faction) {
120  if ( ( ally->Position()-un->Position() ).Magnitude() < contraband_assist_range ) {
121  GetMadAt( un, ally );
122  Flightgroup *fg = ally->getFlightgroup();
123  if (fg) {
124  if ( fg->directive.empty() ? true : toupper( *fg->directive.begin() ) != *fg->directive.begin() ) {
125  ally->Target( un );
126  ally->TargetTurret( un );
127  } else {
128  ally->Target( un );
129  ally->TargetTurret( un );
130  }
131  }
132  }
133  }
134  //}
135 }
void GetMadAt ( Unit un,
Unit parent,
int  numhits = 0 
)

Definition at line 86 of file comm_ai.cpp.

References Order::Communicate(), CommunicationMessage::fsm, Unit::getAIState(), FSM::GetHitNode(), VegaConfig::getVariable(), i, XMLSupport::parse_int(), CommunicationMessage::SetCurrentState(), and vs_config.

Referenced by AllUnitsCloseAndEngage(), and Mount::PhysicsAlignedFire().

87 {
88  if (numhits == 0) {
89  static int snumhits = XMLSupport::parse_int( vs_config->getVariable( "AI", "ContrabandMadness", "5" ) );
90  numhits = snumhits;
91  }
92  CommunicationMessage hit( un, parent, NULL, 0 );
93  hit.SetCurrentState( hit.fsm->GetHitNode(), NULL, 0 );
94  for (int i = 0; i < numhits; i++)
95  parent->getAIState()->Communicate( hit );
96 }
static int InList ( std::string  item,
Unit un 
)
static

Definition at line 164 of file comm_ai.cpp.

References Cargo::content, float_to_int(), Unit::GetCargo(), i, Unit::numCargo(), and Cargo::quantity.

Referenced by CommunicatingAI::UpdateContrabandSearch().

165 {
166  float numcontr = 0;
167  if (un) {
168  for (unsigned int i = 0; i < un->numCargo(); i++)
169  if (un->GetCargo( i ).content == item)
170  if (un->GetCargo( i ).quantity > 0)
171  numcontr++;
172  }
173  return float_to_int( numcontr );
174 }
static bool isDockedAtAll ( Unit un)
static

Definition at line 230 of file comm_ai.cpp.

References Unit::docked, Unit::DOCKED, and Unit::DOCKED_INSIDE.

Referenced by CommunicatingAI::ProcessCommMessage(), and CommunicatingAI::RandomInitiateCommunication().

231 {
232  return ( un->docked&(Unit::DOCKED_INSIDE|Unit::DOCKED) ) != 0;
233 }
bool MatchingMood ( const CommunicationMessage c,
float  mood,
float  randomresponse,
float  relationship 
)

Definition at line 47 of file comm_ai.cpp.

References CommunicationMessage::curstate, CommunicationMessage::fsm, FSM::getDefaultState(), VegaConfig::getVariable(), i, int, FSM::nodes, XMLSupport::parse_float(), and vs_config.

Referenced by CommunicatingAI::selectCommunicationMessageMood().

48 {
49  static float pos_limit = XMLSupport::parse_float( vs_config->getVariable( "AI",
50  "LowestPositiveCommChoice",
51  "0" ) );
52  static float neg_limit = XMLSupport::parse_float( vs_config->getVariable( "AI",
53  "LowestNegativeCommChoice",
54  "-.00001" ) );
55  const FSM::Node *n = (unsigned int) c.curstate
56  < c.fsm->nodes.size() ? (&c.fsm->nodes[c.curstate]) : (&c.fsm->nodes[c.fsm->getDefaultState(
57  relationship )]);
58  std::vector< unsigned int >::const_iterator iend = n->edges.end();
59  for (std::vector< unsigned int >::const_iterator i = n->edges.begin(); i != iend; ++i) {
60  if (c.fsm->nodes[*i].messagedelta >= pos_limit && relationship >= 0)
61  return true;
62  if (c.fsm->nodes[*i].messagedelta <= neg_limit && relationship < 0)
63  return true;
64  }
65  return false;
66 }