rubidium@9511: /* $Id$ */ rubidium@9511: truebrain@9833: /** @file ai_sign.cpp Implementation of AISign. */ rubidium@9511: rubidium@9511: #include "ai_sign.hpp" rubidium@9511: #include "table/strings.h" rubidium@9723: #include "../../command_func.h" rubidium@9723: #include "../../core/alloc_func.hpp" rubidium@9837: #include "../../signs_base.h" rubidium@9723: #include "../../strings_func.h" glx@9800: #include "../../tile_map.h" rubidium@9511: truebrain@9737: /* static */ SignID AISign::GetMaxSignID() rubidium@9511: { rubidium@9511: return ::GetMaxSignIndex(); rubidium@9511: } rubidium@9511: truebrain@9737: /* static */ int32 AISign::GetSignCount() rubidium@9511: { rubidium@9511: return ::GetNumSigns(); rubidium@9511: } rubidium@9511: rubidium@9511: /* static */ bool AISign::IsValidSign(SignID sign_id) rubidium@9511: { rubidium@9511: return ::IsValidSignID(sign_id); rubidium@9511: } rubidium@9511: truebrain@9737: /* static */ char *AISign::GetText(SignID sign_id) rubidium@9511: { truebrain@9736: if (!IsValidSign(sign_id)) return NULL; rubidium@9511: static const int len = 64; rubidium@9511: char *sign_name = MallocT(len); rubidium@9511: rubidium@9724: ::SetDParam(0, sign_id); rubidium@9724: ::GetString(sign_name, STR_SIGN_NAME, &sign_name[len - 1]); rubidium@9511: rubidium@9511: return sign_name; rubidium@9511: } rubidium@9511: truebrain@9737: /* static */ TileIndex AISign::GetLocation(SignID sign_id) rubidium@9511: { truebrain@9736: if (!IsValidSign(sign_id)) return INVALID_TILE; rubidium@9511: const Sign *sign = ::GetSign(sign_id); rubidium@9511: return ::TileVirtXY(sign->x, sign->y); rubidium@9511: } rubidium@9511: truebrain@9737: /* static */ bool AISign::RemoveSign(SignID sign_id) rubidium@9511: { rubidium@9511: _cmd_text = ""; truebrain@9737: return AIObject::DoCommand(0, sign_id, 0, CMD_RENAME_SIGN); rubidium@9511: } rubidium@9511: truebrain@9737: /* static */ SignID AISign::BuildSign(TileIndex location, const char *text) rubidium@9511: { rubidium@9511: if (!::IsValidTile(location)) return INVALID_SIGN; rubidium@9511: truelight@9560: /* Reset the internal NewSignID in case we are in TestMode */ truelight@9560: AIObject::SetNewSignID(0); truelight@9560: truebrain@9737: bool ret = AIObject::DoCommand(location, 0, 0, CMD_PLACE_SIGN); truelight@9561: if (!ret) return INVALID_SIGN; rubidium@9511: rubidium@9511: SignID new_sign_id = AIObject::GetNewSignID(); rubidium@9511: _cmd_text = text; truebrain@9737: ret = AIObject::DoCommand(0, new_sign_id, 0, CMD_RENAME_SIGN); truelight@9561: if (!ret) { truebrain@9737: RemoveSign(new_sign_id); rubidium@9511: return INVALID_SIGN; rubidium@9511: } rubidium@9511: return new_sign_id; rubidium@9511: }