Dgs3DImageAttachToElement: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Created page with "__NOTOC__ {{Client function}} This function attaches one element to another, so that the first one follows the second whenever it moves. If an attempt is made to attach two elements that are already attached the opposite way (eg theElement becomes theAttachToElement and vice versa), the 1st attachment order is automatically detached in favor of the 2nd attachment order. For example, if carA was attached to carB, now carB is attached to carA. Also, an element cannot be...")
 
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
__NOTOC__  
__NOTOC__  
{{Client function}}
{{Client function}}
This function attaches one element to another, so that the first one follows the second whenever it moves.
This function attaches 3D Image element to another element, so that the first one follows the second whenever it moves.  
 
If an attempt is made to attach two elements that are already attached the opposite way (eg theElement becomes theAttachToElement and vice versa), the 1st attachment order is automatically detached in favor of the 2nd attachment order. For example, if carA was attached to carB, now carB is attached to carA. Also, an element cannot be attached to two separate elements at one time. For example, two cars can be attached to one single car, but one single car cannot be attached to two separate cars. If you attempt to do this, the existing attachment will automatically be dropped in favor of the new attachment. For example, if carA is asked to attached to carB then carC, it is only attached to carC.


If an attempt is made to attach two elements that are already attached the opposite way (eg the3DImage becomes theAttachToElement and vice versa), the 1st attachment order is automatically detached in favor of the 2nd attachment order. Also, the3DImage  cannot be attached to two separate elements at one time. For example, two the3DImage can be attached to one single car, but you can attach car to the3DImage , If you attempt to do this it won't work .
 
This is not compatible with all elements.  The following elements are compatible:
This is not compatible with all elements.  The following elements are compatible:
* [[Ped]]s
* [[Ped]]s
Line 17: Line 17:
* [[createWeapon|Weapons]]
* [[createWeapon|Weapons]]
* [[Camera]]s
* [[Camera]]s
{{Note|
*The offset coodinates reflect the object space, not the world space. This means that you cannot calculate the exact offsets between two objects by pre-positioning them in the map editor as a reference. Please see [[attachElementsOffsets]] for more details.
*Due to a limitation in GTA, unexpected attach rotations may occur if all rotation offsets are non-zero. (i.e. Try to ensure at least one of 'xRotOffset', 'yRotOffset' or 'zRotOffset' is zero).}}


==Syntax==  
==Syntax==  
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
bool attachElements ( element theElement, element theAttachToElement, [ float xPosOffset = 0, float yPosOffset = 0, float zPosOffset = 0, float xRotOffset = 0, float yRotOffset = 0, float zRotOffset = 0 ] )
bool dgs3DImageAttachToElement ( dgsElement the3DImageElement, element theAttachToElement, [ float xPosOffset = 0, float yPosOffset = 0, float zPosOffset = 0, float xRotOffset = 0, float yRotOffset = 0, float zRotOffset = 0 ] )
</syntaxhighlight>  
</syntaxhighlight>  
{{OOP||[[element]]:attach||detachElements}}
{{OOP||[[element]]:3DImageAttachToElement||3DImageDetachFromElement}}


===Required Arguments===  
===Required Arguments===  
*'''theElement:''' The element to be attached.
*'''the3DImageElement:''' The 3D Image element to be attached.
*'''theAttachToElement:''' The element to attach the first to.
*'''theAttachToElement:''' The element to attach the first to.


Line 46: Line 42:
==Example==  
==Example==  
<section name="client" class="client" show="true">
<section name="client" class="client" show="true">
'''Example 1:''' This example attaches a mic icon to the player who start voice chat:
'''Example 1:''' This example attaches a mic icon to any player who start voice chat:
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
dgs = exports.dgs
if isVoiceEnabled() then
if isVoiceEnabled() then
    local dgs = exports.dgs
local micPNG = dxCreateTexture('assests/mic.png');
    local micPNG = dxCreateTexture('assests/mic.png');
local icons = {};
    local icons = {};
