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

Method Move

engine/Poseidon/World/Simulation/Simul.cpp:854–880  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

852}
853
854void PilotHead::Move(float deltaT, const Frame& newFrame, const Frame& oldFrame)
855{
856 float invDeltaT = 1 / deltaT;
857 Vector3Val oldNeckPos = oldFrame.PositionModelToWorld(_neck);
858 Vector3Val newNeckPos = newFrame.PositionModelToWorld(_neck);
859 Vector3Val neckSpeed = (newNeckPos - oldNeckPos) * invDeltaT;
860
861 Vector3Val posWEnd = oldFrame.PositionModelToWorld(_pos) + _speed * deltaT;
862 Vector3Val headWEnd = newFrame.PositionModelToWorld(_head);
863
864 Matrix4Val invTransform = newFrame.CalcInvTransform();
865 Vector3 oSpeed = invTransform.Rotate(_speed - neckSpeed);
866 _pos += oSpeed * deltaT;
867 saturate(_pos[0], _head[0] - _pars.maxAmp, _head[0] + _pars.maxAmp);
868 saturate(_pos[1], _head[1] - _pars.maxAmp, _head[1] + _pars.maxAmp);
869 saturate(_pos[2], _head[2] - _pars.maxAmp, _head[2] + _pars.maxAmp);
870 Vector3 norm = (_pos - _neck);
871 _pos = _neck + norm.Normalized() * _pars.radius;
872 Vector3 center = (headWEnd - posWEnd) * _pars.movement;
873 Vector3 friction = oSpeed * _pars.friction;
874 center = invTransform.Rotate(center);
875 Friction(oSpeed, friction, center, deltaT);
876 saturate(oSpeed[0], -_pars.maxSpeed, _pars.maxSpeed);
877 saturate(oSpeed[1], -_pars.maxSpeed, _pars.maxSpeed);
878 saturate(oSpeed[2], -_pars.maxSpeed, _pars.maxSpeed);
879 _speed = newFrame.DirectionModelToWorld(oSpeed) + neckSpeed;
880}
881
882void Friction(float& speed, float friction, float accel, float deltaT)
883{

Callers

nothing calls this directly

Calls 7

saturateFunction · 0.85
FrictionFunction · 0.85
PositionModelToWorldMethod · 0.80
CalcInvTransformMethod · 0.80
DirectionModelToWorldMethod · 0.80
RotateMethod · 0.45
NormalizedMethod · 0.45

Tested by

no test coverage detected