|
|
|
@ -148,22 +148,26 @@ static const df::dfhack_material_category stone_cat(df::dfhack_material_category
|
|
|
|
|
static const df::dfhack_material_category wood_cat(df::dfhack_material_category::mask_wood);
|
|
|
|
|
static const df::dfhack_material_category metal_cat(df::dfhack_material_category::mask_metal);
|
|
|
|
|
static const df::dfhack_material_category glass_cat(df::dfhack_material_category::mask_glass);
|
|
|
|
|
static const df::dfhack_material_category clay_cat(df::dfhack_material_category::mask_clay);
|
|
|
|
|
|
|
|
|
|
static void cache_matched(int16_t type, int32_t index) {
|
|
|
|
|
MaterialInfo mi;
|
|
|
|
|
mi.decode(type, index);
|
|
|
|
|
if (mi.matches(stone_cat)) {
|
|
|
|
|
DEBUG(status).print("cached stone material: %s\n", mi.toString().c_str());
|
|
|
|
|
DEBUG(status).print("cached stone material: %s (%d, %d)\n", mi.toString().c_str(), type, index);
|
|
|
|
|
mat_cache.emplace(mi.toString(), std::make_pair(mi, "stone"));
|
|
|
|
|
} else if (mi.matches(wood_cat)) {
|
|
|
|
|
DEBUG(status).print("cached wood material: %s\n", mi.toString().c_str());
|
|
|
|
|
DEBUG(status).print("cached wood material: %s (%d, %d)\n", mi.toString().c_str(), type, index);
|
|
|
|
|
mat_cache.emplace(mi.toString(), std::make_pair(mi, "wood"));
|
|
|
|
|
} else if (mi.matches(metal_cat)) {
|
|
|
|
|
DEBUG(status).print("cached metal material: %s\n", mi.toString().c_str());
|
|
|
|
|
DEBUG(status).print("cached metal material: %s (%d, %d)\n", mi.toString().c_str(), type, index);
|
|
|
|
|
mat_cache.emplace(mi.toString(), std::make_pair(mi, "metal"));
|
|
|
|
|
} else if (mi.matches(glass_cat)) {
|
|
|
|
|
DEBUG(status).print("cached glass material: %s\n", mi.toString().c_str());
|
|
|
|
|
DEBUG(status).print("cached glass material: %s (%d, %d)\n", mi.toString().c_str(), type, index);
|
|
|
|
|
mat_cache.emplace(mi.toString(), std::make_pair(mi, "glass"));
|
|
|
|
|
} else if (mi.matches(clay_cat)) {
|
|
|
|
|
DEBUG(status).print("cached clay material: %s (%d, %d)\n", mi.toString().c_str(), type, index);
|
|
|
|
|
mat_cache.emplace(mi.toString(), std::make_pair(mi, "clay"));
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
TRACE(status).print("not matched: %s\n", mi.toString().c_str());
|
|
|
|
@ -734,6 +738,8 @@ static int setMaterialMaskFilter(lua_State *L) {
|
|
|
|
|
mask |= metal_cat.whole;
|
|
|
|
|
else if (cat == "glass")
|
|
|
|
|
mask |= glass_cat.whole;
|
|
|
|
|
else if (cat == "clay")
|
|
|
|
|
mask |= clay_cat.whole;
|
|
|
|
|
}
|
|
|
|
|
DEBUG(status,*out).print(
|
|
|
|
|
"setting material mask filter for building_type=%d subtype=%d custom=%d index=%d to %x\n",
|
|
|
|
@ -778,6 +784,7 @@ static int getMaterialMaskFilter(lua_State *L) {
|
|
|
|
|
ret.emplace("wood", !bits || bits & wood_cat.whole);
|
|
|
|
|
ret.emplace("metal", !bits || bits & metal_cat.whole);
|
|
|
|
|
ret.emplace("glass", !bits || bits & glass_cat.whole);
|
|
|
|
|
ret.emplace("clay", !bits || bits & clay_cat.whole);
|
|
|
|
|
Lua::Push(L, ret);
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
@ -822,6 +829,8 @@ static int setMaterialFilter(lua_State *L) {
|
|
|
|
|
mask.whole |= metal_cat.whole;
|
|
|
|
|
else if (mat.matches(glass_cat))
|
|
|
|
|
mask.whole |= glass_cat.whole;
|
|
|
|
|
else if (mat.matches(clay_cat))
|
|
|
|
|
mask.whole |= clay_cat.whole;
|
|
|
|
|
}
|
|
|
|
|
filter.setMaterialMask(mask.whole);
|
|
|
|
|
get_item_filters(*out, key).setItemFilter(*out, filter, index);
|
|
|
|
|