mirror of
https://github.com/JGRennison/OpenTTD-patches.git
synced 2024-11-04 06:00:15 +00:00
(svn r22656) -Codechange: Deduplicate the custom error message of the industry shape and location callbacks.
This commit is contained in:
parent
b7d1196093
commit
b31cf48c3a
@ -24,6 +24,9 @@
|
||||
#include "newgrf_object.h"
|
||||
#include "genworld.h"
|
||||
#include "newgrf_spritegroup.h"
|
||||
#include "newgrf_text.h"
|
||||
|
||||
#include "table/strings.h"
|
||||
|
||||
/**
|
||||
* Constructor of generic class
|
||||
@ -446,6 +449,30 @@ uint32 GetNearbyTileInformation(TileIndex tile)
|
||||
return tile_type << 24 | z << 16 | terrain_type << 8 | tileh;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the error message from a shape/location/slope check callback result.
|
||||
* @param cb_res Callback result to translate. If bit 10 is set this is a standard error message, otherwise a NewGRF provided string.
|
||||
* @param grfid grfID to use to resolve a custom error message.
|
||||
* @param default_error Error message to use for the generic error.
|
||||
* @return CommandCost indicating success or the error message.
|
||||
*/
|
||||
CommandCost GetErrorMessageFromLocationCallbackResult(uint16 cb_res, uint32 grfid, StringID default_error)
|
||||
{
|
||||
CommandCost res;
|
||||
switch (cb_res) {
|
||||
case 0x400: return res; // No error.
|
||||
case 0x401: res = CommandCost(default_error); break;
|
||||
case 0x402: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST); break;
|
||||
case 0x403: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT); break;
|
||||
default: res = CommandCost(GetGRFStringID(grfid, 0xD000 + cb_res)); break;
|
||||
}
|
||||
|
||||
/* Copy some parameters from the registers to the error message text ref. stack */
|
||||
res.UseTextRefStack(4);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
/* static */ SmallVector<DrawTileSeqStruct, 8> NewGRFSpriteLayout::result_seq;
|
||||
|
||||
/**
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "sprite.h"
|
||||
#include "core/alloc_type.hpp"
|
||||
#include "core/smallvec_type.hpp"
|
||||
#include "command_type.h"
|
||||
|
||||
/** Context for tile accesses */
|
||||
enum TileContext {
|
||||
@ -267,6 +268,7 @@ extern ObjectOverrideManager _object_mngr;
|
||||
uint32 GetTerrainType(TileIndex tile, TileContext context = TCX_NORMAL);
|
||||
TileIndex GetNearbyTile(byte parameter, TileIndex tile, bool signed_offsets = true);
|
||||
uint32 GetNearbyTileInformation(TileIndex tile);
|
||||
CommandCost GetErrorMessageFromLocationCallbackResult(uint16 cb_res, uint32 grfid, StringID default_error);
|
||||
|
||||
/**
|
||||
* Data related to the handling of grf files.
|
||||
|
@ -544,20 +544,9 @@ CommandCost CheckIfCallBackAllowsCreation(TileIndex tile, IndustryType type, uin
|
||||
* the building of the industry, as that's how it's done in TTDP. */
|
||||
if (group == NULL) return CommandCost();
|
||||
uint16 result = group->GetCallbackResult();
|
||||
if (result == 0x400 || result == CALLBACK_FAILED) return CommandCost();
|
||||
if (result == CALLBACK_FAILED) return CommandCost();
|
||||
|
||||
CommandCost res;
|
||||
switch (result) {
|
||||
case 0x401: res = CommandCost(STR_ERROR_SITE_UNSUITABLE); break;
|
||||
case 0x402: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST); break;
|
||||
case 0x403: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT); break;
|
||||
default: res = CommandCost(GetGRFStringID(indspec->grf_prop.grffile->grfid, 0xD000 + result)); break;
|
||||
}
|
||||
|
||||
/* Copy some parameters from the registers to the error message text ref. stack */
|
||||
res.UseTextRefStack(4);
|
||||
|
||||
return res;
|
||||
return GetErrorMessageFromLocationCallbackResult(result, indspec->grf_prop.grffile->grfid, STR_ERROR_SITE_UNSUITABLE);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -303,20 +303,8 @@ CommandCost PerformIndustryTileSlopeCheck(TileIndex ind_base_tile, TileIndex ind
|
||||
if (callback_res != 0) return CommandCost();
|
||||
return_cmd_error(STR_ERROR_SITE_UNSUITABLE);
|
||||
}
|
||||
if (callback_res == 0x400) return CommandCost();
|
||||
|
||||
CommandCost res;
|
||||
switch (callback_res) {
|
||||
case 0x401: res = CommandCost(STR_ERROR_SITE_UNSUITABLE); break;
|
||||
case 0x402: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_RAINFOREST); break;
|
||||
case 0x403: res = CommandCost(STR_ERROR_CAN_ONLY_BE_BUILT_IN_DESERT); break;
|
||||
default: res = CommandCost(GetGRFStringID(its->grf_prop.grffile->grfid, 0xD000 + callback_res)); break;
|
||||
}
|
||||
|
||||
/* Copy some parameters from the registers to the error message text ref. stack */
|
||||
res.UseTextRefStack(4);
|
||||
|
||||
return res;
|
||||
return GetErrorMessageFromLocationCallbackResult(callback_res, its->grf_prop.grffile->grfid, STR_ERROR_SITE_UNSUITABLE);
|
||||
}
|
||||
|
||||
/* Simple wrapper for GetHouseCallback to keep the animation unified. */
|
||||
|
Loading…
Reference in New Issue
Block a user