Env projectedtexture: Difference between revisions
Line 29: | Line 29: | ||
UpdateLight( true ); | UpdateLight( true ); | ||
=== Fixing cuts in | === Fixing cuts in projected texture === | ||
[[Image:Cut.jpg|thumb|Projected texture looking cut.]] | [[Image:Cut.jpg|thumb|Projected texture looking cut.]] | ||
When using multiple env_projectedtexture, projected textures might be cut at certain viewing angles. | When using multiple env_projectedtexture, projected textures might be cut at certain viewing angles. |
Revision as of 20:17, 7 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 the AngleVectors function like this:
// JasonM ... // VectorNormalize( vRight ); // VectorNormalize( vUp ); AngleVectors( GetAbsAngles(), &vForward, &vRight, &vUp ); }
The server needs code to update the entity with angles on a target. Open env_projectedtexture.cpp and in the Activate function around line 234, change the Think function call to
if ( m_target != NULL_STRING ) { SetThink( &CEnvProjectedTexture::InitialThink ); SetNextThink( gpGlobals->curtime + 0.1 ); }
Now edit the InitialThink function to recalculate angles towards the target:
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 );
You can adjust the interval for SetNextThink to get smoother movement.
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
.