| 1481 | } |
| 1482 | |
| 1483 | MovementState BattleUnitMission::getNextMovementState(GameState &, BattleUnit &u) |
| 1484 | { |
| 1485 | if (cancelled) |
| 1486 | { |
| 1487 | return MovementState::None; |
| 1488 | } |
| 1489 | switch (this->type) |
| 1490 | { |
| 1491 | case Type::Brainsuck: |
| 1492 | return MovementState::Brainsuck; |
| 1493 | case Type::GotoLocation: |
| 1494 | case Type::ReachGoal: |
| 1495 | if (u.current_body_state == BodyState::Jumping || |
| 1496 | u.target_body_state == BodyState::Jumping || targetBodyState == BodyState::Jumping) |
| 1497 | { |
| 1498 | if (u.agent->isMovementStateAllowed(MovementState::Normal)) |
| 1499 | { |
| 1500 | return MovementState::Normal; |
| 1501 | } |
| 1502 | else |
| 1503 | { |
| 1504 | LogError("Agent with allowed Jumping body state does not have allowed Normal " |
| 1505 | "movement"); |
| 1506 | return u.current_movement_state; |
| 1507 | } |
| 1508 | } |
| 1509 | switch (facingDelta) |
| 1510 | { |
| 1511 | case 0: |
| 1512 | case 1: |
| 1513 | case -1: |
| 1514 | // Normal movement |
| 1515 | return MovementState::None; |
| 1516 | case 2: |
| 1517 | case -2: |
| 1518 | if (u.agent->isMovementStateAllowed(MovementState::Strafing)) |
| 1519 | { |
| 1520 | return MovementState::Strafing; |
| 1521 | } |
| 1522 | else |
| 1523 | { |
| 1524 | cancelled = true; |
| 1525 | break; |
| 1526 | } |
| 1527 | case 3: |
| 1528 | case -3: |
| 1529 | case 4: |
| 1530 | if (u.agent->isMovementStateAllowed(MovementState::Reverse)) |
| 1531 | { |
| 1532 | return MovementState::Reverse; |
| 1533 | } |
| 1534 | else |
| 1535 | { |
| 1536 | cancelled = true; |
| 1537 | break; |
| 1538 | } |
| 1539 | default: |
| 1540 | LogError("Invalid facingDelta %d", facingDelta); |
no test coverage detected