diff --git a/README.md b/README.md index 11a89ab..10df42d 100644 --- a/README.md +++ b/README.md @@ -21,35 +21,35 @@ A vector class implementing everything you want to do with vectors, and some mor ### Basic ### -**function vector(x,y)**
-Creates a new vector. Element access with `v.x` and `v.y`.
-*Parameters:* +#### `function vector(x,y)` +Creates a new vector. Element access with `v.x` and `v.y`. +**Parameters:** -* `x` **[number]**: x coordinate -* `y` **[number]**: y coordinate +* _[number]_ `x`: x coordinate +* _[number]_ `y`: y coordinate -*Returns:* the vector +**Returns:** the vector +

+#### `function isvector(v)` +Tests for vector type. +**Parameters:** -**function isvector(v)**
-Tests for vector type.
-*Parameters:* +* `v`: variable to test -* `v`: variable to test
+**Returns:** `true` if `v` is a vector +

-*Returns:* `true` if `v` is a vector +#### `function Vector:clone()` +Clones a vector. Use when you do not want to create references. +**Returns:** New vector with the same coordinates. +

+#### `function Vector:unpack()` +Unpacks the vector. +**Returns:** the coordinate tuple `x, y` -**function Vector:clone()**
-Clones a vector. Use when you do not want to create references.
-*Returns:* New vector with the same coordinates. - - -**function Vector:unpack()**
-Unpacks the vector.
-*Returns:* the coordinate tuple `x, y` - -*Example:* +**Example:** v = vector(1,2) print(v:unpack()) -- prints "1 2" @@ -60,8 +60,8 @@ Unpacks the vector.
Arithmetic (`+`, `-`, `*`, `/`) and comparative operators (`==`, `<=`, `<`) are defined. * `+` and `-` _only_ work on vectors. `-` is also the unary minus (e.g. `print(-vector(1,0)) -- prints (-1,0)` -* `a * b` works on vectors and numbers:
- - If `a` is a number and `b` is a vector (or vice versa), the result the scalar multiplication.
+* `a * b` works on vectors and numbers: + - If `a` is a number and `b` is a vector (or vice versa), the result the scalar multiplication. - If `a` and `b` both are vectors, then the result is the _dot product_. * `a / b` is only defined for `a` being a vector and `b` being a number. Result is the same as `a * 1/b` @@ -70,47 +70,47 @@ Arithmetic (`+`, `-`, `*`, `/`) and comparative operators (`==`, `<=`, `<`) are ### Even more! ### -**function vector:permul(other)**
+#### `function vector:permul(other)` Perform element-wise multiplication. +

- -**function vector:len()**
+#### `function vector:len()` Get length of vector. +

- -**function vector:len2()**
+#### `function vector:len2()` Get squared length. +

- -**function vector:dist(other)**
+#### `function vector:dist(other)` Get distance to other vector. -*Example:* +**Example:** a,b = vector(0,1), vector(1,0) print(a:dist(b)) -- prints 1.4142135623731` +

- -**function vector:normalized()**
+#### `function vector:normalized()` Get normalized vector. The original vector remains unchanged. +

+#### `function vector:normalize_inplace()` +Normalize vector and return it. +**Warning:** This will change the state of all references to this vector. +

-**function vector:normalize_inplace()**
-Normalize vector and return it.
-*Warning:* This will change the state of all references to this vector. +#### `function Vector:rotated(phi)` +Get rotated vector. The original vector remains unchanged. +**Parameters:** +* _[number]_ `phi`: Rotation angle in radians. +

-**function Vector:rotated(phi)**
-Get rotated vector. The original vector remains unchanged.
-*Parameters:* - -* `phi` **[number]**: Rotation angle in radians. - - -**function Vector:rotate_inplace(phi)**
-Rotate the vector and return it.
-*Warning:* This will change the state of all references to this vector. - +#### `function Vector:rotate_inplace(phi)` +Rotate the vector and return it. +**Warning:** This will change the state of all references to this vector. +

class.lua --------- @@ -118,13 +118,13 @@ class.lua Simple class-like system for Lua. Supports definition of class types and inheritance of functions. For an example how to use this, see below. -**function Class(constructor)**
+#### `function Class(constructor`)** Creates a new unnamed class. -*Parameters:* +**Parameters:** -* _(optional)_ `constructor`: A function used to construct the class. The first parameter of this function is the object, the others are parameters given upon construction. +* _[optional function]_ `constructor`: A function used to construct the class. The first parameter of this function is the object, the others are parameters given upon construction. -*Example:* +**Example:** Feline = Class(function(self, size, weight) self.size = size self.weight = weight @@ -138,27 +138,27 @@ Creates a new unnamed class. felix = Feline(.8, 12) print("Garfield: " .. garfield:stats(), "Felix: " .. felix:stats()) +

- -**function Class{name = name, constructor}**
+#### `function Class{name = name, constructor}` Create a named class, i.e. define a __tostring metamethod. Parameters are the same as above. Great for debugging. Both `name` and `constructor` can be omitted (but why would you want to?) -*Example:* +**Example:** Feline = Class{name = "Feline", function(self, size, weight) self.size = size self.weight = weight end} print(Feline) -- prints 'Feline' +

- -**function Interface(name)**
+#### `function Interface(name)` Shortcut to `Class{name = name}`, i.e. a possibly named class without constructor. -**function Inherit(class, super, ...)**
-Add functions of `super` to `class`. Multiple interfaces can be defined.
+#### `function Inherit(class, super, ...)` +Add functions of `super` to `class`. Multiple interfaces can be defined. `super`'s constructor can be accessed via super.construct(self). See example below. @@ -208,58 +208,89 @@ _Depends on vector.lua_ Camera class to display only a certain zoomed and rotated region of the game. You can have multiple cameras in one game. -**function Camera(pos, zoom, rotation)**
+#### `function Camera(pos, zoom, rotation)` Create a new camera with position `pos`, zoom `zoom` and rotation `rotation`. **Parameters:** -* _(optional)_ `pos` **[vector]**: Initial position of the camera. Defaults to (0,0). -* _(optional)_ `zoom` **[number]**: Initial zoom. Defaults to 1. -* _(optional)_ `rotation` **[number]**: Initial rotation in radians. Defaults to 0. +* _[optional vector]_ `pos`: Initial position of the camera. Defaults to (0,0). +* _[optional number]_ `zoom`: Initial zoom. Defaults to 1. +* _[optional number]_ `rotation`: Initial rotation in radians. Defaults to 0. **Returns:** The new camera object. +

- -**function camera:rotate(phi)**
+#### `function camera:rotate(phi)` Rotate camera by `phi` radians. Same as `camera.rot = camera.rot + phi`. +

- -**function camera:translate(t)**
+#### `function camera:translate(t)` Translate (move) camera by vector `t`. Same as `camera.pos = camera.pos + t. +

-**function camera:draw(func)**
+#### `function camera:draw(func)` Apply camera transformation to drawings in function `func`. Shortcut to `camera:apply()` and `camera:deapply()` (see below). -*Example:* +**Example:** cam:draw(function() love.graphics.rectangle('fill', -100,-100, 200,200) end) +

- -**function camera:apply()**
+#### `function camera:apply()` Apply camera transformations to every drawing operation until the next `camera:deapply()`. +

- -**function camera:deapply()**
+#### `function camera:deapply()` Revert camera transformations for the rest of the drawing operations. -*Example:* (equivalent to the `cam:draw()` example above) +**Example:** (equivalent to the `cam:draw()` example above) camera:apply() love.graphics.rectangle('fill', -100,-100, 200,200) camera:deapply() +

- -**function camera:transform(p)**
+#### `function camera:transform(p)` Transform vector `p` from camera coordinates to world coordinates. You probably won't need this, but it is the basis to `camera:mousepos()`. +

- -**function camera:mousepos()**
+#### `function camera:mousepos()` Get mouse position in world coordinates, i.e. the position the users mouse is currently when camera transformations are applied. Use this for _any_ mouse interaction with transformed objects in your game. + gamestate.lua ------------- **TODO** + + +License +======= +Yay, *free software*: + +> Copyright (c) 2010 Matthias Richter +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> Except as contained in this notice, the name(s) of the above copyright holders +> shall not be used in advertising or otherwise to promote the sale, use or +> other dealings in this Software without prior written authorization. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE.