src/ai/api/ai_sign.cpp
author rubidium
Sat, 14 Apr 2007 20:38:10 +0000
branchnoai
changeset 9594 5009a30f320a
parent 9561 33b2f192bb34
child 9599 949374e83b78
permissions -rw-r--r--
(svn r9627) [NoAI] -Fix: let the squirrel export script export all needed (and a few more) types of references to structs and classes.
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     1
/* $Id$ */
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     2
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     3
/** @file ai_sign.cpp handles all functions of the AISign class */
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     4
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     5
#include "ai_sign.hpp"
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     6
#include "table/strings.h"
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     7
#include "../../command.h"
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     8
#include "../../signs.h"
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
     9
#include "../../strings.h"
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    10
#include "../../variables.h" /* For SetDParam */
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    11
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    12
SignID AISign::GetMaxSignID()
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    13
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    14
	return ::GetMaxSignIndex();
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    15
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    16
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    17
int32 AISign::GetSignCount()
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    18
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    19
	return ::GetNumSigns();
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    20
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    21
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    22
/* static */ bool AISign::IsValidSign(SignID sign_id)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    23
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    24
	return ::IsValidSignID(sign_id);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    25
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    26
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    27
char *AISign::GetText(SignID sign_id)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    28
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    29
	if (!AISign::IsValidSign(sign_id)) return NULL;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    30
	static const int len = 64;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    31
	char *sign_name = MallocT<char>(len);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    32
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    33
	::GetString(sign_name, ::GetSign(sign_id)->str, &sign_name[len - 1]);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    34
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    35
	return sign_name;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    36
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    37
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    38
TileIndex AISign::GetLocation(SignID sign_id)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    39
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    40
	if (!AISign::IsValidSign(sign_id)) return INVALID_TILE;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    41
	const Sign *sign = ::GetSign(sign_id);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    42
	return ::TileVirtXY(sign->x, sign->y);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    43
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    44
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    45
bool AISign::RemoveSign(SignID sign_id)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    46
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    47
	_cmd_text = "";
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    48
	return this->DoCommand(0, sign_id, 0, CMD_RENAME_SIGN);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    49
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    50
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    51
SignID AISign::BuildSign(TileIndex location, const char *text)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    52
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    53
	if (!::IsValidTile(location)) return INVALID_SIGN;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    54
9560
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    55
	/* Reset the internal NewSignID in case we are in TestMode */
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    56
	AIObject::SetNewSignID(0);
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    57
9561
33b2f192bb34 (svn r9499) [NoAI] -Revert r9498: reverted part of ai_sign.cpp, as by policy this is the road we take
truelight
parents: 9560
diff changeset
    58
	bool ret = this->DoCommand(location, 0, 0, CMD_PLACE_SIGN);
33b2f192bb34 (svn r9499) [NoAI] -Revert r9498: reverted part of ai_sign.cpp, as by policy this is the road we take
truelight
parents: 9560
diff changeset
    59
	if (!ret) return INVALID_SIGN;
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    60
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    61
	SignID new_sign_id = AIObject::GetNewSignID();
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    62
	_cmd_text = text;
9561
33b2f192bb34 (svn r9499) [NoAI] -Revert r9498: reverted part of ai_sign.cpp, as by policy this is the road we take
truelight
parents: 9560
diff changeset
    63
	ret = this->DoCommand(0, new_sign_id, 0, CMD_RENAME_SIGN);
33b2f192bb34 (svn r9499) [NoAI] -Revert r9498: reverted part of ai_sign.cpp, as by policy this is the road we take
truelight
parents: 9560
diff changeset
    64
	if (!ret) {
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    65
		this->RemoveSign(new_sign_id);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    66
		return INVALID_SIGN;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    67
	}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    68
	return new_sign_id;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    69
}