/** ** Can a unit of unit-type be placed at this point. ** ** @param type unit-type to be checked. ** @param pos map tile position. ** ** @return True if could be entered, false otherwise. */ bool UnitTypeCanBeAt(const CUnitType &type, const Vec2i &pos) { const int mask = type.MovementMask; unsigned int index = pos.y * Map.Info.MapWidth; for (int addy = 0; addy < type.TileHeight; ++addy) { for (int addx = 0; addx < type.TileWidth; ++addx) { if (Map.Info.IsPointOnMap(pos.x + addx, pos.y + addy) == false || Map.CheckMask(pos.x + addx + index, mask) == true) { return false; } } index += Map.Info.MapWidth; } return true; }
/** ** Can move to this point, applying mask. ** ** @param pos map tile position. ** @param mask Mask for movement to apply. ** ** @return True if could be entered, false otherwise. */ bool CheckedCanMoveToMask(const Vec2i &pos, int mask) { return Map.Info.IsPointOnMap(pos) && !Map.CheckMask(pos, mask); }