VarAction2: Add constructor for AnalyseCallbackOperation
This commit is contained in:
@@ -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);
|
||||||
|
@@ -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 */
|
||||||
|
@@ -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;
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user