rubidium@9511: /* $Id$ */ rubidium@9511: rubidium@9511: /** @file ai_sign.cpp handles all functions of the AISign class */ rubidium@9511: rubidium@9511: #include "ai_sign.hpp" rubidium@9511: #include "table/strings.h" rubidium@9511: #include "../../command.h" rubidium@9599: #include "../../landscape.h" rubidium@9511: #include "../../signs.h" rubidium@9511: #include "../../strings.h" rubidium@9511: #include "../../variables.h" /* For SetDParam */ rubidium@9511: rubidium@9511: SignID AISign::GetMaxSignID() rubidium@9511: { rubidium@9511: return ::GetMaxSignIndex(); rubidium@9511: } rubidium@9511: rubidium@9511: 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: rubidium@9511: char *AISign::GetText(SignID sign_id) rubidium@9511: { rubidium@9511: if (!AISign::IsValidSign(sign_id)) return NULL; rubidium@9511: static const int len = 64; rubidium@9511: char *sign_name = MallocT(len); rubidium@9511: rubidium@9511: ::GetString(sign_name, ::GetSign(sign_id)->str, &sign_name[len - 1]); rubidium@9511: rubidium@9511: return sign_name; rubidium@9511: } rubidium@9511: rubidium@9511: TileIndex AISign::GetLocation(SignID sign_id) rubidium@9511: { rubidium@9511: if (!AISign::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: rubidium@9511: bool AISign::RemoveSign(SignID sign_id) rubidium@9511: { rubidium@9511: _cmd_text = ""; rubidium@9511: return this->DoCommand(0, sign_id, 0, CMD_RENAME_SIGN); rubidium@9511: } rubidium@9511: rubidium@9511: 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: truelight@9561: bool ret = this->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; truelight@9561: ret = this->DoCommand(0, new_sign_id, 0, CMD_RENAME_SIGN); truelight@9561: if (!ret) { rubidium@9511: this->RemoveSign(new_sign_id); rubidium@9511: return INVALID_SIGN; rubidium@9511: } rubidium@9511: return new_sign_id; rubidium@9511: }