author | truelight |
Sat, 14 Jul 2007 21:15:49 +0000 | |
branch | noai |
changeset 9657 | f2c6e332d8bc |
parent 9629 | 66dde6412125 |
child 9680 | 5ed7bbfd51c7 |
permissions | -rw-r--r-- |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
1 |
/* $Id$ */ |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
2 |
|
9430
9e0a193b2bec
(svn r9234) [NoAI] -Codechange: move away from the 'much' subdirectory approach for the API implementation.
rubidium
parents:
9427
diff
changeset
|
3 |
/** @file ai_object.cpp handles the commands-related functions of the AIObject class */ |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
4 |
|
9430
9e0a193b2bec
(svn r9234) [NoAI] -Codechange: move away from the 'much' subdirectory approach for the API implementation.
rubidium
parents:
9427
diff
changeset
|
5 |
#include "ai_object.hpp" |
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
6 |
#include "../../command.h" |
9430
9e0a193b2bec
(svn r9234) [NoAI] -Codechange: move away from the 'much' subdirectory approach for the API implementation.
rubidium
parents:
9427
diff
changeset
|
7 |
#include "../../player.h" |
9511 | 8 |
#include "table/strings.h" // for signs.h |
9 |
#include "../../signs.h" // for _new_sign_id |
|
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
10 |
#include "../ai.h" |
9444
fd27df7ca2a0
(svn r9260) [NoAI] -Codechange: do the AI threading properly using a mutex and condition signalling.
rubidium
parents:
9441
diff
changeset
|
11 |
#include "../ai_threads.h" |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
12 |
|
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
13 |
void AIObject::SetDoCommandDelay(uint ticks) |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
14 |
{ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
15 |
assert(ticks > 0); |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
16 |
AIObject::GetDoCommandStruct(_current_player)->delay = ticks; |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
17 |
} |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
18 |
|
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
19 |
uint AIObject::GetDoCommandDelay() |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
20 |
{ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
21 |
return AIObject::GetDoCommandStruct(_current_player)->delay; |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
22 |
} |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
23 |
|
9473
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
24 |
void AIObject::SetDoCommandMode(AIModeProc *proc, AIObject *instance) |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
25 |
{ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
26 |
AIObject::GetDoCommandStruct(_current_player)->mode = proc; |
9473
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
27 |
AIObject::GetDoCommandStruct(_current_player)->mode_instance = instance; |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
28 |
} |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
29 |
|
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
30 |
AIModeProc *AIObject::GetDoCommandMode() |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
31 |
{ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
32 |
return AIObject::GetDoCommandStruct(_current_player)->mode; |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
33 |
} |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
34 |
|
9473
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
35 |
AIObject *AIObject::GetDoCommandModeInstance() |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
36 |
{ |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
37 |
return AIObject::GetDoCommandStruct(_current_player)->mode_instance; |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
38 |
} |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
39 |
|
9629 | 40 |
void AIObject::SetDoCommandCosts(Money value) |
9414
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
41 |
{ |
9629 | 42 |
AIObject::GetDoCommandStruct(_current_player)->costs = CommandCost(value); |
9414
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
43 |
} |
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
44 |
|
9629 | 45 |
void AIObject::IncreaseDoCommandCosts(Money value) |
9414
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
46 |
{ |
9629 | 47 |
AIObject::GetDoCommandStruct(_current_player)->costs.AddCost(value); |
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
48 |
} |
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
49 |
|
9629 | 50 |
Money AIObject::GetDoCommandCosts() |
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
51 |
{ |
9629 | 52 |
return AIObject::GetDoCommandStruct(_current_player)->costs.GetCost(); |
9414
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
53 |
} |
a7f7bbec08da
(svn r9212) [NoAI] -Add: added CmdFailed and CmdSucceeded in AIObject() and used it
truelight
parents:
9406
diff
changeset
|
54 |
|
9496
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
55 |
void AIObject::SetNewVehicleID(VehicleID vehicle) |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
56 |
{ |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
57 |
AIObject::GetDoCommandStruct(_current_player)->new_vehicle_id = vehicle; |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
58 |
} |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
59 |
|
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
60 |
VehicleID AIObject::GetNewVehicleID() |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
61 |
{ |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
62 |
return AIObject::GetDoCommandStruct(_current_player)->new_vehicle_id; |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
63 |
} |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
64 |
|
9511 | 65 |
void AIObject::SetNewSignID(SignID sign) |
66 |
{ |
|
67 |
AIObject::GetDoCommandStruct(_current_player)->new_sign_id = sign; |
|
68 |
} |
|
69 |
||
70 |
SignID AIObject::GetNewSignID() |
|
71 |
{ |
|
72 |
return AIObject::GetDoCommandStruct(_current_player)->new_sign_id; |
|
73 |
} |
|
74 |
||
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
75 |
AIObject::AIDoCommandStruct *AIObject::GetDoCommandStruct(PlayerID player) |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
76 |
{ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
77 |
/* Storage for data on per-AI level */ |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
78 |
static AIObject::AIDoCommandStruct command_struct[MAX_PLAYERS]; |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
79 |
|
9454
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
80 |
return &command_struct[player]; |
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
81 |
} |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
82 |
|
9454
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
83 |
void AIObject::ResetInternalPlayerData() |
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
84 |
{ |
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
85 |
AIObject::AIDoCommandStruct *command_struct = GetDoCommandStruct(_current_player); |
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
86 |
command_struct->mode = NULL; |
ee6a65b37b82
(svn r9284) [NoAI] -Fix: reset internal static AIObject data per AI on AI startup
truelight
parents:
9452
diff
changeset
|
87 |
command_struct->delay = 1; |
9629 | 88 |
command_struct->costs = CommandCost(); |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
89 |
} |
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
90 |
|
9486
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
91 |
bool AIObject::DoCommand(TileIndex tile, uint32 p1, uint32 p2, uint procc) |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
92 |
{ |
9486
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
93 |
uint32 flags = 0; |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
94 |
PlayerID old_lp; |
9629 | 95 |
CommandCost res; |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
96 |
const char* tmp_cmdtext; |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
97 |
|
9486
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
98 |
flags |= DC_NO_WATER; |
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
99 |
if (procc != CMD_LANDSCAPE_CLEAR) flags |= DC_AUTO; |
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
100 |
|
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
101 |
/* The test already resets _cmd_text, so backup the pointer */ |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
102 |
tmp_cmdtext = _cmd_text; |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
103 |
|
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
104 |
/* First, do a test-run to see if we can do this */ |
9486
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
105 |
res = ::DoCommand(tile, p1, p2, flags, procc); |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
106 |
/* The command failed, so return */ |
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
107 |
if (::CmdFailed(res)) return false; |
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
108 |
|
9473
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
109 |
/* Restore _cmd_text */ |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
110 |
_cmd_text = tmp_cmdtext; |
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
111 |
|
9450
d675836e865c
(svn r9278) [NoAI] -Add: added AISettings which adds the function to control the Delay-value on DoCommands
truelight
parents:
9444
diff
changeset
|
112 |
/* Check what the callback wants us to do */ |
9486
a9b5f6b8667c
(svn r9336) [NoAI] -Fix: remove 'flags' for AI DoCommand and detect its value automaticly
truelight
parents:
9473
diff
changeset
|
113 |
if (AIObject::GetDoCommandMode() != NULL && !AIObject::GetDoCommandMode()(tile, p1, p2, procc, res)) { |
9629 | 114 |
AIObject::IncreaseDoCommandCosts(res.GetCost()); |
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
115 |
return true; |
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
116 |
} |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
117 |
|
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
118 |
/* If we did a DC_EXEC, and the command did not return an error, execute it |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
119 |
* over the network */ |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
120 |
if (flags & DC_AUTO) procc |= CMD_AUTO; |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
121 |
if (flags & DC_NO_WATER) procc |= CMD_NO_WATER; |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
122 |
|
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
123 |
#ifdef ENABLE_NETWORK |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
124 |
/* Send the command */ |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
125 |
if (_networking) { |
9406
3500f836dc21
(svn r9203) [NoAI] -Fix: in SP do not switch _local_player, only in MP
truelight
parents:
9370
diff
changeset
|
126 |
/* NetworkSend_Command needs _local_player to be set correctly, so |
3500f836dc21
(svn r9203) [NoAI] -Fix: in SP do not switch _local_player, only in MP
truelight
parents:
9370
diff
changeset
|
127 |
* adjust it, and put it back right after the function */ |
3500f836dc21
(svn r9203) [NoAI] -Fix: in SP do not switch _local_player, only in MP
truelight
parents:
9370
diff
changeset
|
128 |
old_lp = _local_player; |
3500f836dc21
(svn r9203) [NoAI] -Fix: in SP do not switch _local_player, only in MP
truelight
parents:
9370
diff
changeset
|
129 |
_local_player = _current_player; |
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
130 |
::NetworkSend_Command(tile, p1, p2, procc, CcAI); |
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
131 |
_local_player = old_lp; |
9406
3500f836dc21
(svn r9203) [NoAI] -Fix: in SP do not switch _local_player, only in MP
truelight
parents:
9370
diff
changeset
|
132 |
|
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
133 |
/* Suspend the AI till the command is really executed */ |
9508
e2ff0ef99c76
(svn r9404) [NoAI] -Fix: one more MSVC2005 (KUDr)
truelight
parents:
9496
diff
changeset
|
134 |
AI_SuspendPlayer(_current_player, -(int)AIObject::GetDoCommandDelay()); |
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
135 |
/* Check if the callback still agrees with us, else return error */ |
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
136 |
if (!AI_GetCallbackResult(_current_player)) res = CMD_ERROR; |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
137 |
} else { |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
138 |
#else |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
139 |
{ |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
140 |
#endif |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
141 |
/* For SinglePlayer we execute the command immediatly */ |
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
142 |
::DoCommandP(tile, p1, p2, NULL, procc); |
9496
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
143 |
/* Store some values inside the AIObject static memory */ |
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
144 |
AIObject::SetNewVehicleID(_new_vehicle_id); |
9511 | 145 |
AIObject::SetNewSignID(_new_sign_id); |
9496
05ebee9884b3
(svn r9368) [NoAI] -Fix: store _new_vehicle_id directly after successful handling the command in a per-AI-player-safe piece of memory, so we can restore the value when ever we want later in the process
truelight
parents:
9486
diff
changeset
|
146 |
|
9441
03da911c8d5f
(svn r9255) [NoAI] -Add: each AI now runs in a seperate thread. The main thread is suspended if any AI thread is running, only one AI thread runs at the time.
truelight
parents:
9430
diff
changeset
|
147 |
/* Suspend the AI player for 1 tick, so it simulates MultiPlayer */ |
9473
dcbcd1c4496d
(svn r9318) [NoAI] -Add: added new param in ModeCallback: costs
truelight
parents:
9454
diff
changeset
|
148 |
AI_SuspendPlayer(_current_player, AIObject::GetDoCommandDelay()); |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
149 |
} |
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
150 |
|
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
151 |
if (::CmdFailed(res)) return false; |
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
152 |
|
9629 | 153 |
AIObject::IncreaseDoCommandCosts(res.GetCost()); |
9452
4c5eedbc3ba9
(svn r9282) [NoAI] -Add: added AIAccounting, which tracks the cost of your buying/selling.
truelight
parents:
9450
diff
changeset
|
154 |
return true; |
9361
7bb2bd22b16e
(svn r9144) [NoAI] -Change: moved command functions to AIObject, and made AIBase depend on AIObject
truelight
parents:
diff
changeset
|
155 |
} |