CreateColCuboid: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
mNo edit summary
m (Added another example for centered cuboids)
 
(12 intermediate revisions by 8 users not shown)
Line 1: Line 1:
__NOTOC__  
__NOTOC__  
{{Server client function}}
{{Server client function}}
This function creates a collision polygon. See [http://en.wikipedia.org/wiki/Polygon Wikipedia] for a definition of a polygon. The first set of X Y of this shape is not part of the colshape bounds, so can set anywhere in the game world, however for performance, place it somewhere within the polygon. It should be noted this shape is '''2D'''. There should be at least 3 bound points set.  
This function creates a collision cuboid. This is a shape that has a position, width, depth and height. See [http://en.wikipedia.org/wiki/Cuboid Wikipedia] for a definition of a cuboid. The XYZ of the col starts at the southwest bottom corner of the shape.
 
{{VisualizeColshape}}
{{Note|Attaching a cuboid colshape to another element may give unexpected results as the origin is not at the cuboid centre. Try using a [[createColSphere|collision sphere]] for attaching instead}}
==Syntax==  
==Syntax==  
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
colshape createColPolygon ( float fX, float fY, float fX1, float fX2, float fX3, ... )
colshape createColCuboid ( float fX, float fY, float fZ, float fWidth, float fDepth, float fHeight )
</syntaxhighlight>  
</syntaxhighlight>  
 
[[File:Col-Cuboid.png|thumb|A cuboid created using this function]]
{{OOP| |ColShape.Cuboid||}}
===Required Arguments===  
===Required Arguments===  
*'''fX:''' The X position of the collision polygon's dummy point
*'''fX:''' The X position of the collision cuboid's western side.
*'''fY:''' The Y position of the collision polygon's dummy point
*'''fY:''' The Y position of the collision cuboid's southern side.
*'''fX1:''' The 1st position of the collision polygon's bound point
*'''fZ:''' The Z position of the collision cuboid's lowest side.
*'''fX2:''' The 2st position of the collision polygon's bound point
*'''fWidth:''' The collision cuboid's width.
*'''fX3:''' The 3st position of the collision polygon's bound point
*'''fDepth:''' The collision cuboid's depth.
*'''fHeight:''' The collision cuboid's height.


===Returns===
===Returns===
Returns a [[colshape]] element if successful, ''false'' if invalid arguments were passed to the function.
Returns a [[colshape]] element if successful, ''false'' if invalid arguments were passed to the function.


==Example==  
==Examples==
<section name="Server" class="server" show="true">
This example displays a chat message when a player enters the colshape and allows the colshape to be created using a console function ''set_zone''.
<syntaxhighlight lang="lua">
local theZone
 
function shapeHit(thePlayer)
    outputChatBox(getPlayerName(thePlayer).. " is in the zone!")
end
 
function setZone(playerSource, commandName, fX, fY, fZ, fWidth, fDepth, fHeight)
    local fX, fY, fZ, fWidth, fDepth, fHeight = tonumber(fX), tonumber(fY), tonumber(fZ), tonumber(fWidth), tonumber(fDepth), tonumber(fHeight)
    if (not fX) or (not fY) or (not fZ) or (not fWidth) or (not fDepth) or (not fHeight) then
        outputChatBox("Syntax: /"..commandName.." [X] [Y] [Z] [Width] [Depth] [Height]", playerSource)
    else
        if (theZone ~= nil) then
            destroyElement(theZone)
        end
        local tempCol = createColCuboid(fX, fY, fZ, fWidth, fDepth, fHeight)
        addEventHandler("onColShapeHit", tempCol, shapeHit)
        outputChatBox("Zone has "..(theZone ~= nil and "moved" or "created").."!", playerSource)
        theZone = tempCol
    end
end
addCommandHandler("set_zone", setZone, false, false)
</syntaxhighlight>
</section>
 
<section name="Server" class="server" show="true">
<section name="Server" class="server" show="true">
To Do.
This function creates a cuboid and centers it to given coordinates
<syntaxhighlight lang="lua">
addCommandHandler('createCenteredCuboid', function(player, cmd, posX, posY, posZ, sizeX, sizeY, sizeZ)
posX = posX - sizeX / 2
posY = posY - sizeY / 2
posZ = posZ - sizeZ / 2
createCuboid(posX, posY, posZ, sizeX, sizeY, sizeZ)
end)
</syntaxhighlight>
</section>
</section>


==See Also==
==See Also==
{{Collision shape functions}}
{{Collision shape functions}}
[[hu:createColCuboid]]

Latest revision as of 14:29, 31 January 2024

This function creates a collision cuboid. This is a shape that has a position, width, depth and height. See Wikipedia for a definition of a cuboid. The XYZ of the col starts at the southwest bottom corner of the shape.

[[{{{image}}}|link=|]] Tip: To visualize a colshape when writing scripts, use the client console command showcol
[[{{{image}}}|link=|]] Note: Attaching a cuboid colshape to another element may give unexpected results as the origin is not at the cuboid centre. Try using a collision sphere for attaching instead

Syntax

colshape createColCuboid ( float fX, float fY, float fZ, float fWidth, float fDepth, float fHeight )
A cuboid created using this function

OOP Syntax Help! I don't understand this!

Method: ColShape.Cuboid(...)


Required Arguments

  • fX: The X position of the collision cuboid's western side.
  • fY: The Y position of the collision cuboid's southern side.
  • fZ: The Z position of the collision cuboid's lowest side.
  • fWidth: The collision cuboid's width.
  • fDepth: The collision cuboid's depth.
  • fHeight: The collision cuboid's height.

Returns

Returns a colshape element if successful, false if invalid arguments were passed to the function.

Examples

Click to collapse [-]
Server

This example displays a chat message when a player enters the colshape and allows the colshape to be created using a console function set_zone.

local theZone

function shapeHit(thePlayer)
    outputChatBox(getPlayerName(thePlayer).. " is in the zone!")
end

function setZone(playerSource, commandName, fX, fY, fZ, fWidth, fDepth, fHeight)
    local fX, fY, fZ, fWidth, fDepth, fHeight = tonumber(fX), tonumber(fY), tonumber(fZ), tonumber(fWidth), tonumber(fDepth), tonumber(fHeight)
    if (not fX) or (not fY) or (not fZ) or (not fWidth) or (not fDepth) or (not fHeight) then
        outputChatBox("Syntax: /"..commandName.." [X] [Y] [Z] [Width] [Depth] [Height]", playerSource)
    else
        if (theZone ~= nil) then
            destroyElement(theZone)
        end
        local tempCol = createColCuboid(fX, fY, fZ, fWidth, fDepth, fHeight)
        addEventHandler("onColShapeHit", tempCol, shapeHit)
        outputChatBox("Zone has "..(theZone ~= nil and "moved" or "created").."!", playerSource)
        theZone = tempCol
    end
end
addCommandHandler("set_zone", setZone, false, false)
Click to collapse [-]
Server

This function creates a cuboid and centers it to given coordinates

addCommandHandler('createCenteredCuboid', function(player, cmd, posX, posY, posZ, sizeX, sizeY, sizeZ)
	posX = posX - sizeX / 2
	posY = posY - sizeY / 2
	posZ = posZ - sizeZ / 2
	createCuboid(posX, posY, posZ, sizeX, sizeY, sizeZ)
end)

See Also