| 1284 | DEFINE_COMMAND(Follow) |
| 1285 | |
| 1286 | GameValue VehWatch(const GameState* state, GameValuePar oper1, GameValuePar oper2, bool silent) |
| 1287 | { |
| 1288 | PackedBoolArray list; |
| 1289 | AIGroup* grp = GetUnits(state, oper1, list); |
| 1290 | if (!grp) |
| 1291 | { |
| 1292 | return NOTHING; |
| 1293 | } |
| 1294 | Vector3 pos; |
| 1295 | Target* tgt = nullptr; |
| 1296 | Object* obj = nullptr; |
| 1297 | bool noTgt = false; |
| 1298 | if (oper2.GetType() == GameObject) |
| 1299 | { |
| 1300 | obj = GetObject(oper2); |
| 1301 | if (!obj) |
| 1302 | { |
| 1303 | noTgt = true; |
| 1304 | } |
| 1305 | else |
| 1306 | { |
| 1307 | EntityAI* veh = dyn_cast<EntityAI>(obj); |
| 1308 | if (!veh) |
| 1309 | { |
| 1310 | pos = obj->Position(); |
| 1311 | } |
| 1312 | else |
| 1313 | { |
| 1314 | tgt = FindTargetReveal(grp, veh); |
| 1315 | if (!tgt) |
| 1316 | { |
| 1317 | pos = obj->Position(); |
| 1318 | } |
| 1319 | } |
| 1320 | } |
| 1321 | } |
| 1322 | else if (!GetPos(state, pos, oper2)) |
| 1323 | { |
| 1324 | return NOTHING; |
| 1325 | } |
| 1326 | if (noTgt) |
| 1327 | { |
| 1328 | grp->SendState(new RadioMessageWatchAuto(grp, list), silent); |
| 1329 | } |
| 1330 | else if (tgt) |
| 1331 | { |
| 1332 | grp->SendState(new RadioMessageWatchTgt(grp, list, tgt), silent); |
| 1333 | } |
| 1334 | else |
| 1335 | { |
| 1336 | grp->SendState(new RadioMessageWatchPos(grp, list, pos), silent); |
| 1337 | } |
| 1338 | return NOTHING; |
| 1339 | } |
| 1340 | |
| 1341 | DEFINE_COMMAND(Watch) |
| 1342 | |