MCPcopy Create free account
hub / github.com/BohemiaInteractive/CWR / ObjSetPosASL

Function ObjSetPosASL

engine/Poseidon/Game/Commands/GameStateExtGrp.cpp:1614–1694  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1612}
1613
1614GameValue ObjSetPosASL(const GameState* state, GameValuePar oper1, GameValuePar oper2)
1615{
1616 Object* obj = GetObject(oper1);
1617 if (!obj)
1618 {
1619 return NOTHING;
1620 }
1621
1622 Vector3 pos;
1623 if (!GetVector(pos, oper2))
1624 {
1625 return NOTHING;
1626 }
1627 if (obj->GetType() == Primary || obj->GetType() == Network)
1628 {
1629 return NOTHING;
1630 }
1631
1632 // let vehicle adjust position
1633
1634 Matrix4 trans = obj->Transform();
1635 trans.SetPosition(pos);
1636
1637 EntityAI* veh = dyn_cast<EntityAI>(obj);
1638 if (veh)
1639 {
1640 veh->IsMoved();
1641 }
1642
1643 Person* soldier = dyn_cast<Person>(veh);
1644 if (soldier)
1645 {
1646 AIUnit* unit = soldier->Brain();
1647 if (unit)
1648 {
1649 Transport* transport = unit->GetVehicleIn();
1650 if (transport)
1651 {
1652 bool isFocused = unit == GWorld->FocusOn();
1653 Matrix4 transform = soldier->Transform();
1654 transform.SetPosition(pos);
1655 transport->GetOutFinished(unit);
1656 if (soldier == transport->Driver())
1657 {
1658 transport->GetOutDriver(transform);
1659 if (unit->GetGroup())
1660 {
1661 unit->GetGroup()->CalculateMaximalStrength();
1662 }
1663 }
1664 else if (soldier == transport->Commander())
1665 {
1666 transport->GetOutCommander(transform);
1667 }
1668 else if (soldier == transport->Gunner())
1669 {
1670 transport->GetOutGunner(transform);
1671 }

Callers

nothing calls this directly

Calls 15

GetVectorFunction · 0.85
IsMovedMethod · 0.80
BrainMethod · 0.80
GetVehicleInMethod · 0.80
FocusOnMethod · 0.80
GetOutFinishedMethod · 0.80
DriverMethod · 0.80
GetOutDriverMethod · 0.80
GetOutCommanderMethod · 0.80
GunnerMethod · 0.80
GetOutGunnerMethod · 0.80

Tested by

no test coverage detected