Support the <float/> property in actors
This was SVN commit r7883.
This commit is contained in:
parent
422da1aef0
commit
c728aa972c
@ -302,7 +302,7 @@ public:
|
||||
rotY = m_InterpolatedRotY;
|
||||
}
|
||||
|
||||
virtual CMatrix3D GetInterpolatedTransform(float frameOffset)
|
||||
virtual CMatrix3D GetInterpolatedTransform(float frameOffset, bool forceFloating)
|
||||
{
|
||||
if (!m_InWorld)
|
||||
{
|
||||
@ -320,7 +320,7 @@ public:
|
||||
if (!cmpTerrain.null())
|
||||
baseY = cmpTerrain->GetExactGroundLevel(x, z);
|
||||
|
||||
if (m_Floating)
|
||||
if (m_Floating || forceFloating)
|
||||
{
|
||||
CmpPtr<ICmpWaterManager> cmpWaterMan(GetSimContext(), SYSTEM_ENTITY);
|
||||
if (!cmpWaterMan.null())
|
||||
|
@ -212,7 +212,7 @@ void CCmpProjectileManager::AdvanceProjectile(const CSimContext& context, Projec
|
||||
CmpPtr<ICmpPosition> targetPos(context, projectile.targetEnt);
|
||||
if (!targetPos.null())
|
||||
{
|
||||
CMatrix3D t = targetPos->GetInterpolatedTransform(frameOffset);
|
||||
CMatrix3D t = targetPos->GetInterpolatedTransform(frameOffset, false);
|
||||
projectile.target = t.GetTranslation();
|
||||
projectile.target.Y += 2.f; // TODO: ought to aim towards a random point in the solid body of the target
|
||||
|
||||
|
@ -318,7 +318,9 @@ void CCmpVisualActor::Interpolate(const CSimContext& context, float frameTime, f
|
||||
|
||||
m_Hidden = false;
|
||||
|
||||
CMatrix3D transform(cmpPosition->GetInterpolatedTransform(frameOffset));
|
||||
bool floating = m_Unit->GetObject().m_Base->m_Properties.m_FloatOnWater;
|
||||
|
||||
CMatrix3D transform(cmpPosition->GetInterpolatedTransform(frameOffset, floating));
|
||||
|
||||
m_Unit->GetModel().SetTransform(transform);
|
||||
m_Unit->UpdateModel(frameTime);
|
||||
|
@ -143,7 +143,7 @@ public:
|
||||
* Get the current interpolated transform matrix, for rendering.
|
||||
* Must not be called unless IsInWorld is true.
|
||||
*/
|
||||
virtual CMatrix3D GetInterpolatedTransform(float frameOffset) = 0;
|
||||
virtual CMatrix3D GetInterpolatedTransform(float frameOffset, bool forceFloating) = 0;
|
||||
|
||||
DECLARE_INTERFACE_TYPE(Position)
|
||||
};
|
||||
|
@ -501,7 +501,7 @@ BEGIN_COMMAND(RotateObject)
|
||||
m_AngleOld = cmpPos->GetRotation().Y.ToFloat();
|
||||
if (msg->usetarget)
|
||||
{
|
||||
CMatrix3D transform = cmpPos->GetInterpolatedTransform(0.f);
|
||||
CMatrix3D transform = cmpPos->GetInterpolatedTransform(0.f, false);
|
||||
CVector3D pos = transform.GetTranslation();
|
||||
CVector3D target = msg->target->GetWorldSpace(pos.Y);
|
||||
m_AngleNew = atan2(target.X-pos.X, target.Z-pos.Z);
|
||||
|
Loading…
Reference in New Issue
Block a user