1
0
forked from 0ad/0ad

Support the <float/> property in actors

This was SVN commit r7883.
This commit is contained in:
Ykkrosh 2010-08-09 01:28:13 +00:00
parent 422da1aef0
commit c728aa972c
5 changed files with 8 additions and 6 deletions

View File

@ -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())

View File

@ -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

View File

@ -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);

View File

@ -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)
};

View File

@ -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);