CRecipientFilter: Difference between revisions
TomEdwards (talk | contribs) |
TomEdwards (talk | contribs) m (→Example) |
||
| Line 49: | Line 49: | ||
To make an entity produce a sound from another location: | To make an entity produce a sound from another location: | ||
[[EmitSound()|EmitSound]]( CPASFilter(pPuppet->[[GetAbsOrigin()]]),pPuppet->[[entindex()]],"Ventriloquist.Hello" ); | [[EmitSound()|EmitSound]]( '''CPASFilter(pPuppet->[[GetAbsOrigin()]])''',pPuppet->[[entindex()]],"Ventriloquist.Hello" ); | ||
== See also == | == See also == | ||
Revision as of 12:42, 16 May 2008
The CRecipientFilter class enables the server to pick and choose which clients it passes an item of data to. Most server-to-client communication supports it.
Alongside adding/removing clients individually or all at once, it can filter by:
Examples
CRecipientFilter MyFilter; MyFilter.AddRecipientsByPVS( GetAbsOrigin() ); // Clients within the entity's PVS will be added. MyFilter.MakeReliable();
CRecipientFilter MyInverseFilter; MyInverseFilter.AddAllPlayers(); MyInverseFilter.RemoveRecipientsByPVS( GetAbsOrigin() ); // Leaving only players outside the PVS MyInverseFilter.MakeReliable();
Reliable vs. Unreliable
MakeReliable() gives any command using the filter instance a higher network transmission priority. It is placed early on in the next available UDP packet, and if it can't be sent immediately is queued. If a filter remains unreliable it is sent at the end of the packet if there is any room left, and if it isn't transmitted immediately is dropped and forgotten about.
This is useful for prioritising network data at times of heavy traffic.
Derived classes
Several derived classes exist to automate the creation of common filters, with constructors set up to directly return an appropriately-configured instance.
CBroadcastRecipientFilter()CReliableBroadcastRecipientFilter()- All players.
CPASFilter(origin)CPASAttenuationFilter(<various constructors>)- All players in the origin's PAS.
CPASAttenuationFilterwill additionally remove those too far away to hear the sound. CPVSFilter(origin)- All players in the origin's PVS.
CSingleUserRecipientFilter(CBasePlayer)- A specific player.
CTeamRecipientFilter(int team, bool isReliable = false)- A multiplayer team.
CLocalPlayerFilter()- The local player. Used as a dummy filter when calling functions requiring one on the client. Reliability is irrelevant.
Example
To make an entity produce a sound from another location:
EmitSound( CPASFilter(pPuppet->GetAbsOrigin()),pPuppet->entindex(),"Ventriloquist.Hello" );