97 lines
3.2 KiB
Markdown
97 lines
3.2 KiB
Markdown
# prismarine-physics
|
|
|
|
[![NPM version](https://img.shields.io/npm/v/prismarine-physics.svg)](http://npmjs.com/package/prismarine-physics)
|
|
[![Build Status](https://github.com/PrismarineJS/prismarine-physics/workflows/CI/badge.svg)](https://github.com/PrismarineJS/prismarine-physics/actions?query=workflow%3A%22CI%22)
|
|
[![Discord](https://img.shields.io/badge/chat-on%20discord-brightgreen.svg)](https://discord.gg/GsEFRM8)
|
|
[![Gitter](https://img.shields.io/badge/chat-on%20gitter-brightgreen.svg)](https://gitter.im/PrismarineJS/general)
|
|
[![Irc](https://img.shields.io/badge/chat-on%20irc-brightgreen.svg)](https://irc.gitter.im/)
|
|
|
|
[![Try it on gitpod](https://img.shields.io/badge/try-on%20gitpod-brightgreen.svg)](https://gitpod.io/#https://github.com/PrismarineJS/prismarine-physics)
|
|
|
|
Provide the physics engine for minecraft entities
|
|
|
|
## Usage
|
|
|
|
```js
|
|
const { Physics, PlayerState } = require('prismarine-physics')
|
|
const { Vec3 } = require('vec3')
|
|
|
|
const mcData = require('minecraft-data')('1.13.2')
|
|
const Block = require('prismarine-block')('1.13.2')
|
|
|
|
const physics = Physics(mcData, world)
|
|
const controls = {
|
|
forward: false,
|
|
back: false,
|
|
left: false,
|
|
right: false,
|
|
jump: false,
|
|
sprint: false,
|
|
sneak: false
|
|
}
|
|
const player = {
|
|
entity: {
|
|
position: pos,
|
|
velocity: new Vec3(0, 0, 0),
|
|
onGround: false,
|
|
isInWater: false,
|
|
isInLava: false,
|
|
isInWeb: false,
|
|
isCollidedHorizontally: false,
|
|
isCollidedVertically: false,
|
|
elytraFlying: false,
|
|
yaw: 0,
|
|
pitch: 0
|
|
},
|
|
jumpTicks: 0,
|
|
jumpQueued: false,
|
|
fireworkRocketDuration: 0
|
|
}
|
|
const playerState = new PlayerState(player, controls)
|
|
|
|
while (!player.entity.onGround) {
|
|
// simulate 1 tick of player physic, then apply the result to the player
|
|
physics.simulatePlayer(playerState, world).apply(player)
|
|
}
|
|
```
|
|
|
|
See `examples/` for more.
|
|
|
|
|
|
## API
|
|
|
|
### Physics
|
|
|
|
#### simulatePlayer(playerState, world)
|
|
- playerState : instance of the PlayerState class
|
|
- world : interface with a function `getBlock(position)` returning the prismarine-block at the given position
|
|
|
|
### PlayerState
|
|
|
|
A player state is an object containing the properties:
|
|
|
|
Read / Write properties:
|
|
- pos : position (vec3) of the player entity
|
|
- vel : velocity (vec3) of the player entity
|
|
- onGround : (boolean) is the player touching ground ?
|
|
- isInWater : (boolean) is the player in water ?
|
|
- isInLava : (boolean) is the player in lava ?
|
|
- isInWeb : (boolean) is the player in a web ?
|
|
- isCollidedHorizontally : (boolean) is the player collided horizontally with a solid block ?
|
|
- isCollidedVertically : (boolean) is the player collided vertically with a solid block ?
|
|
- elytraFlying : (boolean) is the player elytra flying ?
|
|
- jumpTicks : (integer) number of ticks before the player can auto-jump again
|
|
- jumpQueued : (boolean) true if the jump control state was true between the last tick and the current one
|
|
- fireworkRocketDuration : (number) how many ticks of firework boost are remaining ?
|
|
|
|
Read only properties:
|
|
- yaw : (float) the yaw angle, in radians, of the player entity
|
|
- pitch: (float) the pitch angle, in radians, of the player entity
|
|
- control : (object) control states vector with properties:
|
|
- forward
|
|
- back
|
|
- left
|
|
- right
|
|
- jump
|
|
- sprint
|
|
- sneak |