VarAction2: Add constructor for AnalyseCallbackOperation

This commit is contained in:
Jonathan G Rennison
2022-08-21 18:43:55 +01:00
parent a0c894d067
commit 0bcdaba0f9
4 changed files with 12 additions and 16 deletions

View File

@@ -80,8 +80,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
auto find_cb_result = [&](const SpriteGroup *group, AnalyseCallbackOperation::FindCBResultData data) -> bool { auto find_cb_result = [&](const SpriteGroup *group, AnalyseCallbackOperation::FindCBResultData data) -> bool {
if (group == nullptr) return false; if (group == nullptr) return false;
AnalyseCallbackOperation cbr_op; AnalyseCallbackOperation cbr_op(ACOM_FIND_CB_RESULT);
cbr_op.mode = ACOM_FIND_CB_RESULT;
cbr_op.data.cb_result = data; cbr_op.data.cb_result = data;
group->AnalyseCallbacks(cbr_op); group->AnalyseCallbacks(cbr_op);
return (cbr_op.result_flags & ACORF_CB_RESULT_FOUND); return (cbr_op.result_flags & ACORF_CB_RESULT_FOUND);
@@ -109,8 +108,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
case CBID_VEHICLE_MODIFY_PROPERTY: case CBID_VEHICLE_MODIFY_PROPERTY:
if (range.group != nullptr) { if (range.group != nullptr) {
AnalyseCallbackOperation cb36_op; AnalyseCallbackOperation cb36_op(ACOM_CB36_PROP);
cb36_op.mode = ACOM_CB36_PROP;
range.group->AnalyseCallbacks(cb36_op); range.group->AnalyseCallbacks(cb36_op);
op.properties_used |= cb36_op.properties_used; op.properties_used |= cb36_op.properties_used;
op.callbacks_used |= cb36_op.callbacks_used; op.callbacks_used |= cb36_op.callbacks_used;
@@ -120,8 +118,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
case CBID_VEHICLE_REFIT_CAPACITY: case CBID_VEHICLE_REFIT_CAPACITY:
found_refit_cap = true; found_refit_cap = true;
if (range.group != nullptr) { if (range.group != nullptr) {
AnalyseCallbackOperation cb_refit_op; AnalyseCallbackOperation cb_refit_op(ACOM_CB_REFIT_CAPACITY);
cb_refit_op.mode = ACOM_CB_REFIT_CAPACITY;
range.group->AnalyseCallbacks(cb_refit_op); range.group->AnalyseCallbacks(cb_refit_op);
op.result_flags |= (cb_refit_op.result_flags & (ACORF_CB_REFIT_CAP_NON_WHITELIST_FOUND | ACORF_CB_REFIT_CAP_SEEN_VAR_47)); op.result_flags |= (cb_refit_op.result_flags & (ACORF_CB_REFIT_CAP_NON_WHITELIST_FOUND | ACORF_CB_REFIT_CAP_SEEN_VAR_47));
} }
@@ -153,8 +150,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
if (range.low == 0x9) { if (range.low == 0x9) {
/* Speed */ /* Speed */
if (range.group != nullptr) { if (range.group != nullptr) {
AnalyseCallbackOperation cb36_speed; AnalyseCallbackOperation cb36_speed(ACOM_CB36_SPEED);
cb36_speed.mode = ACOM_CB36_SPEED;
range.group->AnalyseCallbacks(cb36_speed); range.group->AnalyseCallbacks(cb36_speed);
op.callbacks_used |= cb36_speed.callbacks_used; op.callbacks_used |= cb36_speed.callbacks_used;
} }
@@ -233,8 +229,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
AnalyseCallbackOperationIndustryTileData data = *(op.data.indtile); AnalyseCallbackOperationIndustryTileData data = *(op.data.indtile);
data.check_mask = new_check_mask; data.check_mask = new_check_mask;
AnalyseCallbackOperation sub_op; AnalyseCallbackOperation sub_op(ACOM_INDUSTRY_TILE);
sub_op.mode = ACOM_INDUSTRY_TILE;
sub_op.data.indtile = &data; sub_op.data.indtile = &data;
range.group->AnalyseCallbacks(sub_op); range.group->AnalyseCallbacks(sub_op);
@@ -251,8 +246,7 @@ void DeterministicSpriteGroup::AnalyseCallbacks(AnalyseCallbackOperation &op) co
AnalyseCallbackOperationIndustryTileData data = *(op.data.indtile); AnalyseCallbackOperationIndustryTileData data = *(op.data.indtile);
data.check_mask = default_mask; data.check_mask = default_mask;
AnalyseCallbackOperation sub_op; AnalyseCallbackOperation sub_op(ACOM_INDUSTRY_TILE);
sub_op.mode = ACOM_INDUSTRY_TILE;
sub_op.data.indtile = &data; sub_op.data.indtile = &data;
this->default_group->AnalyseCallbacks(sub_op); this->default_group->AnalyseCallbacks(sub_op);

View File

@@ -43,7 +43,7 @@ struct AnalyseCallbackOperation {
}; };
btree::btree_set<const SpriteGroup *> seen; btree::btree_set<const SpriteGroup *> seen;
AnalyseCallbackOperationMode mode = ACOM_CB_VAR; AnalyseCallbackOperationMode mode;
SpriteGroupCallbacksUsed callbacks_used = SGCU_NONE; SpriteGroupCallbacksUsed callbacks_used = SGCU_NONE;
AnalyseCallbackOperationResultFlags result_flags = ACORF_NONE; AnalyseCallbackOperationResultFlags result_flags = ACORF_NONE;
uint64 properties_used = 0; uint64 properties_used = 0;
@@ -51,6 +51,9 @@ struct AnalyseCallbackOperation {
FindCBResultData cb_result; FindCBResultData cb_result;
AnalyseCallbackOperationIndustryTileData *indtile; AnalyseCallbackOperationIndustryTileData *indtile;
} data; } data;
AnalyseCallbackOperation(AnalyseCallbackOperationMode mode) :
mode(mode) {}
}; };
#endif /* NEWGRF_ANALYSIS_H */ #endif /* NEWGRF_ANALYSIS_H */

View File

@@ -1602,7 +1602,7 @@ void AnalyseEngineCallbacks()
auto process_sg = [&](const SpriteGroup *sg, bool is_purchase) { auto process_sg = [&](const SpriteGroup *sg, bool is_purchase) {
if (sg == nullptr) return; if (sg == nullptr) return;
AnalyseCallbackOperation op; AnalyseCallbackOperation op(ACOM_CB_VAR);
sg->AnalyseCallbacks(op); sg->AnalyseCallbacks(op);
callbacks_used |= op.callbacks_used; callbacks_used |= op.callbacks_used;
cb36_properties_used |= op.properties_used; cb36_properties_used |= op.properties_used;

View File

@@ -444,8 +444,7 @@ void AnalyseIndustryTileSpriteGroups()
data.layout_index = idx + 1; data.layout_index = idx + 1;
data.anim_state_at_offset = false; data.anim_state_at_offset = false;
AnalyseCallbackOperation op; AnalyseCallbackOperation op(ACOM_INDUSTRY_TILE);
op.mode = ACOM_INDUSTRY_TILE;
op.data.indtile = &data; op.data.indtile = &data;
tilespec.grf_prop.spritegroup[0]->AnalyseCallbacks(op); tilespec.grf_prop.spritegroup[0]->AnalyseCallbacks(op);