MCPcopy Create free account
hub / github.com/DFHack/dfhack / can_melt

Function can_melt

plugins/uicommon.h:228–277  ·  view source on GitHub ↗

Copied from Kelly Martin's code

Source from the content-addressed store, hash-verified

226
227// Copied from Kelly Martin's code
228static inline bool can_melt(df::item* item)
229{
230
231 df::item_flags bad_flags;
232 bad_flags.whole = 0;
233
234#define F(x) bad_flags.bits.x = true;
235 F(dump); F(forbid); F(garbage_collect); F(in_job);
236 F(hostile); F(on_fire); F(rotten); F(trader);
237 F(in_building); F(construction); F(artifact); F(melt);
238#undef F
239
240 if (item->flags.whole & bad_flags.whole)
241 return false;
242
243 df::item_type t = item->getType();
244
245 if (t == df::enums::item_type::BOX || t == df::enums::item_type::BAR)
246 return false;
247
248 if (!is_metal_item(item)) return false;
249
250 for (auto g = item->general_refs.begin(); g != item->general_refs.end(); g++)
251 {
252 switch ((*g)->getType())
253 {
254 case general_ref_type::CONTAINS_ITEM:
255 case general_ref_type::UNIT_HOLDER:
256 case general_ref_type::CONTAINS_UNIT:
257 return false;
258 case general_ref_type::CONTAINED_IN_ITEM:
259 {
260 df::item* c = (*g)->getItem();
261 for (auto gg = c->general_refs.begin(); gg != c->general_refs.end(); gg++)
262 {
263 if ((*gg)->getType() == general_ref_type::UNIT_HOLDER)
264 return false;
265 }
266 }
267 break;
268 default:
269 break;
270 }
271 }
272
273 if (item->getQuality() >= item_quality::Masterful)
274 return false;
275
276 return true;
277}
278
279
280/*

Callers

nothing calls this directly

Calls 4

is_metal_itemFunction · 0.85
getTypeMethod · 0.80
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected