src/ai/api/ai_sign.cpp
author rubidium
Thu, 03 Apr 2008 23:01:54 +0000
branchnoai
changeset 9865 f241472f09dc
parent 9837 c9ec4f82e0d0
child 10090 d6a6cac2fb25
permissions -rw-r--r--
(svn r12555) [NoAI] -Add: support for GetLastError for AICompany.
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
9833
89a64246458f (svn r12496) [NoAI] -Documentation: give the .cpp files a nice uniform format too
truebrain
parents: 9800
diff changeset
     3
/** @file ai_sign.cpp Implementation of AISign. */
9511
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"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9599
diff changeset
     7
#include "../../command_func.h"
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9599
diff changeset
     8
#include "../../core/alloc_func.hpp"
9837
c9ec4f82e0d0 (svn r12503) [NoAI] -Sync: with trunk r12461:12501.
rubidium
parents: 9833
diff changeset
     9
#include "../../signs_base.h"
9723
eee46cb39750 (svn r11796) [NoAI] -Sync: with trunk r11502:11795.
rubidium
parents: 9599
diff changeset
    10
#include "../../strings_func.h"
9800
ab08ca2a2018 (svn r12306) [NoAI] -Sync with trunk r12209:12304
glx
parents: 9737
diff changeset
    11
#include "../../tile_map.h"
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    12
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    13
/* static */ SignID AISign::GetMaxSignID()
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    14
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    15
	return ::GetMaxSignIndex();
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
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    18
/* static */ int32 AISign::GetSignCount()
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    19
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    20
	return ::GetNumSigns();
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
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    23
/* static */ bool AISign::IsValidSign(SignID sign_id)
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    24
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    25
	return ::IsValidSignID(sign_id);
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
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    28
/* static */ char *AISign::GetText(SignID sign_id)
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    29
{
9736
183b38e0a480 (svn r12215) [NoAI] -Codechange: added '::' if a function comes from non-AI-API functions (was inconsistant till now)
truebrain
parents: 9724
diff changeset
    30
	if (!IsValidSign(sign_id)) return NULL;
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    31
	static const int len = 64;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    32
	char *sign_name = MallocT<char>(len);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    33
9724
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    34
	::SetDParam(0, sign_id);
b39bc69bb2f2 (svn r12051) [NoAI] -Sync: with trunk (r11795:12050).
rubidium
parents: 9723
diff changeset
    35
	::GetString(sign_name, STR_SIGN_NAME, &sign_name[len - 1]);
9511
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
	return sign_name;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    38
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    39
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    40
/* static */ TileIndex AISign::GetLocation(SignID sign_id)
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    41
{
9736
183b38e0a480 (svn r12215) [NoAI] -Codechange: added '::' if a function comes from non-AI-API functions (was inconsistant till now)
truebrain
parents: 9724
diff changeset
    42
	if (!IsValidSign(sign_id)) return INVALID_TILE;
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    43
	const Sign *sign = ::GetSign(sign_id);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    44
	return ::TileVirtXY(sign->x, sign->y);
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    45
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    46
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    47
/* static */ bool AISign::RemoveSign(SignID sign_id)
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    48
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    49
	_cmd_text = "";
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    50
	return AIObject::DoCommand(0, sign_id, 0, CMD_RENAME_SIGN);
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    51
}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    52
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    53
/* static */ SignID AISign::BuildSign(TileIndex location, const char *text)
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    54
{
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    55
	if (!::IsValidTile(location)) return INVALID_SIGN;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    56
9560
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    57
	/* Reset the internal NewSignID in case we are in TestMode */
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    58
	AIObject::SetNewSignID(0);
ff2dde050a4c (svn r9498) [NoAI] -Add: added regression for AITransactionMode()
truelight
parents: 9511
diff changeset
    59
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    60
	bool ret = AIObject::DoCommand(location, 0, 0, CMD_PLACE_SIGN);
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
    61
	if (!ret) return INVALID_SIGN;
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    62
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    63
	SignID new_sign_id = AIObject::GetNewSignID();
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    64
	_cmd_text = text;
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    65
	ret = AIObject::DoCommand(0, new_sign_id, 0, CMD_RENAME_SIGN);
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
    66
	if (!ret) {
9737
ee408edf3851 (svn r12216) [NoAI] -Codechange: made most functions 'static', which removes the need to create an instance to get, for example, engine information, and therefor heavily simplifying AI creation (Morloth)
truebrain
parents: 9736
diff changeset
    67
		RemoveSign(new_sign_id);
9511
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    68
		return INVALID_SIGN;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    69
	}
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    70
	return new_sign_id;
f767ad06e86b (svn r9407) [NoAI] -Add: placing of signs.
rubidium
parents:
diff changeset
    71
}