Files @ r25958:603d75b53498
Branch filter:

Location: cpp/openttd-patchpack/source/src/signs_cmd.cpp - annotation

Patric Stout
Doc: update multiplayer documentation with latest changes (#9552)

Although several places were fixed during the PR making the change,
not all made it in this document.

While at it, removed all kinds of Markdown warnings by an excessive
usage of spacebar in this document.
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r12768:980ae0491352
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r23437:6ce81d75a8ed
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r21383:942c32fb8b0e
r21383:942c32fb8b0e
r17625:366001a31c88
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r13057:58af81fcdcf8
r13057:58af81fcdcf8
r11345:85f52e96797f
r25562:30716ba6a396
r11345:85f52e96797f
r11345:85f52e96797f
r11725:57bc99fdc1bc
r11345:85f52e96797f
r11345:85f52e96797f
r25562:30716ba6a396
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r18969:91e591a12593
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r18245:fb370bf5a3c0
r25562:30716ba6a396
r25428:48f543d34f61
r11345:85f52e96797f
r23512:89adada9c9f0
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r15610:623a23fb6560
r15610:623a23fb6560
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r13057:58af81fcdcf8
r13057:58af81fcdcf8
r11345:85f52e96797f
r25562:30716ba6a396
r11345:85f52e96797f
r11944:3b8f9f948e8d
r23607:36c15679007d
r18969:91e591a12593
r11345:85f52e96797f
r11345:85f52e96797f
r25562:30716ba6a396
r16672:c10913372b81
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r24214:a65c412aafcc
r18969:91e591a12593
r11345:85f52e96797f
r12381:5e06b887e97b
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r23514:44f7e602e9c5
r23942:2580b984b22e
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r14220:2b66d13ca715
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r23818:7609f20f2104
r11345:85f52e96797f
r23818:7609f20f2104
r11345:85f52e96797f
r14220:2b66d13ca715
r14220:2b66d13ca715
r14220:2b66d13ca715
r14220:2b66d13ca715
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11345:85f52e96797f
r11725:57bc99fdc1bc
r11345:85f52e96797f
/*
 * This file is part of OpenTTD.
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 */

/** @file signs_cmd.cpp Handling of sign related commands. */

#include "stdafx.h"
#include "landscape.h"
#include "company_func.h"
#include "signs_base.h"
#include "signs_func.h"
#include "command_func.h"
#include "tilehighlight_func.h"
#include "viewport_kdtree.h"
#include "window_func.h"
#include "string_func.h"

#include "table/strings.h"

#include "safeguards.h"

/** The last built sign. */
SignID _new_sign_id;

/**
 * Place a sign at the given coordinates. Ownership of sign has
 * no effect whatsoever except for the colour the sign gets for easy recognition,
 * but everybody is able to rename/remove it.
 * @param tile tile to place sign at
 * @param flags type of operation
 * @param p1 unused
 * @param p2 unused
 * @param text unused
 * @return the cost of this operation or an error
 */
CommandCost CmdPlaceSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text)
{
	/* Try to locate a new sign */
	if (!Sign::CanAllocateItem()) return_cmd_error(STR_ERROR_TOO_MANY_SIGNS);

	/* Check sign text length if any */
	if (Utf8StringLength(text) >= MAX_LENGTH_SIGN_NAME_CHARS) return CMD_ERROR;

	/* When we execute, really make the sign */
	if (flags & DC_EXEC) {
		Sign *si = new Sign(_game_mode == GM_EDITOR ? OWNER_DEITY : _current_company);
		int x = TileX(tile) * TILE_SIZE;
		int y = TileY(tile) * TILE_SIZE;

		si->x = x;
		si->y = y;
		si->z = GetSlopePixelZ(x, y);
		if (!text.empty()) {
			si->name = text;
		}
		si->UpdateVirtCoord();
		InvalidateWindowData(WC_SIGN_LIST, 0, 0);
		_new_sign_id = si->index;
	}

	return CommandCost();
}

/**
 * Rename a sign. If the new name of the sign is empty, we assume
 * the user wanted to delete it. So delete it. Ownership of signs
 * has no meaning/effect whatsoever except for eyecandy
 * @param tile unused
 * @param flags type of operation
 * @param p1 index of the sign to be renamed/removed
 * @param p2 unused
 * @param text the new name or an empty string when resetting to the default
 * @return the cost of this operation or an error
 */
CommandCost CmdRenameSign(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32 p2, const std::string &text)
{
	Sign *si = Sign::GetIfValid(p1);
	if (si == nullptr) return CMD_ERROR;
	if (si->owner == OWNER_DEITY && _current_company != OWNER_DEITY && _game_mode != GM_EDITOR) return CMD_ERROR;

	/* Rename the signs when empty, otherwise remove it */
	if (!text.empty()) {
		if (Utf8StringLength(text) >= MAX_LENGTH_SIGN_NAME_CHARS) return CMD_ERROR;

		if (flags & DC_EXEC) {
			/* Assign the new one */
			si->name = text;
			if (_game_mode != GM_EDITOR) si->owner = _current_company;

			si->UpdateVirtCoord();
			InvalidateWindowData(WC_SIGN_LIST, 0, 1);
		}
	} else { // Delete sign
		if (flags & DC_EXEC) {
			si->sign.MarkDirty();
			if (si->sign.kdtree_valid) _viewport_sign_kdtree.Remove(ViewportSignKdtreeItem::MakeSign(si->index));
			delete si;

			InvalidateWindowData(WC_SIGN_LIST, 0, 0);
		}
	}

	return CommandCost();
}

/**
 * Callback function that is called after a sign is placed
 * @param result of the operation
 * @param tile unused
 * @param p1 unused
 * @param p2 unused
 * @param cmd unused
 */
void CcPlaceSign(const CommandCost &result, TileIndex tile, uint32 p1, uint32 p2, uint32 cmd)
{
	if (result.Failed()) return;

	ShowRenameSignWindow(Sign::Get(_new_sign_id));
	ResetObjectToPlace();
}

/**
 *
 * PlaceProc function, called when someone pressed the button if the
 *  sign-tool is selected
 * @param tile on which to place the sign
 */
void PlaceProc_Sign(TileIndex tile)
{
	DoCommandP(tile, 0, 0, CMD_PLACE_SIGN | CMD_MSG(STR_ERROR_CAN_T_PLACE_SIGN_HERE), CcPlaceSign);
}