mirror of
https://github.com/vrld/hump.git
synced 2024-11-23 12:24:19 +00:00
Document camera
This commit is contained in:
parent
321048cd41
commit
5c89ba3350
87
README.md
87
README.md
@ -7,7 +7,7 @@ Contents:
|
|||||||
------------
|
------------
|
||||||
|
|
||||||
* *vector.lua*: powerful vector class (pure lua)
|
* *vector.lua*: powerful vector class (pure lua)
|
||||||
* *class.lua*: "class" system supporting function inheritance
|
* *class.lua*: "class" system supporting function inheritance (pure lua)
|
||||||
* *camera.lua*: translate-, zoom- and rotatable camera
|
* *camera.lua*: translate-, zoom- and rotatable camera
|
||||||
* *gamestate.lua*: class to handle gamestates
|
* *gamestate.lua*: class to handle gamestates
|
||||||
|
|
||||||
@ -19,14 +19,14 @@ vector.lua
|
|||||||
|
|
||||||
A vector class implementing everything you want to do with vectors, and some more.
|
A vector class implementing everything you want to do with vectors, and some more.
|
||||||
|
|
||||||
#### Basic ####
|
### Basic ###
|
||||||
|
|
||||||
**function vector(x,y)**<br />
|
**function vector(x,y)**<br />
|
||||||
Creates a new vector. Element access with `v.x` and `v.y`.<br />
|
Creates a new vector. Element access with `v.x` and `v.y`.<br />
|
||||||
*Parameters:*
|
*Parameters:*
|
||||||
|
|
||||||
* `x` (_number_) - x coordinate
|
* `x` **[number]**: x coordinate
|
||||||
* `y` (_number_) - y coordinate
|
* `y` **[number]**: y coordinate
|
||||||
|
|
||||||
*Returns:* the vector
|
*Returns:* the vector
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ Creates a new vector. Element access with `v.x` and `v.y`.<br />
|
|||||||
Tests for vector type.<br />
|
Tests for vector type.<br />
|
||||||
*Parameters:*
|
*Parameters:*
|
||||||
|
|
||||||
* `v` - variable to test<br />
|
* `v`: variable to test<br />
|
||||||
|
|
||||||
*Returns:* `true` if `v` is a vector
|
*Returns:* `true` if `v` is a vector
|
||||||
|
|
||||||
@ -55,18 +55,20 @@ Unpacks the vector.<br />
|
|||||||
print(v:unpack()) -- prints "1 2"
|
print(v:unpack()) -- prints "1 2"
|
||||||
|
|
||||||
|
|
||||||
#### Operators ####
|
### Operators ###
|
||||||
|
|
||||||
Arithmetic (`+`, `-`, `*`, `/`) and comparative operators (`==`, `<=`, `<`) are defined.
|
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)`
|
* `+` 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: ==<br />==If `a` is a number and `b` is a vector (or vice versa), the result the scalar multiplication. If `a` and `b` are vectors, then the result is the _dot product_.|
|
* `a * b` works on vectors and numbers:<br />
|
||||||
|
- If `a` is a number and `b` is a vector (or vice versa), the result the scalar multiplication.<br />
|
||||||
|
- 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`
|
* `a / b` is only defined for `a` being a vector and `b` being a number. Result is the same as `a * 1/b`
|
||||||
|
|
||||||
`<=` and `<` sort lexically, i.e. `a <= b` if it holds: `a.x < b.x` or `a.y < b.y` if `a.x == b.x`
|
`<=` and `<` sort lexically, i.e. `a <= b` is true if it holds: `a.x < b.x` or `a.y < b.y` if `a.x == b.x`
|
||||||
|
|
||||||
|
|
||||||
#### Even more! ####
|
### Even more! ###
|
||||||
|
|
||||||
**function vector:permul(other)**<br />
|
**function vector:permul(other)**<br />
|
||||||
Perform element-wise multiplication.
|
Perform element-wise multiplication.
|
||||||
@ -102,14 +104,13 @@ Normalize vector and return it.<br />
|
|||||||
Get rotated vector. The original vector remains unchanged.<br />
|
Get rotated vector. The original vector remains unchanged.<br />
|
||||||
*Parameters:*
|
*Parameters:*
|
||||||
|
|
||||||
* `phi` - Rotation angle in radians.
|
* `phi` **[number]**: Rotation angle in radians.
|
||||||
|
|
||||||
|
|
||||||
**function Vector:rotate_inplace(phi)**<br />
|
**function Vector:rotate_inplace(phi)**<br />
|
||||||
Rotate the vector and return it.<br />
|
Rotate the vector and return it.<br />
|
||||||
*Warning:* This will change the state of all references to this vector.
|
*Warning:* This will change the state of all references to this vector.
|
||||||
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
|
|
||||||
class.lua
|
class.lua
|
||||||
---------
|
---------
|
||||||
@ -117,11 +118,11 @@ class.lua
|
|||||||
Simple class-like system for Lua. Supports definition of class types and inheritance of functions.
|
Simple class-like system for Lua. Supports definition of class types and inheritance of functions.
|
||||||
For an example how to use this, see below.
|
For an example how to use this, see below.
|
||||||
|
|
||||||
**function Class([constructor])**<br/>
|
**function Class(constructor)**<br/>
|
||||||
Creates a new unnamed class.
|
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)_ `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:*
|
||||||
|
|
||||||
@ -152,7 +153,7 @@ Great for debugging. Both `name` and `constructor` can be omitted (but why would
|
|||||||
print(Feline) -- prints 'Feline'
|
print(Feline) -- prints 'Feline'
|
||||||
|
|
||||||
|
|
||||||
**function Interface([name])**<br />
|
**function Interface(name)**<br />
|
||||||
Shortcut to `Class{name = name}`, i.e. a possibly named class without constructor.
|
Shortcut to `Class{name = name}`, i.e. a possibly named class without constructor.
|
||||||
|
|
||||||
|
|
||||||
@ -161,7 +162,7 @@ Add functions of `super` to `class`. Multiple interfaces can be defined.<br />
|
|||||||
`super`'s constructor can be accessed via super.construct(self). See example below.
|
`super`'s constructor can be accessed via super.construct(self). See example below.
|
||||||
|
|
||||||
|
|
||||||
#### Example usage ####
|
### Example usage ###
|
||||||
|
|
||||||
Feline = Class{name = "Feline", function(self, size, weight)
|
Feline = Class{name = "Feline", function(self, size, weight)
|
||||||
self.size = size self.weight = weight
|
self.size = size self.weight = weight
|
||||||
@ -199,15 +200,65 @@ Add functions of `super` to `class`. Multiple interfaces can be defined.<br />
|
|||||||
felix:speak()
|
felix:speak()
|
||||||
hobbes:speak()
|
hobbes:speak()
|
||||||
|
|
||||||
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
||||||
|
|
||||||
camera.lua
|
camera.lua
|
||||||
----------
|
----------
|
||||||
_Depends on vector.lua_
|
_Depends on vector.lua_
|
||||||
|
|
||||||
**TODO**
|
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)**<br />
|
||||||
|
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.
|
||||||
|
|
||||||
|
**Returns:** The new camera object.
|
||||||
|
|
||||||
|
|
||||||
|
**function camera:rotate(phi)**<br />
|
||||||
|
Rotate camera by `phi` radians. Same as `camera.rot = camera.rot + phi`.
|
||||||
|
|
||||||
|
|
||||||
|
**function camera:translate(t)**<br />
|
||||||
|
Translate (move) camera by vector `t`. Same as `camera.pos = camera.pos + t.
|
||||||
|
|
||||||
|
**function camera:draw(func)**<br />
|
||||||
|
Apply camera transformation to drawings in function `func`. Shortcut to
|
||||||
|
`camera:apply()` and `camera:deapply()` (see below).
|
||||||
|
|
||||||
|
*Example:*
|
||||||
|
|
||||||
|
cam:draw(function() love.graphics.rectangle('fill', -100,-100, 200,200) end)
|
||||||
|
|
||||||
|
|
||||||
|
**function camera:apply()**<br />
|
||||||
|
Apply camera transformations to every drawing operation until the next `camera:deapply()`.
|
||||||
|
|
||||||
|
|
||||||
|
**function camera:deapply()**<br />
|
||||||
|
Revert camera transformations for the rest of the drawing operations.
|
||||||
|
|
||||||
|
*Example:* (equivalent to the `cam:draw()` example above)
|
||||||
|
|
||||||
|
camera:apply()
|
||||||
|
love.graphics.rectangle('fill', -100,-100, 200,200)
|
||||||
|
camera:deapply()
|
||||||
|
|
||||||
|
|
||||||
|
**function camera:transform(p)**<br />
|
||||||
|
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()**<br />
|
||||||
|
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
|
gamestate.lua
|
||||||
-------------
|
-------------
|
||||||
|
Loading…
Reference in New Issue
Block a user