Skip to content
This repository was archived by the owner on Jan 24, 2020. It is now read-only.

Commit ce5284c

Browse files
author
Avaer Kazmer
committed
Remove worker
1 parent 3d8ce6a commit ce5284c

File tree

2 files changed

+3
-437
lines changed

2 files changed

+3
-437
lines changed

index.html

Lines changed: 3 additions & 280 deletions
Original file line numberDiff line numberDiff line change
@@ -1651,289 +1651,12 @@
16511651
})();
16521652
scene.add(gridMesh); */
16531653

1654-
worker = (() => {
1655-
let cbs = [];
1656-
const worker = new Worker('mc-worker.js');
1657-
worker.onmessage = e => {
1658-
const {data} = e;
1659-
const {error, result} = data;
1660-
cbs.shift()(error, result);
1661-
};
1662-
worker.onerror = err => {
1663-
console.warn(err);
1664-
};
1665-
worker.request = (req, transfers) => new Promise((accept, reject) => {
1666-
worker.postMessage(req, transfers);
1667-
1668-
cbs.push((err, result) => {
1669-
if (!err) {
1670-
accept(result);
1671-
} else {
1672-
reject(err);
1673-
}
1674-
});
1675-
});
1676-
return worker;
1677-
})();
16781654
const _makeMiningPlaceholderMesh = (x, z, owner) => {
1679-
// console.log('make text mesh', token);
1680-
const mesh = _makeTextMesh('Parcel ' + x + ' : ' + z + ' owned by ' + owner, 30);
1681-
mesh.position.set(x * PARCEL_SIZE, 1, z * PARCEL_SIZE);
1682-
// mesh.token = token;
1683-
mesh.update = () => {
1684-
// XXX
1685-
};
1686-
mesh.intersect = () => null;
1687-
mesh.destroy = () => {
1688-
// XXX
1689-
};
1655+
const mesh = new THREE.Object3D();
16901656
return mesh;
16911657
};
1692-
const _makeMiningMesh = (x, z/*, token*/) => {
1693-
const terrainVsh = `
1694-
varying vec3 vViewPosition;
1695-
void main() {
1696-
vec4 mvPosition = modelMatrix * vec4( position.xyz, 1.0 );
1697-
gl_Position = projectionMatrix * modelViewMatrix * vec4( position.xyz, 1.0 );
1698-
vViewPosition = mvPosition.xyz;
1699-
}
1700-
`;
1701-
const terrainFsh = `
1702-
uniform vec3 uSelect;
1703-
varying vec3 vViewPosition;
1704-
vec4 color = vec4(${new THREE.Color(0x9ccc65).toArray().map(n => n.toFixed(8)).join(',')}, 1.0);
1705-
vec4 color2 = vec4(${new THREE.Color(0xec407a).toArray().map(n => n.toFixed(8)).join(',')}, 1.0);
1706-
bool inRange(vec3 pos, vec3 minPos, vec3 maxPos) {
1707-
return pos.x >= minPos.x &&
1708-
pos.y >= minPos.y &&
1709-
pos.z >= minPos.z &&
1710-
pos.x <= maxPos.x &&
1711-
pos.y <= maxPos.y &&
1712-
pos.z <= maxPos.z;
1713-
}
1714-
void main() {
1715-
vec3 fdx = vec3( dFdx( -vViewPosition.x ), dFdx( -vViewPosition.y ), dFdx( -vViewPosition.z ) );
1716-
vec3 fdy = vec3( dFdy( -vViewPosition.x ), dFdy( -vViewPosition.y ), dFdy( -vViewPosition.z ) );
1717-
vec3 normal = normalize( cross( fdx, fdy ) );
1718-
float dotNL = saturate( dot( normal, normalize(vec3(1.0, 1.0, 1.0))) );
1719-
1720-
float range = 1.01;
1721-
// float range = 2.01;
1722-
vec3 minPos = uSelect - range;
1723-
vec3 maxPos = minPos + (range*2.);
1724-
if (inRange(vViewPosition, minPos, maxPos)) {
1725-
gl_FragColor = color2;
1726-
} else {
1727-
gl_FragColor = color;
1728-
}
1729-
gl_FragColor.rgb += dotNL * 0.5;
1730-
}
1731-
`;
1732-
1733-
const geometry = new THREE.BufferGeometry();
1734-
const material = new THREE.ShaderMaterial({
1735-
uniforms: {
1736-
uSelect: {
1737-
type: 'v3',
1738-
value: new THREE.Vector3(NaN, NaN, NaN),
1739-
},
1740-
},
1741-
vertexShader: terrainVsh,
1742-
fragmentShader: terrainFsh,
1743-
extensions: {
1744-
derivatives: true,
1745-
},
1746-
});
1747-
const mesh = new THREE.Mesh(geometry, material);
1748-
mesh.frustumCulled = false;
1749-
mesh.visible = false;
1750-
// mesh.token = token;
1751-
1752-
const size = PARCEL_SIZE;
1753-
const dims = Float32Array.from([size, size, size]);
1754-
const potential = new Float32Array(size*size*size);
1755-
potential.fill(1);
1756-
for (let x = 0; x < size; x++) {
1757-
for (let y = 0; y < size; y++) {
1758-
for (let z = 0; z < size; z++) {
1759-
if (
1760-
x === 0 || y === 0 || z === 0 ||
1761-
x === (size-1) || y === (size-1) || z === (size-1)
1762-
) {
1763-
potential[x + y*size + z*size*size] = 0;
1764-
}
1765-
}
1766-
}
1767-
}
1768-
const shift = Float32Array.from([(x-0.5)*size, 0, (z-0.5)*size]);
1769-
1770-
mesh.x = x;
1771-
mesh.z = z;
1772-
mesh.potential = potential;
1773-
mesh.shift = shift;
1774-
mesh.contains = pos =>
1775-
pos.x >= shift[0] &&
1776-
pos.y >= shift[1] &&
1777-
pos.z >= shift[2] &&
1778-
pos.x < shift[0] + size &&
1779-
pos.y < shift[1] + size &&
1780-
pos.z < shift[2] + size;
1781-
mesh.getPotential = pos => {
1782-
const x = pos.x - shift[0];
1783-
const y = pos.y - shift[1];
1784-
const z = pos.z - shift[2];
1785-
return potential[x + y*size*size + z*size];
1786-
};
1787-
mesh.mine = pos => {
1788-
const x = Math.floor(pos.x - shift[0]);
1789-
const y = Math.floor(pos.y - shift[1]);
1790-
const z = Math.floor(pos.z - shift[2]);
1791-
const factor = 2;
1792-
const max = Math.sqrt(factor*factor*3);
1793-
for (let dx = -factor; dx <= factor; dx++) {
1794-
for (let dz = -factor; dz <= factor; dz++) {
1795-
for (let dy = -factor; dy <= factor; dy++) {
1796-
const ax = x + dx;
1797-
const ay = y + dy;
1798-
const az = z + dz;
1799-
if (
1800-
ax >= 0 &&
1801-
ay >= 0 &&
1802-
az >= 0 &&
1803-
ax < size &&
1804-
ay < size &&
1805-
az < size
1806-
) {
1807-
const index = ax + ay*size*size + az*size;
1808-
const d = (max - Math.sqrt(dx*dx + dy*dy + dz*dz)) / max * 2;
1809-
potential[index] = Math.max(potential[index] - d, 0);
1810-
}
1811-
}
1812-
}
1813-
}
1814-
worker.request({
1815-
method: 'march',
1816-
dims,
1817-
potential,
1818-
shift,
1819-
}).then(res => {
1820-
geometry.addAttribute('position', new THREE.BufferAttribute(res.positions, 3));
1821-
geometry.setIndex(new THREE.BufferAttribute(res.faces, 1));
1822-
1823-
if (potential.every(n => n <= 0)) {
1824-
const {x, z} = mesh;
1825-
fetch('https://djj7y2i5p8.execute-api.us-west-1.amazonaws.com/default/Webaverse', {
1826-
method: 'POST',
1827-
body: JSON.stringify({
1828-
addr: window.web3.eth.defaultAccount,
1829-
x,
1830-
y: z,
1831-
}),
1832-
})
1833-
.then(res => res.json())
1834-
.then(o => {
1835-
const {v, r, s} = o;
1836-
const addr = window.web3.eth.defaultAccount;
1837-
console.log('mintTokenFromSignature', {addr, x, z, v, r, s});
1838-
return user.execute({
1839-
method: 'mintTokenFromSignature',
1840-
data: {
1841-
addr,
1842-
x,
1843-
y: z,
1844-
v,
1845-
r,
1846-
s,
1847-
},
1848-
});
1849-
})
1850-
.then(() => {
1851-
console.log('mined', {x, z});
1852-
1853-
for (;;) {
1854-
const index = sceneMeshes.findIndex(sceneMesh => sceneMesh.token.coords.some(coord => coord[0] === x && coord[1] === z));
1855-
if (index !== -1) {
1856-
const sceneMesh = sceneMeshes[index];
1857-
sceneMesh.destroy();
1858-
scene.remove(sceneMesh);
1859-
sceneMeshes.splice(index, 1);
1860-
} else {
1861-
break;
1862-
}
1863-
}
1864-
1865-
const sceneMesh = _makeSceneObjectMesh();
1866-
sceneMesh.token = {
1867-
id: 0,
1868-
coords: [[x, z]],
1869-
apps: [],
1870-
owner: _getUserAddress(),
1871-
};
1872-
scene.add(sceneMesh);
1873-
sceneMeshes.push(sceneMesh);
1874-
1875-
selectedSceneToken = null;
1876-
1877-
lastSceneCoords[0] = NaN;
1878-
lastSceneCoords[1] = NaN;
1879-
});
1880-
}
1881-
});
1882-
};
1883-
mesh.destroy = () => {
1884-
geometry.dispose();
1885-
material.dispose();
1886-
};
1887-
let colliding = false;
1888-
mesh.update = () => {
1889-
if (!colliding && geometry.attributes.position) {
1890-
colliding = true;
1891-
1892-
const controllerMesh = controllerMeshes[1]; // XXX make this work for all controllers
1893-
worker.request({
1894-
method: 'collide',
1895-
positions: geometry.attributes.position.array,
1896-
indices: geometry.index.array,
1897-
origin: controllerMesh.ray.origin.toArray(new Float32Array(3)),
1898-
direction: controllerMesh.ray.direction.toArray(new Float32Array(3)),
1899-
})
1900-
.then(collision => {
1901-
material.uniforms.uSelect.value.fromArray(collision);
1902-
})
1903-
.catch(err => {
1904-
console.warn(err.stack);
1905-
})
1906-
.finally(() => {
1907-
colliding = false;
1908-
});
1909-
}
1910-
};
1911-
mesh.intersect = ray => {
1912-
if (isFinite(material.uniforms.uSelect.value.x)) {
1913-
const intersectionPoint = material.uniforms.uSelect.value.clone();
1914-
const distance = ray.origin.distanceTo(intersectionPoint);
1915-
return {
1916-
type: 'mine',
1917-
mesh,
1918-
intersectionPoint,
1919-
distance,
1920-
};
1921-
} else {
1922-
return null;
1923-
}
1924-
};
1925-
1926-
worker.request({
1927-
method: 'march',
1928-
dims,
1929-
potential,
1930-
shift,
1931-
}).then(res => {
1932-
geometry.addAttribute('position', new THREE.BufferAttribute(res.positions, 3));
1933-
geometry.setIndex(new THREE.BufferAttribute(res.faces, 1));
1934-
mesh.visible = true;
1935-
});
1936-
1658+
const _makeMiningMesh = (x, z) => {
1659+
const mesh = new THREE.Object3D();
19371660
return mesh;
19381661
};
19391662
let data;

0 commit comments

Comments
 (0)