Changeset - r10624:44138dbb3250
[Not reviewed]
master
0 3 0
rubidium - 15 years ago 2009-01-08 14:55:28
rubidium@openttd.org
(svn r14916) -Codechange: make it possible to send CommandContainers directly to DoCommand(P).
3 files changed with 32 insertions and 12 deletions:
0 comments (0 inline, 0 general)
src/command.cpp
Show inline comments
 
@@ -373,6 +373,19 @@ byte GetCommandFlags(uint32 cmd)
 

	
 
static int _docommand_recursive = 0;
 

	
 
/**
 
 * Shorthand for calling the long DoCommand with a container.
 
 *
 
 * @param container Container with (almost) all information
 
 * @param flags Flags for the command and how to execute the command
 
 * @see CommandProc
 
 * @return the cost
 
 */
 
CommandCost DoCommand(const CommandContainer *container, uint32 flags)
 
{
 
	return DoCommand(container->tile, container->p1, container->p2, flags, container->cmd, container->text);
 
}
 

	
 
/*!
 
 * This function executes a given command with the parameters from the #CommandProc parameter list.
 
 * Depending on the flags parameter it execute or test a command.
 
@@ -383,6 +396,7 @@ static int _docommand_recursive = 0;
 
 * @param flags Flags for the command and how to execute the command
 
 * @param cmd The command-id to execute (a value of the CMD_* enums)
 
 * @see CommandProc
 
 * @return the cost
 
 */
 
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32 cmd, const char *text)
 
{
 
@@ -457,6 +471,17 @@ Money GetAvailableMoneyForCommand()
 
	return GetCompany(company)->money;
 
}
 

	
 
/**
 
 * Shortcut for the long DoCommandP when having a container with the data.
 
 * @param container the container with information.
 
 * @param my_cmd indicator if the command is from a company or server (to display error messages for a user)
 
 * @return true if the command succeeded, else false
 
 */
 
bool DoCommandP(const CommandContainer *container, bool my_cmd)
 
{
 
	return DoCommandP(container->tile, container->p1, container->p2, container->cmd, container->callback, container->text, my_cmd);
 
}
 

	
 
/*!
 
 * Toplevel network safe docommand function for the current company. Must not be called recursively.
 
 * The callback is called when the command succeeded or failed. The parameters
src/command_func.h
Show inline comments
 
@@ -54,11 +54,13 @@ static const CommandCost CMD_ERROR = Com
 
 * Execute a command
 
 */
 
CommandCost DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint32 flags, uint32 cmd, const char *text = NULL);
 
CommandCost DoCommand(const CommandContainer *container, uint32 flags);
 

	
 
/**
 
 * Execute a network safe DoCommand function
 
 */
 
bool DoCommandP(TileIndex tile, uint32 p1, uint32 p2, uint32 cmd, CommandCallback *callback = NULL, const char *text = NULL, bool my_cmd = true);
 
bool DoCommandP(const CommandContainer *container, bool my_cmd = true);
 

	
 
#ifdef ENABLE_NETWORK
 

	
src/network/network_command.cpp
Show inline comments
 
@@ -93,16 +93,6 @@ void NetworkSend_Command(TileIndex tile,
 
}
 

	
 
/**
 
 * Execute a DoCommand we received from the network
 
 * @param cp the command to execute
 
 */
 
static void NetworkExecuteCommand(CommandPacket *cp)
 
{
 
	_current_company = cp->company;
 
	DoCommandP(cp->tile, cp->p1, cp->p2, cp->cmd | CMD_NETWORK_COMMAND, cp->callback, cp->text, cp->my_cmd);
 
}
 

	
 
/**
 
 * Execute all commands on the local command queue that ought to be executed this frame.
 
 */
 
void NetworkExecuteLocalCommandQueue()
 
@@ -119,10 +109,13 @@ void NetworkExecuteLocalCommandQueue()
 
			error("[net] Trying to execute a packet in the past!");
 
		}
 

	
 
		CommandPacket *cp = _local_command_queue;
 

	
 
		/* We can execute this command */
 
		NetworkExecuteCommand(_local_command_queue);
 
		_current_company = cp->company;
 
		cp->cmd |= CMD_NETWORK_COMMAND;
 
		DoCommandP(cp, cp->my_cmd);
 

	
 
		CommandPacket *cp = _local_command_queue;
 
		_local_command_queue = _local_command_queue->next;
 
		free(cp);
 
	}
0 comments (0 inline, 0 general)