Generate correct constraint string for persistence

develop
Anuradha Dissanayake 2012-11-11 03:00:55 +13:00
parent 0222b93bb0
commit b16bbdd6df
1 changed files with 56 additions and 31 deletions

@ -645,6 +645,23 @@ static string get_constraint_material(ItemConstraint *cv)
return text;
}
#define ITEMDEF_VECTORS \
ITEM(WEAPON, weapons, itemdef_weaponst) \
ITEM(TRAPCOMP, trapcomps, itemdef_trapcompst) \
ITEM(TOY, toys, itemdef_toyst) \
ITEM(TOOL, tools, itemdef_toolst) \
ITEM(INSTRUMENT, instruments, itemdef_instrumentst) \
ITEM(ARMOR, armor, itemdef_armorst) \
ITEM(AMMO, ammo, itemdef_ammost) \
ITEM(SIEGEAMMO, siege_ammo, itemdef_siegeammost) \
ITEM(GLOVES, gloves, itemdef_glovesst) \
ITEM(SHOES, shoes, itemdef_shoesst) \
ITEM(SHIELD, shields, itemdef_shieldst) \
ITEM(HELM, helms, itemdef_helmst) \
ITEM(PANTS, pants, itemdef_pantsst) \
ITEM(FOOD, food, itemdef_foodst)
static ItemConstraint * create_new_constraint(bool is_craft, ItemTypeInfo item, MaterialInfo material,
df::dfhack_material_category mat_mask, item_quality::item_quality minqual,
PersistentDataItem * cfg, std::string str)
@ -681,8 +698,32 @@ static ItemConstraint * create_new_constraint(bool is_craft, ItemTypeInfo item,
{
if (str.empty())
{
str = get_constraint_material(nct);
str.append(item.toString());
std::string item_token = ENUM_KEY_STR(item_type, item.type);
if (item.custom)
item_token += ":" + item.custom->id;
else if (item.subtype != -1)
{
df::world_raws::T_itemdefs &defs = df::global::world->raws.itemdefs;
switch (item.type)
{
#define ITEM(type_string,vec,tclass) \
case df::item_type::type_string: \
item_token += ":" + defs.vec[item.subtype]->id; \
break;
ITEMDEF_VECTORS
#undef ITEM
default:
break;
}
}
str.append(item_token);
str.append("/");
str.append(bitfield_to_string(mat_mask, ","));
str.append("/");
if ((material.type != 0 || material.index > 0) && !material.isNone())
str.append(material.getToken());
}
nct->config = Core::getInstance().getWorld()->AddPersistentData("workflow/constraints");
@ -847,7 +888,7 @@ static void link_job_constraint(ProtectedJob *pj, df::item_type itype, int16_t i
}
}
static void compute_custom_job(ProtectedJob *pj, df::job *job)
static void compute_custom_job(ProtectedJob *pj, df::job *job, bool create_constraint = false)
{
if (pj->reaction_id < 0)
pj->reaction_id = linear_index(df::reaction::get_vector(),
@ -908,7 +949,7 @@ static void compute_custom_job(ProtectedJob *pj, df::job *job)
}
link_job_constraint(pj, prod->item_type, prod->item_subtype,
mat_mask, mat.type, mat.index, prod->flags.is_set(CRAFTS));
mat_mask, mat.type, mat.index, prod->flags.is_set(CRAFTS), create_constraint);
}
}
@ -962,7 +1003,7 @@ static void compute_job_outputs(color_ostream &out, ProtectedJob *pj, bool creat
if (job->job_type == CustomReaction)
{
compute_custom_job(pj, job);
compute_custom_job(pj, job, create_constraint);
return;
}
@ -1534,22 +1575,6 @@ static void print_job(color_ostream &out, ProtectedJob *pj)
#define COLOR_SELECTED COLOR_WHITE
#define COLOR_HIGHLIGHTED COLOR_GREEN
#define ITEMDEF_VECTORS \
ITEM(WEAPON, weapons, itemdef_weaponst) \
ITEM(TRAPCOMP, trapcomps, itemdef_trapcompst) \
ITEM(TOY, toys, itemdef_toyst) \
ITEM(TOOL, tools, itemdef_toolst) \
ITEM(INSTRUMENT, instruments, itemdef_instrumentst) \
ITEM(ARMOR, armor, itemdef_armorst) \
ITEM(AMMO, ammo, itemdef_ammost) \
ITEM(SIEGEAMMO, siege_ammo, itemdef_siegeammost) \
ITEM(GLOVES, gloves, itemdef_glovesst) \
ITEM(SHOES, shoes, itemdef_shoesst) \
ITEM(SHIELD, shields, itemdef_shieldst) \
ITEM(HELM, helms, itemdef_helmst) \
ITEM(PANTS, pants, itemdef_pantsst) \
ITEM(FOOD, food, itemdef_foodst)
namespace wf_ui
{
/*
@ -2439,18 +2464,21 @@ namespace wf_ui
MaterialInfo *selected_material = materials_column.getFirstSelectedElem();
MaterialInfo material = (selected_material) ? *selected_material : MaterialInfo();
if (cv == NULL)
if (cv != NULL)
{
delete_constraint(cv);
}
ItemConstraint *nct = create_new_constraint(false, *items_column.getFirstSelectedElem(), material, mat_mask, item_quality::Ordinary, NULL, "");
nct->setGoalByCount(false);
nct->setGoalCount(10);
nct->setGoalGap(1);
}
else
/*else
{
cv->mat_mask = mat_mask;
cv->material = (selected_material) ? *selected_material : MaterialInfo();
}
}*/
reset_list = true;
Screen::dismiss(this);
@ -3189,7 +3217,6 @@ static command_result workflow_cmd(color_ostream &out, vector <string> & paramet
continue;
delete_constraint(constraints[i]);
//process_constraints(out);
return CR_OK;
}
@ -3204,8 +3231,6 @@ static command_result workflow_cmd(color_ostream &out, vector <string> & paramet
while (!constraints.empty())
delete_constraint(constraints[0]);
//process_constraints(out);
out.print("Removed all constraints.\n");
return CR_OK;
}