DxDrawLine: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (lua boi)
 
(13 intermediate revisions by 9 users not shown)
Line 5: Line 5:
==Syntax==
==Syntax==
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
bool dxDrawLine ( int startX, int startY, int endX, int endY, int color, [float width=1, bool postGUI=false] )
bool dxDrawLine ( int startX, int startY, int endX, int endY, int color [, float width = 1.0, bool postGUI = false ] )
</syntaxhighlight>
</syntaxhighlight>


Line 11: Line 11:
* '''startX:''' An integer representing the '''absolute''' start X position of the line, represented by pixels on the screen.
* '''startX:''' An integer representing the '''absolute''' start X position of the line, represented by pixels on the screen.
* '''startY:''' An integer representing the '''absolute''' start Y position of the line, represented by pixels on the screen.
* '''startY:''' An integer representing the '''absolute''' start Y position of the line, represented by pixels on the screen.
* '''startX:''' An integer representing the '''absolute''' end X position of the line, represented by pixels on the screen.
* '''endX:''' An integer representing the '''absolute''' end X position of the line, represented by pixels on the screen.
* '''startY:''' An integer representing the '''absolute''' end Y position of the line, represented by pixels on the screen.
* '''endY:''' An integer representing the '''absolute''' end Y position of the line, represented by pixels on the screen.
* '''color:''' An integer of the hex color, produced using [[tocolor]].
* '''color:''' An integer of the hex color, produced using [[tocolor]] or 0xAARRGGBB (AA = alpha, RR = red, GG = green, BB = blue).


==Optional Arguments==
==Optional Arguments==
Line 24: Line 24:


==Example==
==Example==
<section name="Client" class="client" show="true">
This example draws an 'X' across the screen.
Example code for drawing crosshair for Tank.
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
local rootElement = getRootElement()
local screenWidth, screenHeight = guiGetScreenSize()  
local x,y = guiGetScreenSize() -- Get players resolution.
local lineColor = tocolor(255, 0, 0)
function drawLinesAcrossScreen()
dxDrawLine(0, 0, screenWidth, screenHeight, lineColor)
dxDrawLine(screenWidth, 0, 0, screenHeight, lineColor)
end
addEventHandler("onClientRender", root, drawLinesAcrossScreen)
</syntaxhighlight>


 
This example draws a couple of circles
function create2DLine ( )
<syntaxhighlight lang="lua">
dxDrawLine ( x/2, y/2-200, x/2, y/2-170, tocolor ( 0, 255, 0, 255 ), 1 )       -- Draw vertical crosshair line.
function drawCircle( x,y, radius, color )
dxDrawLine ( x/2-20, y/2-185, x/2+20, y/2-185, tocolor ( 0, 255, 0, 255 ), 1 ) -- Draw horizontal crosshair line.
    local numPoints = math.floor( math.pow( radius, 0.4 ) * 5 )     -- Calculate number of points to make it look good
    local step = math.pi * 2 / numPoints
    local sx,sy
    for p=0,numPoints do
        local ex = math.cos ( p * step ) * radius
        local ey = math.sin ( p * step ) * radius
        if sx then
            dxDrawLine( x+sx, y+sy, x+ex, y+ey, color )
        end
        sx,sy = ex,ey
    end
end
end


 
addEventHandler( "onClientRender", root,
function HandleTheRendering()
    function()
addEventHandler("onClientRender",rootElement, create2DLine) -- Keep the line visible with onClientRender.
        drawCircle( 350, 350, 10, tocolor(255,0,255) )
end
        drawCircle( 350, 350, 50, tocolor(255,0,255) )
addEventHandler("onClientResourceStart",rootElement, HandleTheRendering)
    end
)
</syntaxhighlight>
</syntaxhighlight>
</section>
==See Also==
==See Also==
{{Drawing_functions}}
{{Drawing_functions}}
[[Category:Needs_Example]]
 
[[hu:dxDrawLine]]

Latest revision as of 01:00, 8 April 2022

This function draws a 2D line across the screen - rendered for one frame. This should be used in conjunction with onClientRender in order to display continuously.

Syntax

bool dxDrawLine ( int startX, int startY, int endX, int endY, int color [, float width = 1.0, bool postGUI = false ] )

Required Arguments

  • startX: An integer representing the absolute start X position of the line, represented by pixels on the screen.
  • startY: An integer representing the absolute start Y position of the line, represented by pixels on the screen.
  • endX: An integer representing the absolute end X position of the line, represented by pixels on the screen.
  • endY: An integer representing the absolute end Y position of the line, represented by pixels on the screen.
  • color: An integer of the hex color, produced using tocolor or 0xAARRGGBB (AA = alpha, RR = red, GG = green, BB = blue).

Optional Arguments

NOTE: When using optional arguments, you might need to supply all arguments before the one you wish to use. For more information on optional arguments, see optional arguments.

  • width: The width/thickness of the line
  • postGUI: A bool representing whether the line should be drawn on top of or behind any ingame GUI (rendered by CEGUI).

Returns

Returns a true if the operation was successful, false otherwise.

Example

This example draws an 'X' across the screen.

local screenWidth, screenHeight = guiGetScreenSize() 
local lineColor = tocolor(255, 0, 0)
function drawLinesAcrossScreen()
	dxDrawLine(0, 0, screenWidth, screenHeight, lineColor)
	dxDrawLine(screenWidth, 0, 0, screenHeight, lineColor)
end
addEventHandler("onClientRender", root, drawLinesAcrossScreen)

This example draws a couple of circles

function drawCircle( x,y, radius, color )
    local numPoints = math.floor( math.pow( radius, 0.4 ) * 5 )     -- Calculate number of points to make it look good
    local step = math.pi * 2 / numPoints
    local sx,sy
    for p=0,numPoints do
        local ex = math.cos ( p * step ) * radius
        local ey = math.sin ( p * step ) * radius
        if sx then
            dxDrawLine( x+sx, y+sy, x+ex, y+ey, color )
        end
        sx,sy = ex,ey
    end
end

addEventHandler( "onClientRender", root,
    function()
        drawCircle( 350, 350, 10, tocolor(255,0,255) )
        drawCircle( 350, 350, 50, tocolor(255,0,255) )
    end
)

See Also