Env projectedtexture: Difference between revisions
(→Fixing targeting: should be better) |
|||
Line 36: | Line 36: | ||
=== Fixing targeting === | === Fixing targeting === | ||
Because the targeting code isn't finished in the SDK, env_projectedtexture will flicker when bound to a target. To fix this, open ''c_env_projectedtexture.cpp'' and around line 174 there is a lot of code already commented out. Comment out the rest (vForward stuff) and instead add the | Because the targeting code isn't finished in the SDK, env_projectedtexture will flicker when bound to a target. To fix this, open ''c_env_projectedtexture.cpp'' and around line 174 there is a lot of code already commented out. Comment out the rest (vForward stuff) and instead add clientside computation of the correct angles like this (it will give smooth movement): | ||
// JasonM ... | // JasonM ... | ||
// VectorNormalize( vRight ); | // VectorNormalize( vRight ); | ||
// VectorNormalize( vUp ); | // VectorNormalize( vUp ); | ||
Vector vecToTarget = (m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin()); | |||
QAngle vecAngles; | |||
VectorAngles( vecToTarget, vecAngles ); | |||
AngleVectors( vegAngles, &vForward, &vRight, &vUp ); | |||
} | } | ||
The server needs code to update the entity with angles on a target as well. Open ''env_projectedtexture.cpp'' and around line 245 edit the InitialThink function to recalculate angles towards the target: | |||
if ( m_hTargetEntity == NULL && m_target != NULL_STRING ) | |||
m_hTargetEntity = gEntList.FindEntityByName( NULL, m_target ); | m_hTargetEntity = gEntList.FindEntityByName( NULL, m_target ); | ||
if ( m_hTargetEntity == NULL ) | if ( m_hTargetEntity == NULL ) | ||
Line 59: | Line 57: | ||
SetNextThink( gpGlobals->curtime + 0.1 ); | SetNextThink( gpGlobals->curtime + 0.1 ); | ||
==Keyvalues== | ==Keyvalues== |
Revision as of 06:57, 8 November 2008
Template:Wrongtitle Template:Base point ep2
Entity Description
Creates a dynamic shadow-casting light that affects all objects in the world. Used for the Episode Two flashlight.
Bug fixes
Enabling multiple shadow maps
Valve's games only allow one projected texture to cast shadows at a time - including the player's flashlight! To surmount this, shadow casting can be disabled on each entity with the enableshadows
KV, or for a proper solution a programmer can perform this C++ fix:
In CClientShadowMgr::Init() around line 1293, comment out:
bool bTools = CommandLine()->CheckParm( "-tools" ) != NULL; m_nMaxDepthTextureShadows = bTools ? 4 : 1; // Just one shadow depth texture in games, more in tools
And add:
m_nMaxDepthTextureShadows = YOUR_CHOSEN_MAX; //with your number
Fixing parenting
By default, this entity's position only gets updated when it gets turned on. Thus, parenting does not work. To fix this, open c_env_projectedtexture.cpp and in line 225, comment out 3 lines like this:
// if ( bForceUpdate == false ) // { g_pClientShadowMgr->UpdateProjectedTexture( m_LightHandle, true ); // }
In line 233 in the Simulate function, change the argument false to true like this:
UpdateLight( true );
Fixing cuts in projected texture
When using multiple env_projectedtexture, projected textures might be cut at certain viewing angles. To fix this, force r_flashlightscissor 0 for your mod or map.
Fixing targeting
Because the targeting code isn't finished in the SDK, env_projectedtexture will flicker when bound to a target. To fix this, open c_env_projectedtexture.cpp and around line 174 there is a lot of code already commented out. Comment out the rest (vForward stuff) and instead add clientside computation of the correct angles like this (it will give smooth movement):
// JasonM ... // VectorNormalize( vRight ); // VectorNormalize( vUp ); Vector vecToTarget = (m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin()); QAngle vecAngles; VectorAngles( vecToTarget, vecAngles ); AngleVectors( vegAngles, &vForward, &vRight, &vUp ); }
The server needs code to update the entity with angles on a target as well. Open env_projectedtexture.cpp and around line 245 edit the InitialThink function to recalculate angles towards the target:
if ( m_hTargetEntity == NULL && m_target != NULL_STRING ) m_hTargetEntity = gEntList.FindEntityByName( NULL, m_target ); if ( m_hTargetEntity == NULL ) return; Vector vecToTarget = (m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin()); QAngle vecAngles; VectorAngles( vecToTarget, vecAngles ); SetAbsAngles( vecAngles ); SetNextThink( gpGlobals->curtime + 0.1 );
Keyvalues

- target <target_destination>
- The entity will rotate to point at its target, no matter where it is in the world. See also
lightonlytarget
. Bug:Can get glitchy. Refer to bug fix section. [todo tested in ?]
- lightfov <float>
- The angle at which the texture is projected. The projection is square, but the texture can make it appear of any shape.
- Remember the default Player FOV is 75°.
- nearz <float>
- Near Z for projected texture. Default value is 4.0.
- Objects closer than this will not receive the projection.
- farz <float>
- Far Z for projected texture. Default value is 750.0.
- Objects beyond this distance will not receive the projection. Think of it as the range limit.
- enableshadows <boolean>
- Should I cast (dynamic) shadows?
- 0 = No, 1 = Yes.
- shadowquality <boolean>
- Quality of (dynamic) shadows?
- 0 = Low, 1 = High.
- lightonlytarget <boolean>
- Should I light only the entity that is my
target
? - 0 = No, 1 = Yes.
Bug:Non-functional. [todo tested in ?]
- lightworld <boolean>
- Should I light world brushes?
- cameraspace <boolean>
- Display relative to player's view. Breaks things horribly unless the entity moves with the player.
- lightcolor ⇆#000000rgb(0,0,0)⇆
- Projected color
Bug:Parenting does not work. Refer to bug fix section [todo tested in ?]
Flags
- 1 : Enabled
Inputs
- TurnOn
- TurnOff
- FOV <float>
- See lightfov keyvalue above.
Inputs not in FGD
These inputs are not known to Hammer, but are still accepted by the entity:
- target <entity>
- Specify a new <target_desination> entity.
- cameraspace <bool>
- See above keyvalues.
- LightOnlyTarget <bool>
- See above keyvalues.
Bug:Non-functional. [todo tested in ?]
- LightWorld <bool>
- See above keyvalues.
Bug:Cannot be re-enabled. [todo tested in ?]
- EnableShadows <bool>
- See above keyvalues.
- Ambient <float>
- Allows for an ambiance light, much like the shadow color for it.
- SpotlightTexture <VTF/string>
- A VTF file (not VMT), relative to
/materials
.