# Vectors

Vectors (Vector2i and Vector2f) are basic types. They have a few methods and properties, and overloaded operators. Vector2i has properties x and y of type `int`, and Vector2f has properties x and y of type `float`.

These operators are overloaded using the Lua metamethods. Both Vector2i and Vector2f share these operator overloads, of course specialized for their type. Operators are binary operators, meaning they have two operands. This is transparent in Lua, so an example below is given to show which parameter is which.

``````--Lua code
local vecA = Vector2f.new(1.2,3.1)
local vecB = Vecotr2f.new(0.0,1.7)
local vecC = vecA + vecB
``````

If, while looking in the documentation, you want to understand the example above, vecA will be the lhs (left-hand side) parameter, vecB will be the rhs (right-hand side) parameter to the below overloaded operators, and vecC will be of the type to the left of the word "operator".

Below, `type` will be float for Vector2f and int for Vector2i. `Vector` will be Vector2i or Vector2f depending on the type of the object being used.

`Vector `operator *****(`Vector` lhs, `type` rhs):: Multiplication

`Vector `operator /(`Vector` lhs, `type` rhs):: Division

`Vector `operator +(`Vector` lhs, `Vector` rhs):: Addition

`Vector `operator -(`Vector` lhs, `Vector` rhs):: Subtraction

`bool `operator ==(`Vector` lhs, `Vector` rhs):: Equality

## Vector2f

`Vector2f `new(`float` x,`float` y):: Creates a new Vector2f for use in Lua.

`float `DotProduct(`Vector2f` other):: Does a dot product between this object and other.

`Vector2f `Normalise():: Returns a new vector that has the value of this vector if it were normalized.

`Vector2f `Rotate(`float` theta):: Returns a new vector that has the value of this vector if it were rotated by theta around the origin.

x` `(`float`):: x property. Read & write.

y` `(`float`):: y property. Read & write.

magnitude` `(`float`):: sqrt(x^2^ + y^2^) . Read-only.

## Vector2i

`Vector2i `new(`int` x,`int` y):: Creates a new Vector2i for use in Lua.

x` `(`int`):: x property. Read & write.

y` `(`int`):: y property. Read & write.

magnitude` `(`float`):: sqrt(x^2^ + y^2^) . Read-only.