Matrix: Difference between revisions

From Multi Theft Auto: Wiki
Jump to navigation Jump to search
m (reorder, add toc)
m (Added "OOP class" template)
Line 1: Line 1:
{{OOP class}}
Matrices are one of the most powerful features of MTA [[OOP]]. We did have a presence of Matrices before with [[getElementMatrix]], but we were given an ugly disgusting table to play with. Now, with the new Matrix class, we can make and magically manipulate Matrices.
Matrices are one of the most powerful features of MTA [[OOP]]. We did have a presence of Matrices before with [[getElementMatrix]], but we were given an ugly disgusting table to play with. Now, with the new Matrix class, we can make and magically manipulate Matrices.
__TOC__
__TOC__

Revision as of 12:21, 1 February 2015

Template:OOP class Matrices are one of the most powerful features of MTA OOP. We did have a presence of Matrices before with getElementMatrix, but we were given an ugly disgusting table to play with. Now, with the new Matrix class, we can make and magically manipulate Matrices.

Methods

Using Matrices

Say you wanted to create a bin - object 1337 - two units in front of a player. You don't want to manually do trigonometry and you don't want to play with the complicated tables. You just want to get the position two units in front of the player whilst taking into account the rotation of the player. You only need to use Matrix.getForward. Matrix.getPosition and getElementMatrix. It's just:

Object ( 1337, player.matrix.position + player.matrix.forward * 2 )

Why not stick to the good ol' tables?

Say you'd like to get find the position underneath a vehicle. This is the position at any rotation. So if it was upside down, the Z value would be higher than the vehicle Z value. If the vehicle was the right way round, the Z value for underneath car would be less than the Z value for the car.

--
-- Instead of:
--
local matrix = getElementMatrix(vehicle)
local offX = 0 * matrix[1][1] + 0 * matrix[2][1] - 1 * matrix[3][1] + matrix[4][1]
local offY = 0 * matrix[1][2] + 0 * matrix[2][2] - 1 * matrix[3][2] + matrix[4][2]
local offZ = 0 * matrix[1][3] + 0 * matrix[2][3] - 1 * matrix[3][3] + matrix[4][3]

local pX, pY, pZ = getElementPosition(vehicle)
local positionBelow = {offX-pX, offY-pY, offZ-pZ}

--
-- You only have to do:
--
local positionBelow = vehicle.position - vehicle.matrix.up