GetScreenStartPositionFromBox: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
(Add more comments.)
(last notes... :()
Line 93: Line 93:
<section name="Client" class="client" show="true">
<section name="Client" class="client" show="true">
<syntaxhighlight lang="lua">
<syntaxhighlight lang="lua">
--[[
--[[
- Scaled version for all screen resolutions
- Scaled version for all screen resolutions
Line 128: Line 127:
-- Start drawing at the correct position:
-- Start drawing at the correct position:
local startX, startY  
local startX, startY  
Line 134: Line 132:
left & top
left & top
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY , "left", "top")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "left", "top")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )


Line 140: Line 138:
right & top
right & top
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY , "right", "top")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "right", "top")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
Line 146: Line 144:
right & bottom
right & bottom
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY , "right", "bottom")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "right", "bottom")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
Line 152: Line 150:
left & bottom
left & bottom
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY , "left", "bottom")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "left", "bottom")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
--[[
--[[
left & center
left & center
Note: offsetY is 0.
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0 , "left", "center")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0, "left", "center")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
--[[
--[[
right & center
right & center
Note: offsetY is 0.
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0 , "right", "center")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0, "right", "center")
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
Line 170: Line 170:
--[[
--[[
center & top
center & top
Note: offsetX is 0.
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "top")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "top")
Line 176: Line 177:
--[[
--[[
center & bottom
center & bottom
Note: offsetX is 0.
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "bottom")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "bottom")
Line 182: Line 184:
--[[
--[[
center & center
center & center
Note: offsetX and offsetY are 0.
]]
]]
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, 0, "center", "center")
startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, 0, "center", "center")

Revision as of 18:17, 28 February 2021


This function can be used to position dx-effects on your screen. The function requires you to create a box. This box exist out of the dimensions width/height and a X/Y position. The box is used to help with positioning dx-effects that do have an width/height. The box can have 0 width and 0 height, but it is recommended to fill those in with the dimensions of the dx-effect you want to draw.


Syntax

float startX, float startY = getScreenStartPositionFromBox(float width, float height, float offsetX, float offsetY, [string startIndicationX = "left", string startIndicationY = "top"])

Required Arguments

  • width: The width of the box.
  • height: The height of the box.
  • offsetX: The offset from it's current position. Left startIndicationX = offset added. Right startIndicationX = offset subtracted. (If center is used, the offset is applied from the left.)
  • offsetY: The offset from it's current position. Top startIndicationY = offset added. Bottom startIndicationY = offset subtracted. (If center is used, the offset is applied from the top.)
  • startIndicationX: The X position of the box.
  • startIndicationY: The Y position of the box.

Returns

Returns 2 values:

  • startX: Start X position
  • startY: Start Y position

Code

Click to collapse [-]
Clientside Script
do
	local screenX, screenY = guiGetScreenSize()

	function getScreenStartPositionFromBox (width, height, offsetX, offsetY, startIndicationX, startIndicationY)
	
		if type(width) ~= "number" then
			width = 0
		end
		
		if type(height) ~= "number" then
			height = 0
		end
		
		if type(offsetX) ~= "number" then
			offsetX = 0
		end
		
		if type(offsetY) ~= "number" then
			offsetY = 0
		end
		
		local startX = offsetX 
		local startY = offsetY
		
		if startIndicationX == "right" then
			startX = screenX - (width + offsetX)
		elseif startIndicationX == "center" then
			startX = screenX / 2 - width / 2 + offsetX
		end
		
		if startIndicationY == "bottom" then
			startY = screenY - (height + offsetY)
		elseif startIndicationY == "center" then
			startY = screenY / 2 - height / 2 + offsetY
		end
		
		return startX, startY
	end
end

Example

Click to collapse [-]
Client
--[[
	Draw a rectangle on the left-bottom of the screen.
	The offset from the bottom and left is 100 pixels.

]]
addEventHandler("onClientRender",root, 
function ()
	-- Note: The following values are not scaled. See second example for how to scale it for all screen resolutions.
	local rectangleWidth, rectangleHeight = 400, 200
	
	local startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 100, 100, "right", "bottom")
	
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )

end)


Click to collapse [-]
Client
--[[
	- Scaled version for all screen resolutions
	- Multiple rectangles
]]




--[[
	Prepare the scale multiplier:
]]
-- Your resolution as developer.
local devScreenX = 1920
local devScreenY = 1080

-- The current resolution of the client
local screenX, screenY = guiGetScreenSize()

-- Get the scale value
local scaleValue = screenY / devScreenY

-- Set an upper limit, so that it isn't scaled too small.
scaleValue = math.max(scaleValue, 0.65)

--[[
	Start drawing:
]]
addEventHandler("onClientRender",root, 
function ()
	-- Scale the dimensions:
	local rectangleWidth, rectangleHeight = 400 * scaleValue, 200 * scaleValue 
	local offSetX, offsetY = 50 * scaleValue, 50 * scaleValue
	
	-- Start drawing at the correct position:
	local startX, startY 
	
	--[[
		left & top
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "left", "top")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )

	--[[
		right & top
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "right", "top")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		right & bottom
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "right", "bottom")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		left & bottom
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, offsetY, "left", "bottom")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		left & center
		Note: offsetY is 0.
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0, "left", "center")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		right & center
		Note: offsetY is 0.
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, offSetX, 0, "right", "center")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	
	--[[
		center & top
		Note: offsetX is 0.
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "top")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		center & bottom
		Note: offsetX is 0.
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, offsetY, "center", "bottom")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
	
	--[[
		center & center
		Note: offsetX and offsetY are 0.
	]]
	startX, startY = getScreenStartPositionFromBox(rectangleWidth, rectangleHeight, 0, 0, "center", "center")
	dxDrawRectangle ( startX, startY, rectangleWidth, rectangleHeight, tocolor(0, 150, 0), false )
end)


Author: IIYAMA

See Also

Table functions

  • addTableChangeHandler » This function monitors the changes of a table.
  • pairsByKeys » This function sort pairs table.
  • rangeToTable » This function converts a string range to a table containing number values.
  • setTableProtected » This function protects a table and makes it read-only.
  • setTableToSql » This function is used to save the table in the database (sql).
  • Sort_Functions » These functions are able to sort your tables by a key.
  • getKeyFromValueInTable » This function returns the key of the specified value in a table.
  • getTableFromSql » This functionality is used to obtain saved tables using the function (SetTableToSql ).
  • isValueInTable » This function returns true if the value exists in the table, false if the value does not exist in the table.
  • table.compare » This function checks whether two given tables are equal.
  • table.copy » This function copies a whole table and all the tables in that table.
  • table.deepmerge » This function deep merges two tables. Every nested table will be correspondingly merged.
  • table.element » This function returns a new table with only userdata content.
  • table.flip » This function returns the table from the last value to the first value, such as reflection.
  • table.fromString » This function converts string to a table.
  • table.getRandomRows » This function returns random rows from table.
  • table.map » This function goes through a table and replaces every field with the return of the passed function, where the field's value is passed as first argument and optionally more arguments.
  • table.merge » This function merges two or more tables together.
  • table.random » This function retrieves a random value from a table.
  • table.removeValue » This function removes a specified value from a table.
  • table.size » This function returns the absolute size of a table.

ACL functions

  • aclGroupClone » This function clone a group to another group with/without ACLs and/or objects.
  • renameAclGroup » This function gives an existing ACL group a new name.
  • getPlayersInACLGroup » This function returns all players in an ACL group.
  • isPlayerInACL » This function checks if a player element is in an ACL group.

Account functions

  • getPlayerFromAccountName » This function is used to obtain a player by the name of his account.
  • isPlayerAccount » This function checks if the account is a valid player account (account exists and is not a guest account)

Camera functions

  • smoothMoveCamera » This function allows you to create a cinematic camera flight.
  • sCamera » The function creates a speed camera in-game, fines speeding vehicles, and notifies the driver and take money from player based on vehicle speed.

Colshape functions

Cursor functions

Drawing functions

Effects functions

  • attachEffect » This function allows you attach an effect to an element.
  • setScreenFlash » This function will make the screen flash(like a screenshot).

Element functions

  • autoAttach » This function attaches one element into another at the same position and rotation they are.
  • attachElementToBone » This function allows you to attach an element to ped bone accurately using new bone functions.
  • getElementDirectionCardialPoint » This function returns the direction of the element according to the wind rose.
  • getElementSpeed » This function returns the specified element's speed in m/s, km/h or mph.
  • getElementUsingData » This function returns table elements that contains the elements data with the given key and value.
  • getElementZoneFullName » This function allows you to retrieve the zone full name of a element.
  • getElementsInDimension » This function returns a table of elements that are in the specified dimension.
  • getElementsWithinMarker » This function returns a table of elements that are within a marker's collision shape.
  • getNearestElement » This function returns the nearest element (of a specific type) to a player.
  • getPositionInFrontOfElement » This function returns position in provided distance away from element, including element's rotation.
  • isElementInAir » This function checks if an element is in air or not.
  • isElementInPhotograph » This function checks if an element is in the player's camera picture area.
  • isElementInRange » This function allows you to check if an element's range to a main point is within the maximum range.
  • isElementMoving » This function checks if an element is moving.
  • isElementPlayer » This function checks whether the element is a player or not.
  • isElementWithinAColShape » This function checks if an element is within a collision shape element.
  • multi_check » This function checks one element to many, handy and clean.
  • setElementSpeed » This function allows you to set the speed of an element in kph or mph units.

Events

  • onClientPlayerTimeChange » This code implements an event that is triggered when the player's real time change.
  • onPlayerZoneChange » This code implements an event that is triggered when the player enters a new area on the map.
  • onVehicleWeaponFire » This code implements an event that is triggered when a player in a vehicle fires a vehicle's weapon.

Input functions

  • bindControlKeys » This function allows you to bind each key bound to a control individually. Doing this bypasses a little MTA restriction.
  • unbindControlKeys » This function allows you to unbind each key bound to a control individually. Use this function with bindControlKeys.
  • getBoundControls » This function returns a table of control names that are bound to the specified key.
  • isCommandHandlerAdded » This function allows you to check if a command is added or not in the respective resource.

Data functions

  • levenshtein » This function can be used to calculate the Levenshtein distance between two strings.
  • gregorianToJalali » This function converts gregorian date to jalali/shamsi date.
  • byte2human » This function converts an integer (number of bytes) into a human-readable unit.
  • capitalize » This function capitalizes a given string.
  • convertDate » This function converts date to another look.
  • convertServerTickToTimeStamp » This function converts server ticks to a unix timestamp.
  • convertTextToSpeech » This function converts the provided text to a speech in the provided language which players can hear.
  • findRotation3D » This function takes two sets of XYZ coordinates. It returns the 3D direction from point A to point B.
  • findRotation » This function takes two points and returns the direction from point A to point B.
  • formatDate » This function formats a date on the basis of a format string and returns it.
  • formatNumber » This function formats large numbers by adding commas.
  • generateRandomASCIIString » This function returns a random string which uses ASCII characters.
  • generateString » This function generates a random string with any characters.
  • getAge » This function calculates the age of a given birthday.
  • getDistanceBetweenElements » Returns the distance between two elements.
  • getDistanceBetweenPointAndSegment2D » This function takes point coordinates and line (a segment) starting and ending coordinates. It returns the shortest distance between the point and the line.
  • getEasterDate » This function returns easter date monthday and month for a given year.
  • getElementRelatedAngle » This function returns the related angle between one element to another. This is useful to check which side an element is to another.
  • getFreeDimension » This function get free dimension.
  • getOffsetFromXYZ » This function allows you to take an entity and a position and calculate the relative offset between them accounting for rotations.
  • getPointFromDistanceRotation » This function finds a point based on a starting point, direction and distance.
  • getRealMonth » This function returns the current month name
  • getRGColorFromPercentage »This function returns two integers representing red and green colors according to the specified percentage.
  • getScreenRotationFromWorldPosition » This function returns a screen relative rotation to a world position.
  • getTimestamp » This function returns the UNIX timestamp of a specified date and time.
  • gradientString » This function transforms a string in a new coloured gradient string.
  • hex2rgb » This function convert hex to rgb.
  • hexColorToRGB » This function convert hex string/number to RGBA values.
  • isLeapYear » This function returns a boolean representing if a given year is a leap year.
  • isValidMail » This function checks whether a provided e-mail string is valid.
  • removeHex » This function is used to remove hexadecimal numbers (colors, for example) from strings.
  • RGBToHex » This function returns a string representing the color in hexadecimal.
  • RGBToHSV » This function convert RGB to HSV color space.
  • RGBToDecimal » This function convert RGB to Decimal color.
  • secondsToTimeDesc » This function converts a plain seconds-integer into a user-friendly time description.
  • string.count » This function counts the amount of occurences of a string in a string.
  • string.explode » This function splits a string at a given separator pattern and returns a table with the pieces.
  • string.insert » This function inserts a string within another string at a given position.
  • splitMultiple » This function improves the split function so that multiple characters can be used as the split at character.
  • switch » This function allows the value of a variable or expression to control the flow of program execution via a multiway branch.
  • tocolor2rgba » This function convert tocolor to rgba.
  • toHex » This function converts a decimal number to a hexadecimal number, as a fix to be used client-side.
  • var dump » This function outputs information about one or more variables using outputConsole.
  • wavelengthToRGBA » This function converts a physical wavelength of light to a RGBA color.
  • fixPersianString » This function returns a fixed sorted bilingual RTL for strings consisting of Farsi/Arabic and English.

GUI functions

  • centerWindow » This function centers a CEGUI window element responsively in any resolution.
  • isMouseOnGUICloseButton » This function allows you to check whether the mouse cursor/pointer is within a gui-window's native close button.
  • isMouseOnGuiElement » This function allows you to check whether or not your mouse is over a specific gui element, this is especially useful if the gui element has a parent.
  • guiMoveElement » This function moves guiElement by/like using moveObject.
  • guiSetStaticImageMovable » This function allows you to move a static image like a gui window.
Comboboxes
Gridlists
Labels
  • guiLabelAddEffect » This function add an effects to the gui-label like (shadow, outline).

Marker functions

Math functions

  • reMap » Re-maps a number from one range to another.
  • math.clamp » This function returns the number between range of numbers or it's minimum or maximum.
  • math.getBezierPoint » Get N-th order bezier point.
  • math.hypot » This function returns the Hypotenuse of the triangle given by sides x and y.
  • math.isPointInPolygon » Check if point is inside polygon or not.
  • math.lerp » Get val between two integer.
  • math.percent » This function returns a percentage from two number values.
  • math.polygonArea » Compute area of any polygon.
  • math.randomDiff » Generates a pseudo-random integer that's always different from the last random number generated.
  • math.rotVecToEulerAngle » Rotation Vector To Euler Angle
  • math.round » Rounds a number whereas the number of decimals to keep and the method may be set.
  • mathNumber » This function is a workaround for the client-side floating-point precision of 24-bits.
  • math.percentProgress » Returns a percentage progress from two specific values.
  • math.average » This function returns the simple arithmetic mean of multiple numbers.
  • math.absin » This function returns a formula representing the just positive half of a sine wave.

Map functions

Ped functions

  • getAlivePlayersInTeam » This function returns a table of the alive players in a team.
  • getGuestPlayers » This function gets a players not login or players Guest .
  • getOnlineAdmins » This function returns a table of all logged-in administrators.
  • getPedEyesPosition » This function allows you to get peds eyes position.
  • getPedGender » This function allows you to get peds their gender.
  • getPedMaxHealth » This function returns a pedestrians's maximum health by converting it from their maximum health stat.
  • getPedMaxOxygenLevel » This function returns a ped's maximum oxygen level by converting it from their maximum underwater stamina stat.
  • getPedWeaponSkill » This function returns a ped's corresponding weapon skill level name.
  • getPedHitBone » This function gets the approximate number of the bone where the ped is hit.
  • getPlayerFromNamePart » This function returns a player from partial name.
  • getPlayerFromSerial » This function returns a player from their serial.
  • getPlayersByData » This function returns a table of players that have the specified data name.
  • getPlayersInPhotograph » This function returns a table of all players in photograph.
  • getPlayersInVehicles » This function returns a table of the players insides vehicles from a specified dimension.
  • getPlayerNameFromID » This function will get the player name from the ID element data.
  • isPedAiming» This function checks if a pedestrian is aiming their weapon.
  • isPedAimingNearPed » This is similar to isPedAiming but uses a colshape to be more precise.
  • isPedDiving » This feature checks that pedestrian is diving in the water.
  • isPedDrivingVehicle » This function checks if a specified pedestrian is driving a vehicle.
  • isPedNearbyWall » This function checks if player/ped is nearby a objects like buildings or walls.
  • isPlayerInTeam » This function checks if a player is in a specified team.
  • setPedAttack » This function will make a ped attack a specified target.
  • setPedFollow » This function will make a ped follow a specified target.

Player functions

Resource functions

Sound functions

Browser functions

  • playVideo » This function plays a video on the screen.

Team functions

Vehicle functions

Weapon functions

Object functions

XML functions

  • getXMLNodes » This function returns all children of a XML node.

Engine functions

Utility

  • animate » This function allows you to use interpolateBetween without render event and easily used.
  • callClientFunction » This function allows you to call any client-side function from the server's side.
  • callServerFunction » This function allows you to call any server-side function from the client's side.
  • check » This function checks if its arguments are of the right type and calls the error-function if one is not.
  • checkPassiveTimer » This function allows you to use passive timers in your conditions. For example you want to prevent players repeatedly using a command.
  • coroutine.resume » This function applies a fix for hidden coroutine error messages.
  • compact » This function create table containing variables and their values.
  • getBanBySerial » This function returns the ban if the serial is banned.
  • getBanFromName » This functions returns the ban of the given playername.
  • getCurrentFPS » This function returns the frames per second at which GTA: SA is running.
  • getSkinNameFromID » This function returns the name of the skin from the given id.
  • IfElse » This function returns one of two values based on a boolean expression.
  • isLastExecuteInTimer » This function check if the execute is the last execute in the timer.
  • isMouseInCircle » This function checks if a cursor position is in circular area or not.
  • isMouseInPosition » This function allows you to check whether the mouse cursor/pointer is within a rectangular position.
  • iterElements » This function returns a time-saving iterator for your for-loops.
  • PlotTrajectoryAtTime » Calculate projectile/water trajectory.
  • preprocessor » This function allow you to use gcc macros.
  • vector3:compare » This method checks whether two vectors match, with optional precision.
  • svgCreateRoundedRectangle » This function creates a rectangle with rounded edges.
  • debounce » This function is removing unwanted input noise.
  • listAllFiles » This function lists all files and subdirectories within a given directory and its subdirectories.

String functions