Env projectedtexture: Difference between revisions

From Valve Developer Community
Jump to navigation Jump to search
(→‎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 AngleVectors function like this:
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 );
     AngleVectors( GetAbsAngles(), &vForward, &vRight, &vUp );
     Vector vecToTarget = (m_hTargetEntity->GetAbsOrigin() - GetAbsOrigin());
     }
     QAngle vecAngles;
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
     VectorAngles( vecToTarget, vecAngles );
     if ( m_target != NULL_STRING )
     AngleVectors( vegAngles, &vForward, &vRight, &vUp );
     {
    SetThink( &CEnvProjectedTexture::InitialThink );
    SetNextThink( gpGlobals->curtime + 0.1 );
     }
     }
Now edit the InitialThink function to recalculate angles towards the target:
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 );
You can adjust the interval for SetNextThink to get smoother movement.


==Keyvalues==
==Keyvalues==

Revision as of 06:57, 8 November 2008

Template:Wrongtitle Template:Base point ep2

Entity Description

Casting shadows.

Creates a dynamic shadow-casting light that affects all objects in the world. Used for the Episode Two flashlight.

Icon-Bug.pngBug:Does not accept a configurable texture value from Hammer - will always default to the flashlight. You must use the SpotlightTexture input instead.  [todo tested in ?]

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

Projected texture looking cut.

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

Projecting a texture.
  • target <target_destination>
The entity will rotate to point at its target, no matter where it is in the world. See also lightonlytarget.
Icon-Bug.pngBug: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.
Should I cast (dynamic) shadows?
0 = No, 1 = Yes.
Quality of (dynamic) shadows?
0 = Low, 1 = High.
Should I light only the entity that is my target?
0 = No, 1 = Yes.
Icon-Bug.pngBug:Non-functional.  [todo tested in ?]
Should I light world brushes?
Display relative to player's view. Breaks things horribly unless the entity moves with the player.
  • lightcolor #000000
Projected color
Icon-Bug.pngBug: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.
Icon-Bug.pngBug:Non-functional.  [todo tested in ?]
  • LightWorld <bool>
See above keyvalues.
Icon-Bug.pngBug: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.

Outputs