I have this issue with blocks with transparency like glass or leaaves:
Opened this issue · 0 comments
DrFrankatron commented
I have this issue with blocks with transparency like glass or leaaves:
There its my code:
createGame = require('voxel-engine')
voxelGlass = require('voxel-glass')
voxel = require("voxel")
rnd1=()=>{
return Math.random()
}
noise2d=(i,k)=>{
return noise.simplex2(i,k)
}
noise3d=(i,j,k)=>{
return noise.simplex3(i,j,k)
}
getSurfaceAt=(i,k)=>{
return Math.floor(noise2d(i/10000,k/10000)*625+noise.simplex2(i/1000,k/1000)*125+noise.simplex2(i/100,k/100)*25)
}
getBiomeAt=(i,k)=>{
noise1=noise2d(i/10**4,k/10**4)*100
if( 33 <noise1&&noise1<=100){return "forest"}
if(-33 <noise1&&noise1<= 33){return "meadows"}
if(-100<noise1&&noise1<=-33){return "desert"}
}
initx=Math.random()*10**5
initz=Math.random()*10**5
var game = createGame({
texturePath: 'textures/',
generate: function(i, j, k) {
let biome=getBiomeAt(i,k);
let surface=getSurfaceAt(i,k)
let target2d=noise2d(i/10, k/10)
let target3d=noise3d(i/10,j/10,k/10)
if(biome=="forest"){
//Forest.
if( j<surface-10&& target3d< 0.00) {return 3}//Stone.
else if(surface-10<j&&j<surface&& target3d< 0.50) {return 2}//Dirt.
else if(surface===j&& target3d< 0.50) {return 1}//Grass.
else if(j===surface+1&&rnd1()<0.1&& target3d< 0.00) {return 5}//Bushes.
else if(j>surface-100&&j<surface+15&&i%4<1&&k%4<1&& target2d<-0.50) {return 4}//Trunks.
else if(j>surface+10&&j<surface+15 ) {return 5}//Leaves.
}else if(biome=="meadows"){
//Meadows.
if( j<surface-10&& target3d< 0.00) {return 3}//Stone.
else if(surface-10<j&&j<surface&& target3d< 0.50) {return 2}//Dirt.
else if(surface===j&& target3d< 0.50) {return 1}//Grass.
else if(j===surface+1&&i%3!=1&&k%3!=1&&noise3d((i+1000)/10,j/10,k/10)<0&& target3d< 0.00) {return 5}//Bushes.
}else if(biome=="desert"){
//Desert.
if( j<surface-10&& target3d< 0.25) {return 11}//Sandstone.
else if(surface-10<j&&j<surface&& target3d< 0.25) {return 8}//Sand.
else if(j<surface+4&&i%2<1&&k%2<1&& target2d<-0.50) {return 9}//Cactus body.
else if(j===surface+4&&i%2<1&&k%2<1&& target2d<-0.50) {return 10}//Cactus head.
}
},
plugins:[voxelGlass],
materials: [
['grass', 'dirt', 'grass_dirt'],
'dirt',
'stone',
['trunk_top', 'trunk_top', 'trunk_side'],
'leaves',
'planks',
'bricks',
'sand',
['cactus_bottom', 'cactus_bottom', 'cactus_side'],
['cactus_top', 'cactus_bottom', 'cactus_side'],
['sandstone'],
['stone_pickaxe'],
['stone_axe'],
['stone_shovel'],
['stone_hoe'],
['glass']
],
meshers:[
voxel.meshers.greedy,
voxel.meshers.transgreedy,
],
lightsDisabled: false,
fogDisabled: true,
chunkDistance: 2,
chunkSize: 16
});
game.materials.doubleSided = true
container=document.body
game.appendTo(container)
createPlayer=require('voxel-player')(game)
fawful=createPlayer('fawful.png')
fawful.possess()
fawful.yaw.position.set(initx,getSurfaceAt(initx,initz)+10,initz)
totalBlocks1Sum=0
currentBlock=12
blocks1={}
for(i=1;i<=11;i++){//A bunch of blocks.
blocks1[i]={c:0,dur:0,space:1}
}
for(i=12;i<=15;i++){//Tools.
blocks1[i]={c:1,dur:100,space:32}
}
for(i=16;i<=16;i++){//Glass.
blocks1[i]={c:0,dur:0,space:1}
}
crafting=false
health={current:100,max:100}
food={current:100,max:100}
energy={current:100,max:100}
currentCraft=1
document.addEventListener("keydown",(e)=>{
if(e.key=='g'){
}
if(e.key=='q'&¤tBlock>1){
currentBlock--
while(blocks1[currentBlock].c==0&¤tBlock>1){
currentBlock--
}
}else if(e.key=='q'&¤tBlock==1){
currentBlock=16
while(blocks1[currentBlock].c==0&¤tBlock>1){
currentBlock--
}
}
if(e.key=='e'&¤tBlock<16){
currentBlock++
while(blocks1[currentBlock].c==0&¤tBlock<16){
currentBlock++
}
}else if(e.key=='e'&¤tBlock==16){
currentBlock=1
while(blocks1[currentBlock].c==0&¤tBlock<16){
currentBlock++
}
}
if(e.key=='z'){
if(currentCraft>0){
currentCraft--
}
}
if(e.key=='x'){
//1 wood + 1 stone => stone pickaxe.
if(currentCraft==1&&totalBlocks1Sum<512-32&&blocks1[3].c>=1&&blocks1[4].c>=1){
crafting=true
setTimeout(()=>{
crafting=false
blocks1[12].c++;blocks1[3].c--;blocks1[4].c--
},3000)
}
//1 wood + 1 stone => stone axe.
if(currentCraft==2&&totalBlocks1Sum<512-32&&blocks1[3].c>=1&&blocks1[4].c>=1){
crafting=true
setTimeout(()=>{
crafting=false
blocks1[13].c++;blocks1[3].c--;blocks1[4].c--
},3000)
}
//1 wood + 1 stone => stone shovel.
if(currentCraft==3&&totalBlocks1Sum<512-32&&blocks1[3].c>=1&&blocks1[4].c>=1){
crafting=true
setTimeout(()=>{
crafting=false
blocks1[14].c++;blocks1[3].c--;blocks1[4].c--
},3000)
}
//1 wood + 1 stone => stone höe.
if(currentCraft==4&&totalBlocks1Sum<512-32&&blocks1[3].c>=1&&blocks1[4].c>=1){
crafting=true
setTimeout(()=>{
crafting=false
blocks1[15].c++;blocks1[3].c--;blocks1[4].c--
},3000)
}
//1 fuel + 1 sand => glass.
if(currentCraft==5&&totalBlocks1Sum<512-1&&blocks1[8].c>0&&(blocks1[9].c>0||blocks1[10].c>0||blocks1[5].c>0||blocks1[4].c>0)){
crafting=true
setTimeout(()=>{
blocks1[8].c--
if(blocks1[9].c>0){
blocks1[9].c--
}else if(blocks1[10].c>0){
blocks1[10].c--
}else if(blocks1[5].c>0){
blocks1[5].c--
}else if(blocks1[4].c>0){
blocks1[4].c--
}
blocks1[16].c++
crafting=false
},10000)
}
}
if(e.key=='c'){
if(currentCraft<5){
currentCraft++
}
}
})
document.addEventListener("mousedown",(e)=>{
if(e.button==0){
//Destroy.
raycastResults=game.raycastVoxels()
if(totalBlocks1Sum<512){
if(
blocks1[currentBlock].dur>0
&&
energy.current>50
&&
(
(game.getBlock(raycastResults.voxel)==1&¤tBlock==14)//Grass.
||
(game.getBlock(raycastResults.voxel)==2&¤tBlock==14)//Dirt.
||
(game.getBlock(raycastResults.voxel)==3&¤tBlock==12)//Stone.
||
(game.getBlock(raycastResults.voxel)==4&¤tBlock==13)//Trunk.
||
(game.getBlock(raycastResults.voxel)==5&¤tBlock==15)//Leaves.
||
(game.getBlock(raycastResults.voxel)==6&¤tBlock==13)//Planks.
||
(game.getBlock(raycastResults.voxel)==7&¤tBlock==12)//Bricks.
||
(game.getBlock(raycastResults.voxel)==8&¤tBlock==14)//Sand.
||
(game.getBlock(raycastResults.voxel)==9&¤tBlock==13)//Cactus bottom.
||
(game.getBlock(raycastResults.voxel)==10&¤tBlock==13)//Cactus top.
||
(game.getBlock(raycastResults.voxel)==11&¤tBlock==12)//Sandstone.
||//11 to 15 Bother Inclusive are tools.
(game.getBlock(raycastResults.voxel)==16&¤tBlock==12)//Glass.
)
){
energy.current-=5
blocks1[game.getBlock(raycastResults.voxel)].c++
blocks1[currentBlock].dur--
game.setBlock(raycastResults.voxel,0)
console.log("Destroying block.")
}else if(
blocks1[currentBlock].c>0
&&
energy.current>50
&&
(
(game.getBlock(raycastResults.voxel)==1&¤tBlock==14)//Grass.
||
(game.getBlock(raycastResults.voxel)==2&¤tBlock==14)//Dirt.
||
(game.getBlock(raycastResults.voxel)==3&¤tBlock==12)//Stone.
||
(game.getBlock(raycastResults.voxel)==4&¤tBlock==13)//Trunk.
||
(game.getBlock(raycastResults.voxel)==5&¤tBlock==15)//Leaves.
||
(game.getBlock(raycastResults.voxel)==6&¤tBlock==13)//Planks.
||
(game.getBlock(raycastResults.voxel)==7&¤tBlock==12)//Bricks.
||
(game.getBlock(raycastResults.voxel)==8&¤tBlock==14)//Sand.
||
(game.getBlock(raycastResults.voxel)==9&¤tBlock==13)//Cactus bottom.
||
(game.getBlock(raycastResults.voxel)==10&¤tBlock==13)//Cactus top.
||
(game.getBlock(raycastResults.voxel)==11&¤tBlock==12)//Sandstone.
||//11 to 15 Bother Inclusive are tools.
(game.getBlock(raycastResults.voxel)==16&¤tBlock==12)//Glass.
)
){
blocks1[currentBlock].c--
blocks1[currentBlock].dur=100
}
}
}else{
//Place.
raycastResults=game.raycastVoxels()
if(
energy.current>50
&&blocks1[currentBlock].c>0
&&game.getBlock(raycastResults.adjacent)==0
&¤tBlock!==12
&¤tBlock!==13
&¤tBlock!==14
&¤tBlock!==15
){
game.setBlock(raycastResults.adjacent,currentBlock)
energy.current-=5
blocks1[currentBlock].c--
console.log("Placing block.")
}
}
})
fawful.yaw.cameraInside.position.set(0,5,0)
render=()=>{
if(crafting==true){
countCraftDIV.innerHTML="Crafting."
countCraftDIV.color="rgb(0,255,0)"
}else if(currentCraft==1&&blocks1[3].c>0&&blocks1[4].c>0){
countCraftDIV.innerHTML="1 wood + 1 stone => 1 stone pickaxe."
countCraftDIV.color="rgb(255,255,255)"
}else if(currentCraft==2&&blocks1[3].c>0&&blocks1[4].c>0){
countCraftDIV.innerHTML="1 wood + 1 stone => 1 stone axe."
countCraftDIV.color="rgb(255,255,255)"
}else if(currentCraft==3&&blocks1[3].c>0&&blocks1[4].c>0){
countCraftDIV.innerHTML="1 wood + 1 stone => 1 stone shovel."
countCraftDIV.color="rgb(255,255,255)"
}else if(currentCraft==4&&blocks1[3].c>0&&blocks1[4].c>0){
countCraftDIV.innerHTML="1 wood + 1 stone => 1 stone hoe."
countCraftDIV.color="rgb(255,255,255)"
}else if(currentCraft==5&&blocks1[8].c>0&&(blocks1[9].c>0||blocks1[10].c>0||blocks1[5].c>0||blocks1[4].c>0)){
countCraftDIV.innerHTML="1 sand + 1 fuel => 1 glass."
countCraftDIV.color="rgb(255,255,255)"
}else{
countCraftDIV.innerHTML="Nothing for craft."
currentCraft=Math.floor(Math.random()*6+1)
}
food.current-=0.0001
//Muerte de hambre.
if(food.current<25&&health.current>0){
health.current--
}
//Cualquier muerte.
if(Math.floor(health.current)==0){
location.reload()
}
//Descansar.
if(energy.current<100){
energy.current+=0.08
}
//Esforzarse.
if(10<food.current&&energy.current<50){
food.current-=0.0025
}
countHealthDIV.innerHTML="Health: "+Math.floor(health.current)+"%"
countFoodDIV.innerHTML="Food: "+Math.floor(food.current)+"%"
if(energy.current<50){
countEnergyDIV.innerHTML="Energy: "+Math.floor(energy.current)+"%!!!"
countEnergyDIV.style.color="red"
}else{
countEnergyDIV.innerHTML="Energy: "+Math.floor(energy.current)+"%"
countEnergyDIV.style.color="white"
}
cactus_collide=false
for(x=-1;x<1;x++){
for(y=-1;y<1;y++){
for(z=-1;z<1;z++){
if(game.getBlock(
Math.floor(fawful.yaw.position.x)+x,
Math.floor(fawful.yaw.position.y)+y,
Math.floor(fawful.yaw.position.z)+z
)==9
||game.getBlock(
Math.floor(fawful.yaw.position.x)+x,
Math.floor(fawful.yaw.position.y)+y,
Math.floor(fawful.yaw.position.z)+z
)==10
){
cactus_collide=true
}
}
}
}
if(cactus_collide==true){
countHealthDIV.style.color="rgb(255,0,0)"
health.current-=0.05
}else if((blocks1[9].c>0||blocks1[10].c>0)&&health.current>0){
health.current-=0.05
countHealthDIV.style.color="rgb(255,0,0)"
}else{
countHealthDIV.style.color="rgb(255,255,255)"
}
requestAnimationFrame(render)
totalBlocks1Sum=0
for(i=1;i<=16;i++){
totalBlocks1Sum+=blocks1[i].c*blocks1[i].space
}
if(currentBlock!==12
&¤tBlock!==13
&¤tBlock!==14
&¤tBlock!==15
){
countBlockDIV.innerHTML=blocks1[currentBlock].c+" => "+totalBlocks1Sum+"/512"
}else{
countBlockDIV.innerHTML=blocks1[currentBlock].c+" => "+totalBlocks1Sum+"/512 "+blocks1[currentBlock].dur+"%"
}
if(blocks1[currentBlock].c!=0){
if(currentBlock==1){
IMGPlaceBlock.src="textures/grass_dirt.png"
}else if(currentBlock==2){
IMGPlaceBlock.src="textures/dirt.png"
}else if(currentBlock==3){
IMGPlaceBlock.src="textures/stone.png"
}else if(currentBlock==4){
IMGPlaceBlock.src="textures/trunk_side.png"
}else if(currentBlock==5){
IMGPlaceBlock.src="textures/leaves.png"
}else if(currentBlock==6){
IMGPlaceBlock.src="textures/planks.png"
}else if(currentBlock==7){
IMGPlaceBlock.src="textures/bricks.png"
}else if(currentBlock==8){
IMGPlaceBlock.src="textures/sand.png"
}else if(currentBlock==9){
IMGPlaceBlock.src="textures/cactus_side.png"
}else if(currentBlock==10){
IMGPlaceBlock.src="textures/cactus_top.png"
}else if(currentBlock==11){
IMGPlaceBlock.src="textures/sandstone.png"
}else if(currentBlock==12){
IMGPlaceBlock.src="textures/stone_pickaxe.png"
}else if(currentBlock==13){
IMGPlaceBlock.src="textures/stone_axe.png"
}else if(currentBlock==14){
IMGPlaceBlock.src="textures/stone_shovel.png"
}else if(currentBlock==15){
IMGPlaceBlock.src="textures/stone_hoe.png"
}else if(currentBlock==16){
IMGPlaceBlock.src="textures/glass.png"
}else{
IMGPlaceBlock.src="textures/question_block.png"
countBlockDIV.innerHTML="Empty."
}
}else{
IMGPlaceBlock.src="textures/question_block.png"
countBlockDIV.innerHTML="Empty."
}
}
render()
And the result is this: