MTA:Eir/functions/engineCreateLight: Difference between revisions
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
No edit summary  | 
				No edit summary  | 
				||
| (2 intermediate revisions by the same user not shown) | |||
| Line 8: | Line 8: | ||
===Arguments===  | ===Arguments===  | ||
*'''type:''' decides which type that light should have, can be '''point''', '''spot''', '''spot_soft''', '''directional''' or '''ambient'''   | *'''type:''' decides which type that light should have, can be '''point''', '''spot''', '''spot_soft''', '''directional''' or '''ambient'''  | ||
===Returns===  | ===Returns===  | ||
| Line 27: | Line 27: | ||
lightFrame.setPosition( 0, 0, 10 ); -- repositions the light  | lightFrame.setPosition( 0, 0, 10 ); -- repositions the light  | ||
</syntaxhighlight>  | |||
</section>  | |||
<section name="Client" class="client" show="true">  | |||
This snippet creates a spotlight that points in the direction of the player.  | |||
<syntaxhighlight lang="lua">  | |||
local light = engineCreateLight( "spot_soft" ); -- create a soft spot light  | |||
light.setColor( 1, 1, 1, 1 ); -- set its color to white  | |||
light.setAttenuation( 0, 10, 8 ); -- give it a random attenuation value  | |||
light.setRadius( 300 ); -- set its radius to 300 game units  | |||
light.setFalloff( 99 ); -- set the softness of the spot light  | |||
light.setConeAngle( 15 ); -- set the spot light's cone angle  | |||
-- Spot lights face in the direction of the "up" vector.  | |||
-- If we want to rotate it according to the player's "front" vector,  | |||
-- we must tilt the light so that the "up" vector becomes the "front" vector.  | |||
local lightFrame = engineCreateFrame();  | |||
light.setParent( lightFrame );  | |||
light.addToScene();  | |||
-- We tilt the light "up vector" onto the ped "x" axis using 90-degree y angle.  | |||
-- Then the "up" vector is rotated onto the "y" axis using 90-degree x angle.  | |||
local transMatrix = matrixNew();  | |||
transMatrix.setEulerAngles( 90, 90, 0 );  | |||
lightFrame.setModelling( transMatrix );  | |||
-- We use another transformation frame to actually face the direction of the player.  | |||
-- This frame is updated with the player's world matrix.  | |||
local lightPointTransform = engineCreateFrame();  | |||
lightFrame.setParent( lightPointTransform );  | |||
-- We need to update it every frame.  | |||
local function updateLight()  | |||
    local playerMatrix = localPlayer.getMatrix();  | |||
    -- I decided to offset the world matrix by 1 unit up.  | |||
    playerMatrix.setPosition(  | |||
        playerMatrix.offset( 0, 0, 1 )  | |||
    );  | |||
    -- Apply it to the light's root transformation.  | |||
    lightPointTransform.setModelling( playerMatrix );  | |||
    -- Remember to clean up resources to simplify the task of  | |||
    -- the garbage collector.  | |||
    playerMatrix.destroy();  | |||
end  | |||
addEventHandler( "onClientRender", root, updateLight );  | |||
</syntaxhighlight>  | </syntaxhighlight>  | ||
</section>  | </section>  | ||
Latest revision as of 13:30, 14 March 2014
This function creates a RenderWare RpLight object. A light is an object that affects its surrouding RpAtomic instances in a certain radius and casts effects on them. The most notable effect is the pointlight, that colors its surroundings based on attenuation settings.
Syntax
rplight engineCreateLight ( string type )
Arguments
- type: decides which type that light should have, can be point, spot, spot_soft, directional or ambient
 
Returns
Returns the rplight object if creation was successful, false otherwise.
Example
Click to collapse [-]
ClientThis snippet creates a RenderWare light object and sets it up properly.
local light = engineCreateLight( "point" ); -- creates the new point light light.setColor(1, 1, 1, 1); -- gives the point light a bright color light.setAttenuation(0.8, 1.4, 4); -- makes the light fade somewhat light.setRadius(100); -- makes the light affect atomics in a 100 unit radius local lightFrame = engineCreateFrame(); -- create a 3D transformation for the light light.setParent( lightFrame ); -- attaches the light to its frame, the light can now be active in the world. light.addToScene(); -- activates the light object, so it illuminates its surroundings lightFrame.setPosition( 0, 0, 10 ); -- repositions the light
Click to collapse [-]
ClientThis snippet creates a spotlight that points in the direction of the player.
local light = engineCreateLight( "spot_soft" ); -- create a soft spot light
light.setColor( 1, 1, 1, 1 ); -- set its color to white
light.setAttenuation( 0, 10, 8 ); -- give it a random attenuation value
light.setRadius( 300 ); -- set its radius to 300 game units
light.setFalloff( 99 ); -- set the softness of the spot light
light.setConeAngle( 15 ); -- set the spot light's cone angle
-- Spot lights face in the direction of the "up" vector.
-- If we want to rotate it according to the player's "front" vector,
-- we must tilt the light so that the "up" vector becomes the "front" vector.
local lightFrame = engineCreateFrame();
light.setParent( lightFrame );
light.addToScene();
-- We tilt the light "up vector" onto the ped "x" axis using 90-degree y angle.
-- Then the "up" vector is rotated onto the "y" axis using 90-degree x angle.
local transMatrix = matrixNew();
transMatrix.setEulerAngles( 90, 90, 0 );
lightFrame.setModelling( transMatrix );
-- We use another transformation frame to actually face the direction of the player.
-- This frame is updated with the player's world matrix.
local lightPointTransform = engineCreateFrame();
lightFrame.setParent( lightPointTransform );
-- We need to update it every frame.
local function updateLight()
    local playerMatrix = localPlayer.getMatrix();
    
    -- I decided to offset the world matrix by 1 unit up.
    playerMatrix.setPosition(
        playerMatrix.offset( 0, 0, 1 )
    );
    
    -- Apply it to the light's root transformation.
    lightPointTransform.setModelling( playerMatrix );
    -- Remember to clean up resources to simplify the task of
    -- the garbage collector.
    playerMatrix.destroy();
end
addEventHandler( "onClientRender", root, updateLight );