addEventHandler('onClientPlayerVoiceStart',root,
    addEventHandler('onClientPlayerVoiceStart',root,
function()
        function()
print('[Voice-System]: '..getPlayerName(source)..' started talking.')
            print('[Voice-System]: '..getPlayerName(source)..' started talking.')
local x,y,z = getElementPosition(source);
            local x,y,z = getElementPosition(source);
if ((source ~= localPlayer and isElementOnScreen(source)) or (localPlayer == source)) and not isElement(icons[source]) then
            if ((source ~= localPlayer and isElementOnScreen(source)) or (localPlayer == source)) and not isElement(icons[source]) then
icons[source] = dgs:dgsCreate3DImage(x,y,z+1.5,micPNG,tocolor(255,255,255,255),4,4,20);
                local dgsMic = dgs:dgsCreate3DImage(x,y,z+1.5,micPNG,tocolor(255,255,255,255),4,4,20);
dgs:dgs3DImageAttachToElement( icons[source],localPlayer,0,0,1.5)
                print(dgs:dgs3DImageAttachToElement(dgsMic,localPlayer,0,0,1.5))
end  
                icons[source] = dgsMic;
end
            end  
)
        end
addEventHandler('onClientPlayerVoiceStop',root,
    )
function()  
    addEventHandler('onClientPlayerVoiceStop',root,
print('[Voice-System]: '..getPlayerName(source)..' Stoped talking.')
        function()  
if isElement(icons[source]) then
            print('[Voice-System]: '..getPlayerName(source)..' Stoped talking.')
dgs:dgs3DImageDettachFromElement( icons[source],localPlayer);
            if isElement(icons[source]) then
destroyElement(icons[source]);
                destroyElement(icons[source]);
icons[source] = nil;
                icons[source] = nil;
end
            end
end
        end
)
    )
end
end
</syntaxhighlight>
</syntaxhighlight>
</section>


==See Also==
==See Also==
{{Element functions}}
{{DGS 3D Image Functions}}
 
[[en:attachElements]]
[[ru:attachElements]]

Latest revision as of 02:18, 12 August 2022

This function attaches 3D Image element to another element, so that the first one follows the second whenever it moves.

If an attempt is made to attach two elements that are already attached the opposite way (eg the3DImage becomes theAttachToElement and vice versa), the 1st attachment order is automatically detached in favor of the 2nd attachment order. Also, the3DImage cannot be attached to two separate elements at one time. For example, two the3DImage can be attached to one single car, but you can attach car to the3DImage , If you attempt to do this it won't work .

This is not compatible with all elements. The following elements are compatible:

Syntax

bool dgs3DImageAttachToElement ( dgsElement the3DImageElement, element theAttachToElement, [ float xPosOffset = 0, float yPosOffset = 0, float zPosOffset = 0, float xRotOffset = 0, float yRotOffset = 0, float zRotOffset = 0 ] )

OOP Syntax Help! I don't understand this!

Method: element:3DImageAttachToElement(...)
Counterpart: 3DImageDetachFromElement


Required Arguments

  • the3DImageElement: The 3D Image element to be attached.
  • theAttachToElement: The element to attach the first to.

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.

  • xPosOffset: The x offset, if you want the elements to be a certain distance from one another (default 0).
  • yPosOffset: The y offset (default 0).
  • zPosOffset: The z offset (default 0).
  • xRotOffset: The x rotation offset (default 0).
  • yRotOffset: The y rotation offset (default 0).
  • zRotOffset: The z rotation offset (default 0).

Returns

Returns true if the attaching process was successful, false otherwise.

Example

Click to collapse [-]
client

Example 1: This example attaches a mic icon to any player who start voice chat:

dgs = exports.dgs

if isVoiceEnabled() then
	local micPNG = dxCreateTexture('assests/mic.png');
	local icons = {};
	addEventHandler('onClientPlayerVoiceStart',root,
		function()
			print('[Voice-System]: '..getPlayerName(source)..' started talking.')
			local x,y,z = getElementPosition(source);
			if ((source ~= localPlayer and isElementOnScreen(source)) or (localPlayer == source)) and not isElement(icons[source]) then
				icons[source] = dgs:dgsCreate3DImage(x,y,z+1.5,micPNG,tocolor(255,255,255,255),4,4,20);
				dgs:dgs3DImageAttachToElement( icons[source],localPlayer,0,0,1.5)
			end 
		end
	)
	addEventHandler('onClientPlayerVoiceStop',root,
		function() 
			print('[Voice-System]: '..getPlayerName(source)..' Stoped talking.')
			if isElement(icons[source]) then
				dgs:dgs3DImageDettachFromElement( icons[source],localPlayer);
				destroyElement(icons[source]);
				icons[source] = nil;
			end
		end
	)
end

See Also