11 #include "../clib/cfgelem.h" 12 #include "../clib/logfacility.h" 13 #include "../pol/ustruct.h" 27 if ( flags & FLAG::MOVELAND )
29 if ( flags & FLAG::MOVESEA )
31 if ( flags & FLAG::BLOCKSIGHT )
33 if ( flags & FLAG::OVERFLIGHT )
35 if ( flags & FLAG::ALLOWDROPON )
37 if ( flags & FLAG::GRADUAL )
39 if ( flags & FLAG::MORE_SOLIDS )
41 if ( flags & FLAG::BLOCKING )
43 if ( flags & FLAG::STACKABLE )
49 if ( flags & FLAG::EQUIPPABLE )
55 static std::string out =
56 "L=move land, S=move sea, V=block sight, f=overflight, d=allow drop, g=gradual, +=more " 57 "solids, B=blocking, S=stackable, M=movable, E=equippable";
63 return ( value & flags ) == flags;
68 return ( ~value & flags ) == flags;
72 bool LOS_through_windows )
79 mapflags |= FLAG::MOVESEA;
84 mapflags |= FLAG::MOVELAND;
90 mapflags |= FLAG::GRADUAL;
95 mapflags |= FLAG::OVERFLIGHT;
98 if ( uoflags & Core::USTRUCT_TILE::FLAG_PLATFORM )
100 mapflags |= FLAG::ALLOWDROPON;
105 mapflags |= FLAG::STACKABLE;
110 mapflags |= FLAG::EQUIPPABLE;
115 mapflags |= FLAG::DESC_PREPEND_A;
120 mapflags |= FLAG::DESC_PREPEND_AN;
132 mapflags |= FLAG::BLOCKSIGHT;
137 mapflags |= FLAG::BLOCKSIGHT;
140 if ( !LOS_through_windows )
145 ( uoflags & Core::USTRUCT_TILE::FLAG_WALL )
149 mapflags |= FLAG::BLOCKSIGHT;
156 mapflags &= ~
FLAG::BLOCKSIGHT;
164 ( ~uoflags & Core::USTRUCT_TILE::FLAG_BLOCKING ) &&
168 mapflags |= FLAG::BLOCKSIGHT;
170 else if ( ( uoflags & Core::USTRUCT_TILE::FLAG_WALL ) &&
171 ( ~uoflags & Core::USTRUCT_TILE::FLAG_BLOCKING ) )
175 else if ( uoflags & ( Core::USTRUCT_TILE::FLAG_BLOCKING | Core::USTRUCT_TILE::FLAG_PLATFORM |
176 Core::USTRUCT_TILE::FLAG_HALF_HEIGHT ) )
178 mapflags |= FLAG::BLOCKSIGHT;
182 if (
flags_set( uoflags, Core::USTRUCT_TILE::FLAG_FLOOR | Core::USTRUCT_TILE::FLAG_LIQUID |
183 Core::USTRUCT_TILE::FLAG_BLOCKING ) )
187 else if ( ( uoflags & Core::USTRUCT_TILE::FLAG_BLOCKING ) )
189 mapflags |= FLAG::BLOCKING;
193 mapflags |= FLAG::BLOCKING;
196 flags_clear( uoflags, Core::USTRUCT_TILE::FLAG_BLOCKING ) )
207 if ( ( mapflags & FLAG::BLOCKING ) && ( mapflags & ( FLAG::MOVELAND | FLAG::MOVESEA ) ) )
208 INFO_PRINT <<
" Warning: Tile 0x" << fmt::hexu( tile )
209 <<
" uses Roof- and Platform-Flag at same time.\n";
225 tile, lt_flags, 0, 0 );
231 bool flag_moveland = elem.
remove_bool(
"MoveLand",
false );
232 bool flag_movesea = elem.
remove_bool(
"MoveSea",
false );
233 bool flag_blocksight = elem.
remove_bool(
"BlockSight",
false );
234 bool flag_overflight = elem.
remove_bool(
"OverFlight",
true );
235 bool flag_allowdropon = elem.
remove_bool(
"AllowDropOn",
false );
236 bool flag_gradual = elem.
remove_bool(
"Gradual",
false );
237 bool flag_stackable = elem.
remove_bool(
"Stackable",
false );
238 bool flag_blocking = elem.
remove_bool(
"Blocking",
false );
239 bool flag_movable = elem.
remove_bool(
"Movable",
false );
240 bool flag_equippable = elem.
remove_bool(
"Equippable",
false );
241 bool flag_prepend_a = elem.
remove_bool(
"DescPrependA",
false );
242 bool flag_prepend_an = elem.
remove_bool(
"DescPrependAn",
false );
243 unsigned int flags = 0;
246 flags |= FLAG::MOVELAND;
248 flags |= FLAG::MOVESEA;
249 if ( flag_blocksight )
250 flags |= FLAG::BLOCKSIGHT;
251 if ( flag_overflight )
252 flags |= FLAG::OVERFLIGHT;
253 if ( flag_allowdropon )
254 flags |= FLAG::ALLOWDROPON;
256 flags |= FLAG::GRADUAL;
257 if ( flag_stackable )
258 flags |= FLAG::STACKABLE;
260 flags |= FLAG::BLOCKING;
263 if ( flag_equippable )
264 flags |= FLAG::EQUIPPABLE;
265 if ( flag_prepend_a )
266 flags |= FLAG::DESC_PREPEND_A;
267 if ( flag_prepend_an )
268 flags |= FLAG::DESC_PREPEND_AN;
std::string flagstr(unsigned int flags)
bool cfg_show_roof_and_platform_warning
bool flags_clear(u32 value, u32 flags)
u32 polflags_from_tileflags(unsigned short tile, u32 uoflags, bool use_no_shoot, bool LOS_through_windows)
u32 polflags_from_landtileflags(unsigned short tile, u32 lt_flags)
bool flags_set(u32 value, u32 flags)
bool remove_bool(const char *propname)
unsigned int readflags(Clib::ConfigElem &elem)