# Fixed infinite loop.
Also fixed sectorDivs so it's always initialised, since the complaints were annoying. Camera: Added a const. Super cavalry: Added required(?) aura attributes. This was SVN commit r3906.
This commit is contained in:
parent
1a8cb85e08
commit
03a08e00a5
@ -18,6 +18,8 @@
|
||||
<Auras>
|
||||
<Trample>
|
||||
<Radius>1</Radius>
|
||||
<Speed>1000</Speed>
|
||||
<Duration>3</Duration>
|
||||
<Damage>50</Damage>
|
||||
<Crush>0</Crush>
|
||||
<Hack>0.9</Hack>
|
||||
|
@ -187,7 +187,7 @@ void CCamera::BuildCameraRay( int px, int py, CVector3D& origin, CVector3D& dir
|
||||
dir.Normalize();
|
||||
}
|
||||
|
||||
void CCamera::GetScreenCoordinates( const CVector3D& world, float& x, float& y )
|
||||
void CCamera::GetScreenCoordinates( const CVector3D& world, float& x, float& y ) const
|
||||
{
|
||||
CMatrix3D transform;
|
||||
m_Orientation.GetInverse( transform );
|
||||
@ -203,8 +203,8 @@ void CCamera::GetScreenCoordinates( const CVector3D& world, float& x, float& y )
|
||||
|
||||
CVector3D CCamera::GetWorldCoordinates( int px, int py )
|
||||
{
|
||||
CHFTracer tracer( g_Game->GetWorld()->GetTerrain() ); int x, z;
|
||||
|
||||
CHFTracer tracer( g_Game->GetWorld()->GetTerrain() );
|
||||
int x, z;
|
||||
CVector3D origin, dir, delta, currentTarget;
|
||||
|
||||
BuildCameraRay( px, py, origin, dir );
|
||||
|
@ -74,7 +74,7 @@ class CCamera
|
||||
// General helpers that seem to fit here
|
||||
|
||||
// Get the screen-space coordinates corresponding to a given world-space position
|
||||
void GetScreenCoordinates(const CVector3D& world, float& x, float& y);
|
||||
void GetScreenCoordinates(const CVector3D& world, float& x, float& y) const;
|
||||
|
||||
// Get the point on the terrain corresponding to pixel (px,py) (or the mouse coordinates)
|
||||
CVector3D GetWorldCoordinates(int px, int py);
|
||||
|
@ -79,6 +79,7 @@ CBaseEntity::CBaseEntity( CPlayer* player )
|
||||
m_corpse = CStrW();
|
||||
m_foundation = CStrW();
|
||||
m_passThroughAllies = false;
|
||||
m_sectorDivs = 4;
|
||||
|
||||
// Sentinel values for stamina and health (so scripts can check if an entity has no stamina or no HP).
|
||||
m_speed=0;
|
||||
|
@ -41,11 +41,6 @@ CEntity::CEntity( CBaseEntity* base, CVector3D position, float orientation, cons
|
||||
m_ahead.y = cos( m_orientation.Y );
|
||||
m_player = 0;
|
||||
|
||||
// set sane default in case someone forgets to add this to the entity's
|
||||
// XML file, which is prone to happen. (prevents crash below when
|
||||
// using this value to resize a vector)
|
||||
const int sane_sectordivs_default = 4;
|
||||
|
||||
/* Anything added to this list MUST be added to BaseEntity.cpp (and variables used should
|
||||
also be added to BaseEntity.h */
|
||||
|
||||
@ -125,14 +120,6 @@ CEntity::CEntity( CBaseEntity* base, CVector3D position, float orientation, cons
|
||||
m_actorSelections = actorSelections;
|
||||
loadBase();
|
||||
|
||||
// this has been the cause of several crashes (due to not being
|
||||
// specified in the XML file), so in addition to the above default,
|
||||
// we'll sanity check its value.
|
||||
if(!(0 <= m_sectorDivs && m_sectorDivs < 360))
|
||||
{
|
||||
debug_warn("invalid entity flank_penalty.sectors value");
|
||||
m_sectorDivs = sane_sectordivs_default;
|
||||
}
|
||||
m_sectorValues.resize(m_sectorDivs);
|
||||
for ( int i=0; i<m_sectorDivs; ++i )
|
||||
m_sectorValues[i] = false;
|
||||
@ -889,6 +876,11 @@ void CEntity::interpolate( float relativeoffset )
|
||||
m_graphics_position = Interpolate<CVector3D>( m_position_previous, m_position, relativeoffset );
|
||||
|
||||
// Avoid wraparound glitches for interpolating angles.
|
||||
|
||||
m_orientation.X = fmodf(m_orientation.X, 2*PI); // (ensure the following loops can't take forever)
|
||||
m_orientation.Y = fmodf(m_orientation.Y, 2*PI);
|
||||
m_orientation.Z = fmodf(m_orientation.Z, 2*PI);
|
||||
|
||||
while( m_orientation.Y < m_orientation_previous.Y - PI )
|
||||
m_orientation_previous.Y -= 2 * PI;
|
||||
while( m_orientation.Y > m_orientation_previous.Y + PI )
|
||||
|
Loading…
Reference in New Issue
Block a user