50 lines
1.7 KiB
JavaScript
50 lines
1.7 KiB
JavaScript
|
/* eslint-env mocha */
|
||
|
|
||
|
const World = require('prismarine-world')('1.16.4')
|
||
|
const Chunk = require('prismarine-chunk')('1.16.4')
|
||
|
const mcData = require('minecraft-data')('1.16.4')
|
||
|
const { Vec3 } = require('vec3')
|
||
|
const assert = require('assert')
|
||
|
|
||
|
describe('raycasting', function () {
|
||
|
function generateFlatChunk () {
|
||
|
const chunk = new Chunk()
|
||
|
for (let x = 0; x < 16; x++) {
|
||
|
for (let z = 0; z < 16; z++) {
|
||
|
chunk.setBlockType(new Vec3(x, 0, z), mcData.blocksByName.bedrock.id)
|
||
|
chunk.setBlockType(new Vec3(x, 1, z), mcData.blocksByName.dirt.id)
|
||
|
chunk.setBlockType(new Vec3(x, 2, z), mcData.blocksByName.dirt.id)
|
||
|
chunk.setBlockType(new Vec3(x, 3, z), mcData.blocksByName.grass_block.id)
|
||
|
}
|
||
|
}
|
||
|
return chunk
|
||
|
}
|
||
|
|
||
|
const world = new World(generateFlatChunk, null)
|
||
|
|
||
|
it('raycast cardinals', async () => {
|
||
|
const head = new Vec3(0, 5.6, 0)
|
||
|
for (const dir of [new Vec3(1, -1, 0), new Vec3(-1, -1, 0), new Vec3(0, -1, 1), new Vec3(0, -1, -1)]) {
|
||
|
const block = await world.raycast(head, dir.normalize(), 10)
|
||
|
assert.notStrictEqual(block, null)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
it('raycast diagonals', async () => {
|
||
|
const head = new Vec3(0, 5.6, 0)
|
||
|
for (const dir of [new Vec3(1, -1, 1), new Vec3(-1, -1, -1), new Vec3(-1, -1, 1), new Vec3(1, -1, -1)]) {
|
||
|
const block = await world.raycast(head, dir.normalize(), 10)
|
||
|
assert.notStrictEqual(block, null)
|
||
|
}
|
||
|
})
|
||
|
|
||
|
it('raycast up/down', async () => {
|
||
|
const head = new Vec3(0, 5.6, 0)
|
||
|
const up = await world.raycast(head, new Vec3(0, 1, 0), 10)
|
||
|
assert.strictEqual(up, null)
|
||
|
|
||
|
const down = await world.raycast(head, new Vec3(0, -1, 0), 10)
|
||
|
assert.notStrictEqual(down, null)
|
||
|
})
|
||
|
})
|