GetAbsOrigin()
GetAbsOrigin() returns the absolute (i.e. world-relative) origin of an entity as a vector. Its sister function SetAbsOrigin() changes it.
The origin is actually stored in local space (i.e parent-relative), meaning that the Abs functions perform extra calculations to get their return value. Use the more direct GetLocalOrigin() and SetLocalOrigin() if possible; they work directly with the stored value (m_vecOrigin).
 Note:In fact,
Note:In fact, GetAbsOrigin() seems to recalculate its return value only if it was changed since the last time it was used, otherwise it just returns cached value stored in a member variable.Alternatives
A different approach for finding the position of an entity can be useful, particularly when dealing with a brush entity which might not have a valid origin. Bear in mind that these alternatives are all significantly more expensive than the 'vanilla' functions listed above.
- Vector WorldSpaceCenter()
- Returns the centre of an entity's bounding box.
- void CollisionProp()->CalcNearestPoint(&vecWorldPt,*pVecNearestWorldPt)
- Finds the nearest point on the entity's bounding box to vecWorldPt. ModifiespVecNearestWorldPtwith the result instead of returning anything.
Cells
Starting with Left 4 Dead, CBaseEntity transmits its origin in "cells". This splits the entity's local coordinate space up into cells of 32 units X/Y/Z, then uses that reduced range to compress the networked value to a mere 5 bits per ordinate. The index of the current cell also has to be networked, but it changes relatively infrequently.
This system leads to a huge reduction in network traffic at the price of imprecision. The sensitivity of prediction requires the local player to be sent an uncompressed origin.
 Note:
Note: In Alien Swarm,
 In Alien Swarm, CBasePlayer assumes that an uncompressed origin will be sent...but does not actually send one. This leads to the client-side entity being stuck at world origin. Either network the origin yourself, or for a quick fix override ShouldRegenerateOriginFromCellBits() and return true.