31 #ifndef __UNIT_FIND_H__
32 #define __UNIT_FIND_H__
110 player(unit.Player), type(unit.Type)
113 player(&_player), type(&_type)
118 return (unit->
Player == player && unit->
Type == type);
132 const CUnit *forbidden;
158 template <
typename Pred>
168 template <
typename Pred>
171 template <
typename Pred1,
typename Pred2>
175 AndPredicate(Pred1 _pred1, Pred2 _pred2) : pred1(_pred1), pred2(_pred2) {}
182 template <
typename Pred1,
typename Pred2>
208 player(player), units(units), maxDist(maxDist), movemask(movemask), unitP(unitP) {}
214 const std::vector<CUnit *> &units;
220 void Select(
const Vec2i <Pos,
const Vec2i &rbPos, std::vector<CUnit *> &units);
224 template <
typename Pred>
231 for (
Vec2i posIt = ltPos; posIt.
y != rbPos.
y + 1; ++posIt.y) {
232 for (posIt.x = ltPos.
x; posIt.x != rbPos.
x + 1; ++posIt.x) {
236 for (
size_t i = 0; i != cache.
size(); ++i) {
237 CUnit &unit = *cache[i];
239 if (unit.
CacheLock == 0 && pred(&unit)) {
241 units.push_back(&unit);
246 for (
size_t i = 0; i != units.size(); ++i) {
247 units[i]->CacheLock = 0;
251 template <
typename Pred>
254 const Vec2i offset(range, range);
258 unit.
tilePos + typeSize + offset, around,
262 template <
typename Pred>
263 void Select(
const Vec2i <Pos,
const Vec2i &rbPos, std::vector<CUnit *> &units, Pred pred)
265 Vec2i minPos = ltPos;
266 Vec2i maxPos = rbPos;
272 template <
typename Pred>
278 for (
Vec2i posIt = ltPos; posIt.
y != rbPos.
y + 1; ++posIt.y) {
279 for (posIt.x = ltPos.
x; posIt.x != rbPos.
x + 1; ++posIt.x) {
284 if (it != cache.
end()) {
292 template <
typename Pred>
295 Vec2i minPos = ltPos;
296 Vec2i maxPos = rbPos;
304 int resource,
bool check_usage =
false,
const CUnit *deposit = NULL);
345 #endif // !__UNIT_FIND_H__
CUnit * ResourceOnMap(const Vec2i &pos, int resource, bool mine_on_top=true)
Return resource, if on map tile.
Definition: unit_find.cpp:648
NotPredicate< Pred > MakeNotPredicate(Pred pred)
Definition: unit_find.h:169
Definition: unit_find.h:106
VisitResult Visit(TerrainTraversal &terrainTraversal, const Vec2i &pos, const Vec2i &from)
Definition: unit_find.cpp:86
CUnitCache UnitCache
HP for walls/ Wood Regeneration.
Definition: tile.h:236
void Select(const Vec2i <Pos, const Vec2i &rbPos, std::vector< CUnit * > &units)
Definition: unit_find.cpp:57
bool operator()(const CUnit *unit) const
Definition: unit_find.h:130
Definition: unit_find.h:141
bool operator()(const CUnit *unit) const
Definition: unit_find.h:144
Definition: unit_find.h:147
const_iterator begin() const
Definition: unit_cache.h:63
CMapInfo Info
graphic for fog of war
Definition: map.h:267
CUnit * AttackUnitsInReactRange(const CUnit &unit, CUnitFilter pred)
Find best enemy in reaction range to attack.
Definition: unit_find.cpp:1217
void SelectFixed(const Vec2i <Pos, const Vec2i &rbPos, std::vector< CUnit * > &units)
Definition: unit_find.cpp:62
unsigned CacheLock
Unit is on board a transporter.
Definition: unit.h:365
int TileWidth
How much it costs to repair.
Definition: unittype.h:537
bool CheckObstaclesBetweenTiles(const Vec2i &unitPos, const Vec2i &goalPos, unsigned short flags, int *distance=NULL)
Check map for obstacles in a line between 2 tiles.
Definition: unit_find.cpp:1103
T y
Definition: vec2i.h:43
HasSamePlayerAndTypeAs(const CPlayer &_player, const CUnitType &_type)
Definition: unit_find.h:112
Can attack from transporter.
Definition: unittype.h:153
Definition: unit_find.h:49
bool IsPointOnMap(int x, int y) const
Definition: map.h:122
IsAlliedWith(const CPlayer &_player)
Definition: unit_find.h:91
AndPredicate< Pred1, Pred2 > MakeAndPredicate(Pred1 pred1, Pred2 pred2)
Definition: unit_find.h:183
std::vector< BoolFlags > BoolFlag
Definition: unittype.h:598
The big unit structure.
Definition: unit.h:119
bool operator()(const CUnit *unit) const
Definition: unit_find.h:92
size_t size() const
Definition: unit_cache.h:59
HasNotSamePlayerAs(const CPlayer &_player)
Definition: unit_find.h:82
Definition: unit_find.h:70
int TileHeight
Tile size on map width.
Definition: unittype.h:538
bool operator()(const CUnit *const unit) const
Definition: unit_find.h:191
OutOfMinRange(const int range, const Vec2i pos)
Definition: unit_find.h:150
const_iterator end() const
Definition: unit_cache.h:65
UnitTypeType UnitType
originally only visual effect, we do more with this!
Definition: unittype.h:562
CUnit * AttackUnitsInDistance(const CUnit &unit, int range, CUnitFilter pred)
Find best enemy in numeric range to attack.
Definition: unit_find.cpp:1147
bool FindTerrainType(int movemask, int resmask, int range, const CPlayer &player, const Vec2i &startPos, Vec2i *pos)
Find the neareast piece of terrain with specific flags.
Definition: unit_find.cpp:162
bool operator()(const CUnit *unit) const
Definition: unit_find.h:65
IsEnemyWith(const CPlayer &_player)
Definition: unit_find.h:100
Definition: unittype.h:467
CMapField * Field(unsigned int index) const
Definition: map.h:164
unsigned Building
Death explosion animated.
Definition: unittype.h:584
#define Assert(cond)
Definition: stratagus.h:119
bool operator()(const CUnit *unit) const
Definition: unit_find.h:163
CUnit * UnitFindResource(const CUnit &unit, const CUnit &startUnit, int range, int resource, bool check_usage=false, const CUnit *deposit=NULL)
Find resource.
Definition: unit_find.cpp:432
Definition: unit_find.h:204
HasSameTypeAs(const CUnitType &_type)
Definition: unit_find.h:64
CUnit * AttackUnitsInRange(const CUnit &unit, CUnitFilter pred)
Find best enemy in attack range to attack.
Definition: unit_find.cpp:1199
CUnitTypeFinder(const UnitTypeType t)
Definition: unit_find.h:190
bool operator()(const CUnit *unit) const
Definition: unit_find.h:176
Vec2i tilePos
Resource still.
Definition: unit.h:327
bool IsAllied(const CPlayer &player) const
Definition: unit.cpp:3040
bool operator()(const CUnit *unit) const
Definition: unit_find.h:138
CUnit * FindUnit_IfFixed(const Vec2i <Pos, const Vec2i &rbPos, Pred pred)
Definition: unit_find.h:273
CUnit * FindUnit_If(const Vec2i <Pos, const Vec2i &rbPos, Pred pred)
Definition: unit_find.h:293
bool operator()(const CUnit *unit) const
Definition: unit_find.h:52
Definition: unit_find.h:126
void FindUnitsByType(const CUnitType &type, std::vector< CUnit * > &units, bool everybody=false)
Definition: unit_find.cpp:525
Definition: pathfinder.h:134
CUnit * TargetOnMap(const CUnit &unit, const Vec2i &pos1, const Vec2i &pos2)
Return possible attack target on that map area.
Definition: unit_find.cpp:611
CUnit * FindDeposit(const CUnit &unit, int range, int resource)
Find nearest deposit.
Definition: unit_find.cpp:465
void FixSelectionArea(Vec2i &minpos, Vec2i &maxpos)
Definition: map.h:237
UnitFinder(const CPlayer &player, const std::vector< CUnit * > &units, int maxDist, int movemask, CUnit **unitP)
Definition: unit_find.h:207
Definition: unit_cache.h:50
bool operator()(const CUnit *unit) const
Definition: unit_find.h:101
UnitTypeType
Definition: unittype.h:321
CUnit * ResourceDepositOnMap(const Vec2i &pos, int resource)
Return resource deposit, if on map tile.
Definition: unit_find.cpp:673
int MapDistanceTo(const CUnit &dst) const
Definition: unit.h:272
CUnit * FindIdleWorker(const CPlayer &player, const CUnit *last)
Find the next idle worker.
Definition: unit_find.cpp:490
CUnit * UnitOnMapTile(const Vec2i &pos, unsigned int type)
Return any unit on that map tile.
Definition: unit_find.cpp:597
T x
Definition: vec2i.h:42
Diplomacy states for CommandDiplomacy.
Definition: player.h:79
bool operator()(const CUnit *) const
Definition: unit_find.h:58
Definition: unit_find.h:187
CMap Map
Definition: map.cpp:54
Definition: unit_find.h:79
NotPredicate(Pred _pred)
Definition: unit_find.h:162
bool operator()(const CUnit *unit) const
Definition: unit_find.h:116
bool operator()(const CUnit *unit) const
Definition: unit_find.h:74
CPlayer * Player
Pointer to unit-type (peon,...)
Definition: unit.h:332
bool operator()(const CUnit *unit) const
Definition: unit_find.h:151
HasSamePlayerAndTypeAs(const CUnit &unit)
Definition: unit_find.h:109
AndPredicate(Pred1 _pred1, Pred2 _pred2)
Definition: unit_find.h:175
Definition: unit_find.h:88
IsNotTheSameUnitAs(const CUnit &unit)
Definition: unit_find.h:129
void SelectAroundUnit(const CUnit &unit, int range, std::vector< CUnit * > &around)
Definition: unit_find.cpp:67
void FindPlayerUnitsByType(const CPlayer &player, const CUnitType &type, std::vector< CUnit * > &units, bool ai_active=false)
Find all units of this type of the player.
Definition: unit_find.cpp:543
HasSamePlayerAs(const CPlayer &_player)
Definition: unit_find.h:73
Definition: unit_find.h:61
std::vector< CUnit * >::const_iterator const_iterator
Definition: unit_cache.h:54
Describes a field of the map.
Definition: tile.h:186
const CUnitType * Type
Map position as flat index offset (x + y * w)
Definition: unit.h:331
bool operator()(const CUnit *unit) const
Definition: unit_find.h:83
bool IsEnemy(const CPlayer &player) const
Definition: unit.cpp:3020
Definition: unit_find.h:135
Definition: unit_find.h:159
Definition: unit_find.h:97
VisitResult
Definition: pathfinder.h:127
Definition: unit_find.h:172
bool IsAgressive() const
Definition: unit.h:169
Definition: unit_find.h:55