From 539c5f90bd82d498cd40f3520868ca839a76c747 Mon Sep 17 00:00:00 2001 From: lllzebralll Date: Wed, 10 Aug 2022 20:18:04 +0300 Subject: [PATCH] add many feature, but have many draw bugs --- res/block.png | Bin 264603 -> 262913 bytes res/sprite.png | Bin 0 -> 262913 bytes src/declarations.h | 20 +- src/graphics/VoxelRenderer.cpp | 357 ++++++++++++++++++++++++--------- src/player_control.cpp | 12 +- src/voxels/Block.h | 1 + src/voxels/WorldGenerator.cpp | 102 ++++++---- src/world_render.h | 9 +- 8 files changed, 355 insertions(+), 146 deletions(-) create mode 100644 res/sprite.png diff --git a/res/block.png b/res/block.png index b89677861bda446d15759012688719499c6ded2b..eb0535cd0539b6a7d1aa8207c77e3cac692737ce 100644 GIT binary patch delta 1840 zcmb7EU1%It6#i!J{AD)Toy}%#vq?$w)21PmqN%2(wWhX#6l$pmA`0S*6a_$+i8Supy5qv4Mv<57;h>r>iTCo(`P@0sso3?4PKaZ)F`|wqkqm1&*rzxm3Mw74stYm!ZnWr!0WhJY1sHPx6Sj@SZn^HhnH>v({iF#qrgcxyh8B*9P>tX6xAv-*>ots)XC+XTG z7#*45vTy!ZpfEXh^W#F|U1Ot^HJNNSZr|upF~TXBg|y-1`+d+IHoQ-W_ z8+xbf8e+n=3s<@#225e$8j($1Jbu)sd_>N(y^QB>b0@Fap(;%O~ir+v_TE$8b zK`0GWs76KpfV8c{QNO&C1k1T&~&VLRT3d!k^TDL9<&zVnRXLiMWJF8YG8?$4o8sXz#UAP8VkH#JRz@B7GRvshkUmbOG9L4ms53DY!DEEe5wyK?TTJv=ou z;9z+rfUc?V{5o1J>IPL`s?^ZCtqqI!J!xxC8CWAxD(z;1s$Y7vhI$xbXlO|0VSdl^ zVAIaCj#8&zE-p%2I!&FmEU2mq)>9}H=;VZZH;-q0){Dgme6`|{uQfj$Y-2Fl z>DV?O#REs^!tj~q;P?$-P>Rkce|&#aDP{A`sxEmj5;{FJ&uLeJ^r6e!XGBt&b53PU zS2ede^S=&7tCbX-)*=S>-%#e1Q~wCMTAdw#T-_(rNA)Ez;`htFQS8lja~#L8C%yfw zjBl|Na1^2bVvcMVd--#^KLNy6n#@p7Ojz1O0$po@n1-(kR!;+AL5>_qz$QpFJGVZq zlflfgq4$!|hIaQnp3M)saYZY1JJOC7BRrvvzun2Y<~e1rXmJc$JQN)#KIneJ_=%$zUVdl#U&vBqasU7T delta 2617 zcmbtTc{tQ-8-8cUG%<55S;tborYMEPpvg($OhS<@Dd7~^EBho-I4OqY$da;@N*YU9 zQYXvFmL!!z))Coej4?B2=KJyWeb@Q_d*AE5-s}Fo@AKUEb3gAdE>R|jE^|YRhE9z< z;vD91;(~fmNTAPYe{c1$h#+ru@9@(;0EG9?WLc*hkk%(~W0OtbaLJ@my+1iP{xSz| zymHue`-8~rS^42Sq=fa{_oV10nm9DC@mWY_c(3W1GQ;50?{AW~r^UJpgr6NuxW{;Z z3vNYsr8BdL=7X07WeXjQd7VI7e7+#luXLrdAl7`mEVyE*rJcEpr*M7bwcUj1bp4$2 zr$a|qmTxmgWZ0p;ejjaOr=skLcj^ak?Y5#u=$3u$Y7OUp9C)V1F(AIH?4ia-+0b=1 zsoJ~rjQ<^LRzh{}t!J=1A|_Z$DI?FvT^!O154|f4d79aS_2 z&LQ~MU(R;X(|#B}@V2$Rv7yl*tgD_xC=~xK7dsw(;zmw$NMkliJ;XfxR5_CNwedJe z!F%@|43+UbG}_su$9wgNRey0C)gX^w{pn*J%%N#8QQv{0?nu&hOlSVk9NY1-WHe&i z^$8gAoe#dOw!I_6npnEyhv=^ z=ggBgU5mHqj20aWy6N6Tv8y>nW+e?skBMH++?f@V0(ib-dDsCl;yKfTiwdEQETPU! zPYLSJ-IA$xOEkKF-!7J>PpMrpbt?BV+T+%6+ps3Ddg(-Blx~!K?BsXRzyNojW`0#G z>4lT3d}waNUE3`Q#%D*B9A()$bFrxhKgP%|?!POcQCLDKakH&6^K!r6e>QzFb4P7k zare{T!^#Hly(-YK@TotVWtQO_`eP?wF2p8lU>|X);Rz=o_*CDEQ?$}!!zs1=!1 z+z!tN++1=EfoUBYs1LNV9Et3jv2XD2ve`{Z-M{tKSXSXM&4YBlk-#j^iz{9XGBWMK zyNo6eJUxA-+jf)o%THbcmvc79*#^o{){6ICx;>m3zkQiMFrj!>`w}@JQLhSS*)QtG zmT>5wh2GdXTDaW}WN)$4WE%n?|yhj!ldx4_y8TN)N3LEMsE;8-!?6_QX-8OzO;r!LyU{AE;wFAO?g{mza3+lSPW zeB62y^a-}R`gOjZS2*G${l-sQdOEw$A=jN`koeHMrJ}0qE3S~uDX`re*wtRhkSo>2 zr0Fy`s{Y6!ja1HiZKN$DV&|`HGl_O!K2nOfjN*^eJXD0={atYhWLAOuhHy%_w=C!`(T;k@Y zIKf$qqPm_RZU3seRa)A!^W@g2fmjV)|GBZ#wue_f3Ny9^vD6J!#~*mlz>9pf8p%5t zekoNM#TA<=HOOD(m1&2Ye#glsHhicy3v1hIZI~JmrswNwY(QiTzRvUYxc|E1#aqJhjVIn5;hOp9b3~3ec`yYG+r_Jbmdi-Rs@&U5R_UU-h zn{4N}i>9RmYOICmO|it~lDC1s4kf<8#VGT4EuNkH(%op(Bu?|KVg|<9w0UDfyNw3f#rFkOhFYxQ=Pb4Mi-;9w)3v51MFYv+S zVwe~#%q{_pBm#W>!U9N`$R7YC9L#a}kO)W! zbnu~v1HKI{0^Xtka2A&V3I&6F6$1So1fZm(wAKp*B$~(Lt@({aA_14n1#)t7t3?4c zk+fx=5TGDl4tE8Jpq{N3&w}_gRB>xLBqb1l zAdLoi84Q3!Ij~Ui+~pO(<_G|ZL|V-S=|TYxhqI<(m6OF{0ZmQKwRkD$o#63!Kp+qx z-of-3<9FlfPR d0tyhcld`{QjdXe`wz#f_TU*-hdu-u(>E9}Dsl@;Q diff --git a/res/sprite.png b/res/sprite.png new file mode 100644 index 0000000000000000000000000000000000000000..f9e20e0dfd52089d846fa19d75b1a4185845f57f GIT binary patch literal 262913 zcmeI*!D|#(7y$5ZOO%)*5_+iVY3Rj2ppfFBhm{eXi(1)(MGu9dy-G`=^x%&6g2Cl51`;o8o2YCfU{9owxHFNH#Nh@6Gr9K6s}uFAuL> zxpaErlZA*lU0lwuN3`~TY{mS^{f}GUJ-f62aq8~nufC7?@T2}$D}MR)Y(y4C-tPR^ zimdE)TPrIod;0@Ny4Kg%V|8`4|5_IT0tpJtZEbDE?(Xi;q0i6H4?V{O0tD(MFxL-f zXJ@DXalilVxYyFsQunxHjUzyyo&q1#Gb~XNATS958^9!#y@Nna1#AE{EsU@TOhUj0 zFbQSvAW%~Q8$eA9BP;@A5%}iX$sgYK0#sgLGpK;LCD0@R8$gq)Emr~+0UJOC#4Uj) z3D^LdRBgEus0i2qDj;qNG)ce)(4=b1l|V({;O_$Z&z6^$hwk&=-rlY(=avA0lmreo zfW^hd*x1+@I_~~F7XbnZ2;4sR$8Q6A0TPH_hy(}_AV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!8A1;EOXauj&P;s<-rS)Ajdu0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBly@V*7c)(eo8z3%%C)_Md85FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7e?kplOgeEwxb7De9f968tk0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK%n*lV>=h1_L&Qi009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF%%*@|fZ438tOyVwK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZpt%Cm z?FGonUbngSGABTQ009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RrO?`03%d=OeNx z@^)t&>sylm0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&Un5@8b&jpxluHHs~ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjY?AfOkZ300OO0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&&Ng#nr4rL>5Kf?!41NCKDh)fB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009EE5J=!$fLb^Sf&c*m1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2&5vQ7a)~NiIV^U0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PB~YU{-nova;7b zUdBcdAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5;&*%tU`^K}uCMUl5Vvz@8z z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+Kr;kpOm&+@N`EQ-9{NhfNN5+Fc;009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0Rn>roC`2W#&ZG$2oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5Fn7IfL?$!>n3Uf1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 u2oNAJNZ`L-fYxXJN5CMV|9jqw*xP&b^T%tKZa#kAA5dJplE1j{^@BGJbCYEN literal 0 HcmV?d00001 diff --git a/src/declarations.h b/src/declarations.h index 8890b849..086e2b91 100644 --- a/src/declarations.h +++ b/src/declarations.h @@ -65,6 +65,7 @@ int initialize_assets(Assets* assets) { LOAD_SHADER("res/ui.glslv", "res/ui.glslf", "ui"); LOAD_TEXTURE("res/block.png", "block"); + LOAD_TEXTURE("res/sprite.png", "sprite"); LOAD_FONT("res/font", "normal"); return 0; @@ -82,13 +83,14 @@ void setup_definitions() { block->skyLightPassing = true; block->obstacle = false; block->selectable = false; + block->type = 0; Block::blocks[block->id] = block; // DIRT 1 block = new Block(1,2); Block::blocks[block->id] = block; - // GRASS 2 + // GRASS BLOCK2 block = new Block(2,4); block->textureFaces[2] = 2; block->textureFaces[3] = 1; @@ -142,6 +144,22 @@ void setup_definitions() { block = new Block(11,13); block->breakable = false; Block::blocks[block->id] = block; + + // GRASS 12 + block = new Block(12,14); + block->drawGroup = 5; + block->lightPassing = true; + block->obstacle = false; + block->type = 2; + Block::blocks[block->id] = block; + + // FLOWER 13 + block = new Block(13,16); + block->drawGroup = 5; + block->lightPassing = true; + block->obstacle = false; + block->type = 2; + Block::blocks[block->id] = block; } #endif // DECLARATIONS_H diff --git a/src/graphics/VoxelRenderer.cpp b/src/graphics/VoxelRenderer.cpp index 5b5a7537..ce44e1f4 100644 --- a/src/graphics/VoxelRenderer.cpp +++ b/src/graphics/VoxelRenderer.cpp @@ -1,6 +1,7 @@ #include "VoxelRenderer.h" #include +#include #include "Mesh.h" #include "../voxels/Chunk.h" #include "../voxels/voxel.h" @@ -65,25 +66,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x,y+1,z, 2) / 15.0f; float ls = LIGHT(x,y+1,z, 3) / 15.0f; - float lr0 = (LIGHT(x-1,y+1,z,0) + lr*30 + LIGHT(x-1,y+1,z-1,0) + LIGHT(x,y+1,z-1,0)) / 5.0f / 15.0f; - float lr1 = (LIGHT(x-1,y+1,z,0) + lr*30 + LIGHT(x-1,y+1,z+1,0) + LIGHT(x,y+1,z+1,0)) / 5.0f / 15.0f; - float lr2 = (LIGHT(x+1,y+1,z,0) + lr*30 + LIGHT(x+1,y+1,z+1,0) + LIGHT(x,y+1,z+1,0)) / 5.0f / 15.0f; - float lr3 = (LIGHT(x+1,y+1,z,0) + lr*30 + LIGHT(x+1,y+1,z-1,0) + LIGHT(x,y+1,z-1,0)) / 5.0f / 15.0f; + float lr0 = (LIGHT(x-1,y+1,z,0) + lr*30 + LIGHT(x-1,y+1,z-1,0) + LIGHT(x,y+1,z-1,0)) / 75.0f; + float lr1 = (LIGHT(x-1,y+1,z,0) + lr*30 + LIGHT(x-1,y+1,z+1,0) + LIGHT(x,y+1,z+1,0)) / 75.0f; + float lr2 = (LIGHT(x+1,y+1,z,0) + lr*30 + LIGHT(x+1,y+1,z+1,0) + LIGHT(x,y+1,z+1,0)) / 75.0f; + float lr3 = (LIGHT(x+1,y+1,z,0) + lr*30 + LIGHT(x+1,y+1,z-1,0) + LIGHT(x,y+1,z-1,0)) / 75.0f; - float lg0 = (LIGHT(x-1,y+1,z,1) + lg*30 + LIGHT(x-1,y+1,z-1,1) + LIGHT(x,y+1,z-1,1)) / 5.0f / 15.0f; - float lg1 = (LIGHT(x-1,y+1,z,1) + lg*30 + LIGHT(x-1,y+1,z+1,1) + LIGHT(x,y+1,z+1,1)) / 5.0f / 15.0f; - float lg2 = (LIGHT(x+1,y+1,z,1) + lg*30 + LIGHT(x+1,y+1,z+1,1) + LIGHT(x,y+1,z+1,1)) / 5.0f / 15.0f; - float lg3 = (LIGHT(x+1,y+1,z,1) + lg*30 + LIGHT(x+1,y+1,z-1,1) + LIGHT(x,y+1,z-1,1)) / 5.0f / 15.0f; + float lg0 = (LIGHT(x-1,y+1,z,1) + lg*30 + LIGHT(x-1,y+1,z-1,1) + LIGHT(x,y+1,z-1,1)) / 75.0f; + float lg1 = (LIGHT(x-1,y+1,z,1) + lg*30 + LIGHT(x-1,y+1,z+1,1) + LIGHT(x,y+1,z+1,1)) / 75.0f; + float lg2 = (LIGHT(x+1,y+1,z,1) + lg*30 + LIGHT(x+1,y+1,z+1,1) + LIGHT(x,y+1,z+1,1)) / 75.0f; + float lg3 = (LIGHT(x+1,y+1,z,1) + lg*30 + LIGHT(x+1,y+1,z-1,1) + LIGHT(x,y+1,z-1,1)) / 75.0f; - float lb0 = (LIGHT(x-1,y+1,z,2) + lb*30 + LIGHT(x-1,y+1,z-1,2) + LIGHT(x,y+1,z-1,2)) / 5.0f / 15.0f; - float lb1 = (LIGHT(x-1,y+1,z,2) + lb*30 + LIGHT(x-1,y+1,z+1,2) + LIGHT(x,y+1,z+1,2)) / 5.0f / 15.0f; - float lb2 = (LIGHT(x+1,y+1,z,2) + lb*30 + LIGHT(x+1,y+1,z+1,2) + LIGHT(x,y+1,z+1,2)) / 5.0f / 15.0f; - float lb3 = (LIGHT(x+1,y+1,z,2) + lb*30 + LIGHT(x+1,y+1,z-1,2) + LIGHT(x,y+1,z-1,2)) / 5.0f / 15.0f; + float lb0 = (LIGHT(x-1,y+1,z,2) + lb*30 + LIGHT(x-1,y+1,z-1,2) + LIGHT(x,y+1,z-1,2)) / 75.0f; + float lb1 = (LIGHT(x-1,y+1,z,2) + lb*30 + LIGHT(x-1,y+1,z+1,2) + LIGHT(x,y+1,z+1,2)) / 75.0f; + float lb2 = (LIGHT(x+1,y+1,z,2) + lb*30 + LIGHT(x+1,y+1,z+1,2) + LIGHT(x,y+1,z+1,2)) / 75.0f; + float lb3 = (LIGHT(x+1,y+1,z,2) + lb*30 + LIGHT(x+1,y+1,z-1,2) + LIGHT(x,y+1,z-1,2)) / 75.0f; - float ls0 = (LIGHT(x-1,y+1,z,3) + ls*30 + LIGHT(x-1,y+1,z-1,3) + LIGHT(x,y+1,z-1,3)) / 5.0f / 15.0f; - float ls1 = (LIGHT(x-1,y+1,z,3) + ls*30 + LIGHT(x-1,y+1,z+1,3) + LIGHT(x,y+1,z+1,3)) / 5.0f / 15.0f; - float ls2 = (LIGHT(x+1,y+1,z,3) + ls*30 + LIGHT(x+1,y+1,z+1,3) + LIGHT(x,y+1,z+1,3)) / 5.0f / 15.0f; - float ls3 = (LIGHT(x+1,y+1,z,3) + ls*30 + LIGHT(x+1,y+1,z-1,3) + LIGHT(x,y+1,z-1,3)) / 5.0f / 15.0f; + float ls0 = (LIGHT(x-1,y+1,z,3) + ls*30 + LIGHT(x-1,y+1,z-1,3) + LIGHT(x,y+1,z-1,3)) / 75.0f; + float ls1 = (LIGHT(x-1,y+1,z,3) + ls*30 + LIGHT(x-1,y+1,z+1,3) + LIGHT(x,y+1,z+1,3)) / 75.0f; + float ls2 = (LIGHT(x+1,y+1,z,3) + ls*30 + LIGHT(x+1,y+1,z+1,3) + LIGHT(x,y+1,z+1,3)) / 75.0f; + float ls3 = (LIGHT(x+1,y+1,z,3) + ls*30 + LIGHT(x+1,y+1,z-1,3) + LIGHT(x,y+1,z-1,3)) / 75.0f; VERTEX(index, x-0.5f, y+0.5f, z-0.5f, u2,v1, lr0, lg0, lb0, ls0); VERTEX(index, x-0.5f, y+0.5f, z+0.5f, u2,v2, lr1, lg1, lb1, ls1); @@ -103,25 +104,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x,y-1,z, 2) / 15.0f; float ls = LIGHT(x,y-1,z, 3) / 15.0f; - float lr0 = (LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x-1,y-1,z,0) + LIGHT(x,y-1,z-1,0)) / 5.0f / 15.0f; - float lr1 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y-1,z,0) + LIGHT(x,y-1,z+1,0)) / 5.0f / 15.0f; - float lr2 = (LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x-1,y-1,z,0) + LIGHT(x,y-1,z+1,0)) / 5.0f / 15.0f; - float lr3 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y-1,z,0) + LIGHT(x,y-1,z-1,0)) / 5.0f / 15.0f; + float lr0 = (LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x-1,y-1,z,0) + LIGHT(x,y-1,z-1,0)) / 75.0f; + float lr1 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y-1,z,0) + LIGHT(x,y-1,z+1,0)) / 75.0f; + float lr2 = (LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x-1,y-1,z,0) + LIGHT(x,y-1,z+1,0)) / 75.0f; + float lr3 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y-1,z,0) + LIGHT(x,y-1,z-1,0)) / 75.0f; - float lg0 = (LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x-1,y-1,z,1) + LIGHT(x,y-1,z-1,1)) / 5.0f / 15.0f; - float lg1 = (LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x+1,y-1,z,1) + LIGHT(x,y-1,z+1,1)) / 5.0f / 15.0f; - float lg2 = (LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x-1,y-1,z,1) + LIGHT(x,y-1,z+1,1)) / 5.0f / 15.0f; - float lg3 = (LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x+1,y-1,z,1) + LIGHT(x,y-1,z-1,1)) / 5.0f / 15.0f; + float lg0 = (LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x-1,y-1,z,1) + LIGHT(x,y-1,z-1,1)) / 75.0f; + float lg1 = (LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x+1,y-1,z,1) + LIGHT(x,y-1,z+1,1)) / 75.0f; + float lg2 = (LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x-1,y-1,z,1) + LIGHT(x,y-1,z+1,1)) / 75.0f; + float lg3 = (LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x+1,y-1,z,1) + LIGHT(x,y-1,z-1,1)) / 75.0f; - float lb0 = (LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x-1,y-1,z,2) + LIGHT(x,y-1,z-1,2)) / 5.0f / 15.0f; - float lb1 = (LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x+1,y-1,z,2) + LIGHT(x,y-1,z+1,2)) / 5.0f / 15.0f; - float lb2 = (LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x-1,y-1,z,2) + LIGHT(x,y-1,z+1,2)) / 5.0f / 15.0f; - float lb3 = (LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x+1,y-1,z,2) + LIGHT(x,y-1,z-1,2)) / 5.0f / 15.0f; + float lb0 = (LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x-1,y-1,z,2) + LIGHT(x,y-1,z-1,2)) / 75.0f; + float lb1 = (LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x+1,y-1,z,2) + LIGHT(x,y-1,z+1,2)) / 75.0f; + float lb2 = (LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x-1,y-1,z,2) + LIGHT(x,y-1,z+1,2)) / 75.0f; + float lb3 = (LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x+1,y-1,z,2) + LIGHT(x,y-1,z-1,2)) / 75.0f; - float ls0 = (LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x-1,y-1,z,3) + LIGHT(x,y-1,z-1,3)) / 5.0f / 15.0f; - float ls1 = (LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x+1,y-1,z,3) + LIGHT(x,y-1,z+1,3)) / 5.0f / 15.0f; - float ls2 = (LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x-1,y-1,z,3) + LIGHT(x,y-1,z+1,3)) / 5.0f / 15.0f; - float ls3 = (LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x+1,y-1,z,3) + LIGHT(x,y-1,z-1,3)) / 5.0f / 15.0f; + float ls0 = (LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x-1,y-1,z,3) + LIGHT(x,y-1,z-1,3)) / 75.0f; + float ls1 = (LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x+1,y-1,z,3) + LIGHT(x,y-1,z+1,3)) / 75.0f; + float ls2 = (LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x-1,y-1,z,3) + LIGHT(x,y-1,z+1,3)) / 75.0f; + float ls3 = (LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x+1,y-1,z,3) + LIGHT(x,y-1,z-1,3)) / 75.0f; VERTEX(index, x-0.5f, y-0.5f, z-0.5f, u1,v1, lr0,lg0,lb0,ls0); VERTEX(index, x+0.5f, y-0.5f, z+0.5f, u2,v2, lr1,lg1,lb1,ls1); @@ -142,25 +143,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x+1,y,z, 2) / 15.0f; float ls = LIGHT(x+1,y,z, 3) / 15.0f; - float lr0 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 5.0f / 15.0f; - float lr1 = (LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 5.0f / 15.0f; - float lr2 = (LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 5.0f / 15.0f; - float lr3 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 5.0f / 15.0f; + float lr0 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + float lr1 = (LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + float lr2 = (LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + float lr3 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; - float lg0 = (LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y-1,z,1)) / 5.0f / 15.0f; - float lg1 = (LIGHT(x+1,y+1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y+1,z,1)) / 5.0f / 15.0f; - float lg2 = (LIGHT(x+1,y+1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y+1,z,1)) / 5.0f / 15.0f; - float lg3 = (LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y-1,z,1)) / 5.0f / 15.0f; + float lg0 = (LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y-1,z,1)) / 75.0f; + float lg1 = (LIGHT(x+1,y+1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y+1,z,1)) / 75.0f; + float lg2 = (LIGHT(x+1,y+1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y+1,z,1)) / 75.0f; + float lg3 = (LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y-1,z,1)) / 75.0f; - float lb0 = (LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y-1,z,2)) / 5.0f / 15.0f; - float lb1 = (LIGHT(x+1,y+1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y+1,z,2)) / 5.0f / 15.0f; - float lb2 = (LIGHT(x+1,y+1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y+1,z,2)) / 5.0f / 15.0f; - float lb3 = (LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y-1,z,2)) / 5.0f / 15.0f; + float lb0 = (LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y-1,z,2)) / 75.0f; + float lb1 = (LIGHT(x+1,y+1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y+1,z,2)) / 75.0f; + float lb2 = (LIGHT(x+1,y+1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y+1,z,2)) / 75.0f; + float lb3 = (LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y-1,z,2)) / 75.0f; - float ls0 = (LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y-1,z,3)) / 5.0f / 15.0f; - float ls1 = (LIGHT(x+1,y+1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y+1,z,3)) / 5.0f / 15.0f; - float ls2 = (LIGHT(x+1,y+1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y+1,z,3)) / 5.0f / 15.0f; - float ls3 = (LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y-1,z,3)) / 5.0f / 15.0f; + float ls0 = (LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y-1,z,3)) / 75.0f; + float ls1 = (LIGHT(x+1,y+1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y+1,z,3)) / 75.0f; + float ls2 = (LIGHT(x+1,y+1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y+1,z,3)) / 75.0f; + float ls3 = (LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y-1,z,3)) / 75.0f; VERTEX(index, x+0.5f, y-0.5f, z-0.5f, u2,v1, lr0,lg0,lb0,ls0); VERTEX(index, x+0.5f, y+0.5f, z-0.5f, u2,v2, lr1,lg1,lb1,ls1); @@ -180,25 +181,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x-1,y,z, 2) / 15.0f; float ls = LIGHT(x-1,y,z, 3) / 15.0f; - float lr0 = (LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x-1,y,z-1,0) + LIGHT(x-1,y-1,z,0)) / 5.0f / 15.0f; - float lr1 = (LIGHT(x-1,y+1,z+1,0) + lr*30 + LIGHT(x-1,y,z+1,0) + LIGHT(x-1,y+1,z,0)) / 5.0f / 15.0f; - float lr2 = (LIGHT(x-1,y+1,z-1,0) + lr*30 + LIGHT(x-1,y,z-1,0) + LIGHT(x-1,y+1,z,0)) / 5.0f / 15.0f; - float lr3 = (LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x-1,y,z+1,0) + LIGHT(x-1,y-1,z,0)) / 5.0f / 15.0f; + float lr0 = (LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x-1,y,z-1,0) + LIGHT(x-1,y-1,z,0)) / 75.0f; + float lr1 = (LIGHT(x-1,y+1,z+1,0) + lr*30 + LIGHT(x-1,y,z+1,0) + LIGHT(x-1,y+1,z,0)) / 75.0f; + float lr2 = (LIGHT(x-1,y+1,z-1,0) + lr*30 + LIGHT(x-1,y,z-1,0) + LIGHT(x-1,y+1,z,0)) / 75.0f; + float lr3 = (LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x-1,y,z+1,0) + LIGHT(x-1,y-1,z,0)) / 75.0f; - float lg0 = (LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x-1,y,z-1,1) + LIGHT(x-1,y-1,z,1)) / 5.0f / 15.0f; - float lg1 = (LIGHT(x-1,y+1,z+1,1) + lg*30 + LIGHT(x-1,y,z+1,1) + LIGHT(x-1,y+1,z,1)) / 5.0f / 15.0f; - float lg2 = (LIGHT(x-1,y+1,z-1,1) + lg*30 + LIGHT(x-1,y,z-1,1) + LIGHT(x-1,y+1,z,1)) / 5.0f / 15.0f; - float lg3 = (LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x-1,y,z+1,1) + LIGHT(x-1,y-1,z,1)) / 5.0f / 15.0f; + float lg0 = (LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x-1,y,z-1,1) + LIGHT(x-1,y-1,z,1)) / 75.0f; + float lg1 = (LIGHT(x-1,y+1,z+1,1) + lg*30 + LIGHT(x-1,y,z+1,1) + LIGHT(x-1,y+1,z,1)) / 75.0f; + float lg2 = (LIGHT(x-1,y+1,z-1,1) + lg*30 + LIGHT(x-1,y,z-1,1) + LIGHT(x-1,y+1,z,1)) / 75.0f; + float lg3 = (LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x-1,y,z+1,1) + LIGHT(x-1,y-1,z,1)) / 75.0f; - float lb0 = (LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x-1,y,z-1,2) + LIGHT(x-1,y-1,z,2)) / 5.0f / 15.0f; - float lb1 = (LIGHT(x-1,y+1,z+1,2) + lb*30 + LIGHT(x-1,y,z+1,2) + LIGHT(x-1,y+1,z,2)) / 5.0f / 15.0f; - float lb2 = (LIGHT(x-1,y+1,z-1,2) + lb*30 + LIGHT(x-1,y,z-1,2) + LIGHT(x-1,y+1,z,2)) / 5.0f / 15.0f; - float lb3 = (LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x-1,y,z+1,2) + LIGHT(x-1,y-1,z,2)) / 5.0f / 15.0f; + float lb0 = (LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x-1,y,z-1,2) + LIGHT(x-1,y-1,z,2)) / 75.0f; + float lb1 = (LIGHT(x-1,y+1,z+1,2) + lb*30 + LIGHT(x-1,y,z+1,2) + LIGHT(x-1,y+1,z,2)) / 75.0f; + float lb2 = (LIGHT(x-1,y+1,z-1,2) + lb*30 + LIGHT(x-1,y,z-1,2) + LIGHT(x-1,y+1,z,2)) / 75.0f; + float lb3 = (LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x-1,y,z+1,2) + LIGHT(x-1,y-1,z,2)) / 75.0f; - float ls0 = (LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x-1,y,z-1,3) + LIGHT(x-1,y-1,z,3)) / 5.0f / 15.0f; - float ls1 = (LIGHT(x-1,y+1,z+1,3) + ls*30 + LIGHT(x-1,y,z+1,3) + LIGHT(x-1,y+1,z,3)) / 5.0f / 15.0f; - float ls2 = (LIGHT(x-1,y+1,z-1,3) + ls*30 + LIGHT(x-1,y,z-1,3) + LIGHT(x-1,y+1,z,3)) / 5.0f / 15.0f; - float ls3 = (LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x-1,y,z+1,3) + LIGHT(x-1,y-1,z,3)) / 5.0f / 15.0f; + float ls0 = (LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x-1,y,z-1,3) + LIGHT(x-1,y-1,z,3)) / 75.0f; + float ls1 = (LIGHT(x-1,y+1,z+1,3) + ls*30 + LIGHT(x-1,y,z+1,3) + LIGHT(x-1,y+1,z,3)) / 75.0f; + float ls2 = (LIGHT(x-1,y+1,z-1,3) + ls*30 + LIGHT(x-1,y,z-1,3) + LIGHT(x-1,y+1,z,3)) / 75.0f; + float ls3 = (LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x-1,y,z+1,3) + LIGHT(x-1,y-1,z,3)) / 75.0f; VERTEX(index, x-0.5f, y-0.5f, z-0.5f, u1,v1, lr0,lg0,lb0,ls0); VERTEX(index, x-0.5f, y+0.5f, z+0.5f, u2,v2, lr1,lg1,lb1,ls1); @@ -219,25 +220,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x,y,z+1, 2) / 15.0f; float ls = LIGHT(x,y,z+1, 3) / 15.0f; - float lr0 = l*(LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x,y-1,z+1,0) + LIGHT(x-1,y,z+1,0)) / 5.0f / 15.0f; - float lr1 = l*(LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x,y+1,z+1,0) + LIGHT(x+1,y,z+1,0)) / 5.0f / 15.0f; - float lr2 = l*(LIGHT(x-1,y+1,z+1,0) + lr*30 + LIGHT(x,y+1,z+1,0) + LIGHT(x-1,y,z+1,0)) / 5.0f / 15.0f; - float lr3 = l*(LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x,y-1,z+1,0) + LIGHT(x+1,y,z+1,0)) / 5.0f / 15.0f; + float lr0 = l*(LIGHT(x-1,y-1,z+1,0) + lr*30 + LIGHT(x,y-1,z+1,0) + LIGHT(x-1,y,z+1,0)) / 75.0f; + float lr1 = l*(LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x,y+1,z+1,0) + LIGHT(x+1,y,z+1,0)) / 75.0f; + float lr2 = l*(LIGHT(x-1,y+1,z+1,0) + lr*30 + LIGHT(x,y+1,z+1,0) + LIGHT(x-1,y,z+1,0)) / 75.0f; + float lr3 = l*(LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x,y-1,z+1,0) + LIGHT(x+1,y,z+1,0)) / 75.0f; - float lg0 = l*(LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x,y-1,z+1,1) + LIGHT(x-1,y,z+1,1)) / 5.0f / 15.0f; - float lg1 = l*(LIGHT(x+1,y+1,z+1,1) + lg*30 + LIGHT(x,y+1,z+1,1) + LIGHT(x+1,y,z+1,1)) / 5.0f / 15.0f; - float lg2 = l*(LIGHT(x-1,y+1,z+1,1) + lg*30 + LIGHT(x,y+1,z+1,1) + LIGHT(x-1,y,z+1,1)) / 5.0f / 15.0f; - float lg3 = l*(LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x,y-1,z+1,1) + LIGHT(x+1,y,z+1,1)) / 5.0f / 15.0f; + float lg0 = l*(LIGHT(x-1,y-1,z+1,1) + lg*30 + LIGHT(x,y-1,z+1,1) + LIGHT(x-1,y,z+1,1)) / 75.0f; + float lg1 = l*(LIGHT(x+1,y+1,z+1,1) + lg*30 + LIGHT(x,y+1,z+1,1) + LIGHT(x+1,y,z+1,1)) / 75.0f; + float lg2 = l*(LIGHT(x-1,y+1,z+1,1) + lg*30 + LIGHT(x,y+1,z+1,1) + LIGHT(x-1,y,z+1,1)) / 75.0f; + float lg3 = l*(LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x,y-1,z+1,1) + LIGHT(x+1,y,z+1,1)) / 75.0f; - float lb0 = l*(LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x,y-1,z+1,2) + LIGHT(x-1,y,z+1,2)) / 5.0f / 15.0f; - float lb1 = l*(LIGHT(x+1,y+1,z+1,2) + lb*30 + LIGHT(x,y+1,z+1,2) + LIGHT(x+1,y,z+1,2)) / 5.0f / 15.0f; - float lb2 = l*(LIGHT(x-1,y+1,z+1,2) + lb*30 + LIGHT(x,y+1,z+1,2) + LIGHT(x-1,y,z+1,2)) / 5.0f / 15.0f; - float lb3 = l*(LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x,y-1,z+1,2) + LIGHT(x+1,y,z+1,2)) / 5.0f / 15.0f; + float lb0 = l*(LIGHT(x-1,y-1,z+1,2) + lb*30 + LIGHT(x,y-1,z+1,2) + LIGHT(x-1,y,z+1,2)) / 75.0f; + float lb1 = l*(LIGHT(x+1,y+1,z+1,2) + lb*30 + LIGHT(x,y+1,z+1,2) + LIGHT(x+1,y,z+1,2)) / 75.0f; + float lb2 = l*(LIGHT(x-1,y+1,z+1,2) + lb*30 + LIGHT(x,y+1,z+1,2) + LIGHT(x-1,y,z+1,2)) / 75.0f; + float lb3 = l*(LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x,y-1,z+1,2) + LIGHT(x+1,y,z+1,2)) / 75.0f; - float ls0 = l*(LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x,y-1,z+1,3) + LIGHT(x-1,y,z+1,3)) / 5.0f / 15.0f; - float ls1 = l*(LIGHT(x+1,y+1,z+1,3) + ls*30 + LIGHT(x,y+1,z+1,3) + LIGHT(x+1,y,z+1,3)) / 5.0f / 15.0f; - float ls2 = l*(LIGHT(x-1,y+1,z+1,3) + ls*30 + LIGHT(x,y+1,z+1,3) + LIGHT(x-1,y,z+1,3)) / 5.0f / 15.0f; - float ls3 = l*(LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x,y-1,z+1,3) + LIGHT(x+1,y,z+1,3)) / 5.0f / 15.0f; + float ls0 = l*(LIGHT(x-1,y-1,z+1,3) + ls*30 + LIGHT(x,y-1,z+1,3) + LIGHT(x-1,y,z+1,3)) / 75.0f; + float ls1 = l*(LIGHT(x+1,y+1,z+1,3) + ls*30 + LIGHT(x,y+1,z+1,3) + LIGHT(x+1,y,z+1,3)) / 75.0f; + float ls2 = l*(LIGHT(x-1,y+1,z+1,3) + ls*30 + LIGHT(x,y+1,z+1,3) + LIGHT(x-1,y,z+1,3)) / 75.0f; + float ls3 = l*(LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x,y-1,z+1,3) + LIGHT(x+1,y,z+1,3)) / 75.0f; VERTEX(index, x-0.5f, y-0.5f, z+0.5f, u1,v1, lr0,lg0,lb0,ls0); VERTEX(index, x+0.5f, y+0.5f, z+0.5f, u2,v2, lr1,lg1,lb1,ls1); @@ -257,25 +258,25 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const float lb = LIGHT(x,y,z-1, 2) / 15.0f; float ls = LIGHT(x,y,z-1, 3) / 15.0f; - float lr0 = l*(LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x,y-1,z-1,0) + LIGHT(x-1,y,z-1,0)) / 5.0f / 15.0f; - float lr1 = l*(LIGHT(x-1,y+1,z-1,0) + lr*30 + LIGHT(x,y+1,z-1,0) + LIGHT(x-1,y,z-1,0)) / 5.0f / 15.0f; - float lr2 = l*(LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x,y+1,z-1,0) + LIGHT(x+1,y,z-1,0)) / 5.0f / 15.0f; - float lr3 = l*(LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x,y-1,z-1,0) + LIGHT(x+1,y,z-1,0)) / 5.0f / 15.0f; + float lr0 = l*(LIGHT(x-1,y-1,z-1,0) + lr*30 + LIGHT(x,y-1,z-1,0) + LIGHT(x-1,y,z-1,0)) / 75.0f; + float lr1 = l*(LIGHT(x-1,y+1,z-1,0) + lr*30 + LIGHT(x,y+1,z-1,0) + LIGHT(x-1,y,z-1,0)) / 75.0f; + float lr2 = l*(LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x,y+1,z-1,0) + LIGHT(x+1,y,z-1,0)) / 75.0f; + float lr3 = l*(LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x,y-1,z-1,0) + LIGHT(x+1,y,z-1,0)) / 75.0f; - float lg0 = l*(LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x,y-1,z-1,1) + LIGHT(x-1,y,z-1,1)) / 5.0f / 15.0f; - float lg1 = l*(LIGHT(x-1,y+1,z-1,1) + lg*30 + LIGHT(x,y+1,z-1,1) + LIGHT(x-1,y,z-1,1)) / 5.0f / 15.0f; - float lg2 = l*(LIGHT(x+1,y+1,z-1,1) + lg*30 + LIGHT(x,y+1,z-1,1) + LIGHT(x+1,y,z-1,1)) / 5.0f / 15.0f; - float lg3 = l*(LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x,y-1,z-1,1) + LIGHT(x+1,y,z-1,1)) / 5.0f / 15.0f; + float lg0 = l*(LIGHT(x-1,y-1,z-1,1) + lg*30 + LIGHT(x,y-1,z-1,1) + LIGHT(x-1,y,z-1,1)) / 75.0f; + float lg1 = l*(LIGHT(x-1,y+1,z-1,1) + lg*30 + LIGHT(x,y+1,z-1,1) + LIGHT(x-1,y,z-1,1)) / 75.0f; + float lg2 = l*(LIGHT(x+1,y+1,z-1,1) + lg*30 + LIGHT(x,y+1,z-1,1) + LIGHT(x+1,y,z-1,1)) / 75.0f; + float lg3 = l*(LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x,y-1,z-1,1) + LIGHT(x+1,y,z-1,1)) / 75.0f; - float lb0 = l*(LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x,y-1,z-1,2) + LIGHT(x-1,y,z-1,2)) / 5.0f / 15.0f; - float lb1 = l*(LIGHT(x-1,y+1,z-1,2) + lb*30 + LIGHT(x,y+1,z-1,2) + LIGHT(x-1,y,z-1,2)) / 5.0f / 15.0f; - float lb2 = l*(LIGHT(x+1,y+1,z-1,2) + lb*30 + LIGHT(x,y+1,z-1,2) + LIGHT(x+1,y,z-1,2)) / 5.0f / 15.0f; - float lb3 = l*(LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x,y-1,z-1,2) + LIGHT(x+1,y,z-1,2)) / 5.0f / 15.0f; + float lb0 = l*(LIGHT(x-1,y-1,z-1,2) + lb*30 + LIGHT(x,y-1,z-1,2) + LIGHT(x-1,y,z-1,2)) / 75.0f; + float lb1 = l*(LIGHT(x-1,y+1,z-1,2) + lb*30 + LIGHT(x,y+1,z-1,2) + LIGHT(x-1,y,z-1,2)) / 75.0f; + float lb2 = l*(LIGHT(x+1,y+1,z-1,2) + lb*30 + LIGHT(x,y+1,z-1,2) + LIGHT(x+1,y,z-1,2)) / 75.0f; + float lb3 = l*(LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x,y-1,z-1,2) + LIGHT(x+1,y,z-1,2)) / 75.0f; - float ls0 = l*(LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x,y-1,z-1,3) + LIGHT(x-1,y,z-1,3)) / 5.0f / 15.0f; - float ls1 = l*(LIGHT(x-1,y+1,z-1,3) + ls*30 + LIGHT(x,y+1,z-1,3) + LIGHT(x-1,y,z-1,3)) / 5.0f / 15.0f; - float ls2 = l*(LIGHT(x+1,y+1,z-1,3) + ls*30 + LIGHT(x,y+1,z-1,3) + LIGHT(x+1,y,z-1,3)) / 5.0f / 15.0f; - float ls3 = l*(LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x,y-1,z-1,3) + LIGHT(x+1,y,z-1,3)) / 5.0f / 15.0f; + float ls0 = l*(LIGHT(x-1,y-1,z-1,3) + ls*30 + LIGHT(x,y-1,z-1,3) + LIGHT(x-1,y,z-1,3)) / 75.0f; + float ls1 = l*(LIGHT(x-1,y+1,z-1,3) + ls*30 + LIGHT(x,y+1,z-1,3) + LIGHT(x-1,y,z-1,3)) / 75.0f; + float ls2 = l*(LIGHT(x+1,y+1,z-1,3) + ls*30 + LIGHT(x,y+1,z-1,3) + LIGHT(x+1,y,z-1,3)) / 75.0f; + float ls3 = l*(LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x,y-1,z-1,3) + LIGHT(x+1,y,z-1,3)) / 75.0f; VERTEX(index, x-0.5f, y-0.5f, z-0.5f, u2,v1, lr0,lg0,lb0,ls0); VERTEX(index, x-0.5f, y+0.5f, z-0.5f, u2,v2, lr1,lg1,lb1,ls1); @@ -287,6 +288,119 @@ inline void _renderBlock(std::vector& buffer, int x, int y, int z, const } } + + + + +inline void _renderXBlock(std::vector& buffer, int x, int y, int z, const Chunk** chunks, voxel vox, size_t& index){ + Block* block = Block::blocks[vox.id]; + + int rand = ((x * z + y) xor (z * y - x)) * (z + y); + + float xs = (float)(char)rand / 512; + float zs = (float)(char)(rand >> 8) / 512; + + if (block->type != 2){ + return; + } + + float l; + float uvsize = 1.0f/16.0f; + + float lr = LIGHT(x,y,z, 0) / 15.0f; + float lg = LIGHT(x,y,z, 1) / 15.0f; + float lb = LIGHT(x,y,z, 2) / 15.0f; + float ls = LIGHT(x,y,z, 3) / 15.0f; + + float lr0 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; + float lr1 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; + float lr2 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; + float lr3 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; + float lr4 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; + float lr5 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; + float lr6 = (LIGHT(x,y+1,z,0) + lr*30) / 45.0f; + float lr7 = (LIGHT(x,y-1,z,0) + lr*30) / 45.0f; + + float lg0 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; + float lg1 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; + float lg2 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; + float lg3 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; + float lg4 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; + float lg5 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; + float lg6 = (LIGHT(x,y+1,z,1) + lg*30) / 45.0f; + float lg7 = (LIGHT(x,y-1,z,1) + lg*30) / 45.0f; + + float lb0 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; + float lb1 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; + float lb2 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; + float lb3 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; + float lb4 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; + float lb5 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; + float lb6 = (LIGHT(x,y+1,z,2) + lb*30) / 45.0f; + float lb7 = (LIGHT(x,y-1,z,2) + lb*30) / 45.0f; + + float ls0 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; + float ls1 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; + float ls2 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; + float ls3 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; + float ls4 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; + float ls5 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; + float ls6 = (LIGHT(x,y+1,z,3) + ls*30) / 45.0f; + float ls7 = (LIGHT(x,y-1,z,3) + ls*30) / 45.0f; + + + l = 0.95f; + + {SETUP_UV(block->textureFaces[1]); + + VERTEX(index, x-0.5f+xs, y-0.5f, z-0.5f+zs, u2,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x-0.5f+xs, y+0.5f, z-0.5f+zs, u2,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x+0.5f+xs, y+0.5f, z+0.5f+zs, u1,v2, lr2,lg2,lb2,ls2); + + VERTEX(index, x-0.5f+xs, y-0.5f, z-0.5f+zs, u2,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.5f+xs, y+0.5f, z+0.5f+zs, u1,v2, lr2,lg2,lb2,ls2); + VERTEX(index, x+0.5f+xs, y-0.5f, z+0.5f+zs, u1,v1, lr3,lg3,lb3,ls3);} + + + l = 0.85f; + + {SETUP_UV(block->textureFaces[0]); + + VERTEX(index, x-0.5f+xs, y-0.5f, z-0.5f+zs, u1,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.5f+xs, y+0.5f, z+0.5f+zs, u2,v2, lr1,lg1,lb1,ls1); + VERTEX(index, x-0.5f+xs, y+0.5f, z-0.5f+zs, u1,v2, lr2,lg2,lb2,ls2); + + VERTEX(index, x-0.5f+xs, y-0.5f, z-0.5f+zs, u1,v1, lr0,lg0,lb0,ls0); + VERTEX(index, x+0.5f+xs, y-0.5f, z+0.5f+zs, u2,v1, lr3,lg3,lb3,ls3); + VERTEX(index, x+0.5f+xs, y+0.5f, z+0.5f+zs, u2,v2, lr1,lg1,lb1,ls1);} + + + l = 0.9f; + + {SETUP_UV(block->textureFaces[5]); + + VERTEX(index, x-0.5f+xs, y-0.5f, z+0.5f+zs, u1,v1, lr4,lg4,lb4,ls4); + VERTEX(index, x+0.5f+xs, y+0.5f, z-0.5f+zs, u2,v2, lr5,lg5,lb5,ls5); + VERTEX(index, x-0.5f+xs, y+0.5f, z+0.5f+zs, u1,v2, lr6,lg6,lb6,ls6); + + VERTEX(index, x-0.5f+xs, y-0.5f, z+0.5f+zs, u1,v1, lr4,lg4,lb4,ls4); + VERTEX(index, x+0.5f+xs, y-0.5f, z-0.5f+zs, u2,v1, lr7,lg7,lb7,ls7); + VERTEX(index, x+0.5f+xs, y+0.5f, z-0.5f+zs, u2,v2, lr5,lg5,lb5,ls5);} + + + l = 0.8f; + + {SETUP_UV(block->textureFaces[4]); + + VERTEX(index, x-0.5f+xs, y-0.5f, z+0.5f+zs, u2,v1, lr4,lg4,lb4,ls4); + VERTEX(index, x-0.5f+xs, y+0.5f, z+0.5f+zs, u2,v2, lr5,lg5,lb5,ls5); + VERTEX(index, x+0.5f+xs, y+0.5f, z-0.5f+zs, u1,v2, lr6,lg6,lb6,ls6); + + VERTEX(index, x-0.5f+xs, y-0.5f, z+0.5f+zs, u2,v1, lr4,lg4,lb4,ls4); + VERTEX(index, x+0.5f+xs, y+0.5f, z-0.5f+zs, u1,v2, lr6,lg6,lb6,ls6); + VERTEX(index, x+0.5f+xs, y-0.5f, z-0.5f+zs, u1,v1, lr7,lg7,lb7,ls7);} +} + const float* VoxelRenderer::render(Chunk* chunk, const Chunk** chunks, size_t& size){ buffer.clear(); size_t index = 0; @@ -294,7 +408,7 @@ const float* VoxelRenderer::render(Chunk* chunk, const Chunk** chunks, size_t& s for (int z = 0; z < CHUNK_D; z++){ for (int x = 0; x < CHUNK_W; x++){ voxel vox = chunk->voxels[(y * CHUNK_D + z) * CHUNK_W + x]; - if (vox.id == 9 || vox.id == 4) + if (vox.id == 9 || vox.id == 4 || vox.id == 12 || vox.id == 13) continue; _renderBlock(buffer, x, y, z, chunks, vox, index); } @@ -312,6 +426,17 @@ const float* VoxelRenderer::render(Chunk* chunk, const Chunk** chunks, size_t& s } } + for (int y = 0; y < CHUNK_H; y++){ + for (int z = 0; z < CHUNK_D; z++){ + for (int x = 0; x < CHUNK_W; x++){ + voxel vox = chunk->voxels[(y * CHUNK_D + z) * CHUNK_W + x]; + if (vox.id != 12 && vox.id != 13) + continue; + _renderXBlock(buffer, x, y, z, chunks, vox, index); + } + } + } + for (int y = 0; y < CHUNK_H; y++){ for (int z = 0; z < CHUNK_D; z++){ for (int x = 0; x < CHUNK_W; x++){ @@ -325,3 +450,41 @@ const float* VoxelRenderer::render(Chunk* chunk, const Chunk** chunks, size_t& s size = buffer.size(); return &buffer[0]; } + + + + // float lr0 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float lr1 = (LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lr2 = (LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lr3 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float lr4 = (LIGHT(x+1,y-1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float lr5 = (LIGHT(x+1,y+1,z-1,0) + lr*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lr6 = (LIGHT(x+1,y+1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lr7 = (LIGHT(x+1,y-1,z+1,0) + lr*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + + // float lg0 = (LIGHT(x+1,y-1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y-1,z,1)) / 75.0f; + // float lg1 = (LIGHT(x+1,y+1,z-1,1) + lg*30 + LIGHT(x+1,y,z-1,1) + LIGHT(x+1,y+1,z,1)) / 75.0f; + // float lg2 = (LIGHT(x+1,y+1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y+1,z,1)) / 75.0f; + // float lg3 = (LIGHT(x+1,y-1,z+1,1) + lg*30 + LIGHT(x+1,y,z+1,1) + LIGHT(x+1,y-1,z,1)) / 75.0f; + // float lg4 = (LIGHT(x+1,y-1,z-1,0) + lg*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float lg5 = (LIGHT(x+1,y+1,z-1,0) + lg*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lg6 = (LIGHT(x+1,y+1,z+1,0) + lg*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lg7 = (LIGHT(x+1,y-1,z+1,0) + lg*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + + // float lb0 = (LIGHT(x+1,y-1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y-1,z,2)) / 75.0f; + // float lb1 = (LIGHT(x+1,y+1,z-1,2) + lb*30 + LIGHT(x+1,y,z-1,2) + LIGHT(x+1,y+1,z,2)) / 75.0f; + // float lb2 = (LIGHT(x+1,y+1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y+1,z,2)) / 75.0f; + // float lb3 = (LIGHT(x+1,y-1,z+1,2) + lb*30 + LIGHT(x+1,y,z+1,2) + LIGHT(x+1,y-1,z,2)) / 75.0f; + // float lb4 = (LIGHT(x+1,y-1,z-1,0) + lb*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float lb5 = (LIGHT(x+1,y+1,z-1,0) + lb*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lb6 = (LIGHT(x+1,y+1,z+1,0) + lb*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float lb7 = (LIGHT(x+1,y-1,z+1,0) + lb*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + + // float ls0 = (LIGHT(x+1,y-1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y-1,z,3)) / 75.0f; + // float ls1 = (LIGHT(x+1,y+1,z-1,3) + ls*30 + LIGHT(x+1,y,z-1,3) + LIGHT(x+1,y+1,z,3)) / 75.0f; + // float ls2 = (LIGHT(x+1,y+1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y+1,z,3)) / 75.0f; + // float ls3 = (LIGHT(x+1,y-1,z+1,3) + ls*30 + LIGHT(x+1,y,z+1,3) + LIGHT(x+1,y-1,z,3)) / 75.0f; + // float ls4 = (LIGHT(x+1,y-1,z-1,0) + ls*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; + // float ls5 = (LIGHT(x+1,y+1,z-1,0) + ls*30 + LIGHT(x+1,y,z-1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float ls6 = (LIGHT(x+1,y+1,z+1,0) + ls*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y+1,z,0)) / 75.0f; + // float ls7 = (LIGHT(x+1,y-1,z+1,0) + ls*30 + LIGHT(x+1,y,z+1,0) + LIGHT(x+1,y-1,z,0)) / 75.0f; \ No newline at end of file diff --git a/src/player_control.cpp b/src/player_control.cpp index b8e5f407..33d87a7a 100644 --- a/src/player_control.cpp +++ b/src/player_control.cpp @@ -27,6 +27,7 @@ #define CAMERA_SHAKING_SPEED 1.6f #define CAMERA_SHAKING_DELTA_K 10.0f #define FLIGHT_SPEED_MUL 8.0f +#define CHEAT_SPEED_MUL 5.0f #define JUMP_FORCE 7.0f void update_controls(PhysicsSolver* physics, @@ -53,11 +54,15 @@ void update_controls(PhysicsSolver* physics, bool sprint = Events::pressed(GLFW_KEY_LEFT_CONTROL); bool shift = Events::pressed(GLFW_KEY_LEFT_SHIFT) && hitbox->grounded && !sprint; bool zoom = Events::pressed(GLFW_KEY_C); + bool cheat = Events::pressed(GLFW_KEY_R); float speed = player->speed; if (player->flight){ speed *= FLIGHT_SPEED_MUL; } + if (cheat){ + speed *= CHEAT_SPEED_MUL; + } int substeps = (int)(delta * 1000); substeps = (substeps <= 0 ? 1 : (substeps > 100 ? 100 : substeps)); physics->step(chunks, hitbox, delta, substeps, shift, player->flight ? 0.0f : 1.0f); @@ -174,7 +179,12 @@ void update_interaction(Level* level, LineBatch* lineBatch){ vec3 iend; voxel* vox = chunks->rayCast(camera->position, camera->front, 10.0f, end, norm, iend); if (vox != nullptr){ - lineBatch->box(iend.x+0.5f, iend.y+0.5f, iend.z+0.5f, 1.005f,1.005f,1.005f, 0,0,0,0.5f); + if (Block::blocks[vox->id]->type == 1){ + lineBatch->box(iend.x+0.5f, iend.y+0.5f, iend.z+0.5f, 1.005f,1.005f,1.005f, 0,0,0,0.5f); + } else if (Block::blocks[vox->id]->type == 2){ + lineBatch->box(iend.x+0.4f, iend.y+0.3f, iend.z+0.4f, 0.805f,0.805f,0.805f, 0,0,0,0.5f); + } + if (Events::jclicked(GLFW_MOUSE_BUTTON_1) && Block::blocks[vox->id]->breakable){ int x = (int)iend.x; diff --git a/src/voxels/Block.h b/src/voxels/Block.h index cd66322b..5310ca2f 100644 --- a/src/voxels/Block.h +++ b/src/voxels/Block.h @@ -15,6 +15,7 @@ public: bool obstacle = true; bool selectable = true; bool breakable = true; + unsigned char type = 1; Block(unsigned int id, int texture); }; diff --git a/src/voxels/WorldGenerator.cpp b/src/voxels/WorldGenerator.cpp index d7be2a78..c9f694b7 100644 --- a/src/voxels/WorldGenerator.cpp +++ b/src/voxels/WorldGenerator.cpp @@ -10,59 +10,72 @@ #include class PseudoRandom { - unsigned seed; + unsigned short seed; public: PseudoRandom(){ - seed = (unsigned)time(0); + seed = (unsigned short)time(0); } int rand(){ - seed = (8253729 * seed + 2396403); - return seed % 32768; + // seed = ((unsigned short)8253729 xor seed + (unsigned short)2396403 xor (unsigned short)time(0)) * (seed xor (unsigned short)2124678); + // unsigned short a = seed xor 0xf1ad; + // unsigned short b = seed * 0x7fb7; + // unsigned short c = a * 0xa77c; + // unsigned short d = b xor c; + // unsigned short e = d * seed % 0x6a; + // unsigned short f = c < seed % 0x10; + + // seed = (f % e) - a; + // seed = ((a + d) * b - c) * e + f; + + seed = (seed + 0x7ed5 + (seed << 6)); + seed = (seed ^ 0xc23c ^ (seed >> 9)); + seed = (seed + 0x1656 + (seed << 3)); + seed = ((seed + 0xa264) ^ (seed << 4)); + seed = (seed + 0xfd70 - (seed << 3)); + seed = (seed ^ 0xba49 ^ (seed >> 8)); + + return (int)seed; } void setSeed(int number){ - seed = (unsigned)number+8253729; + seed = (unsigned short)number+23729 xor (unsigned short)number+16786; rand(); } }; float calc_height(fnl_state *noise, int real_x, int real_z){ - const float s = 0.18f; - float height = fnlGetNoise3D(noise, real_x*0.0125f*s*32,real_z*0.0125f*s*32, 0.0f); - height += fnlGetNoise3D(noise, real_x*0.025f*s*32,real_z*0.025f*s*32, 0.0f)*0.5f; - height += fnlGetNoise3D(noise, real_x*0.05f*s*32,real_z*0.05f*s*32, 0.0f)*0.25f; - height += fnlGetNoise3D(noise, real_x*0.1f*s*32,real_z*0.1f*s*32, 0.0f)*0.225f; - height += fnlGetNoise3D(noise, real_x*0.2f*s*32,real_z*0.2f*s*32, 0.0f)*0.125f; + // const float s = 0.18f; + float height = fnlGetNoise3D(noise, real_x*0.0125f*8,real_z*0.0125f*8, 0.0f); + height += fnlGetNoise3D(noise, real_x*0.025f*8,real_z*0.025f*8, 0.0f)*0.5f; + height += fnlGetNoise3D(noise, real_x*0.05f*8,real_z*0.05f*8, 0.0f)*0.25f; height += fnlGetNoise3D(noise, - real_x*0.2f*s*32 + fnlGetNoise3D(noise, real_x*0.1f*s*32,real_z*0.1f*s*32, 0.0f)*50, - real_z*0.2f*s*32 + fnlGetNoise3D(noise, real_x*0.1f*s*32+4363,real_z*0.1f*s*32, 0.0f)*50, + real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*50, + real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8, 0.0f)*50, 0.0f)*0.1f; - height += fnlGetNoise3D(noise, real_x*0.4f*s*32,real_z*0.4f*s*32, 0.0f)*0.0625f; - // height += fnlGetNoise3D(noise, real_x*s*32,real_z*s*32, 0.0f)*0.03f; - height = height * 0.5f + 0.5f; - height *= height; - height *= (140.0f)*0.12f/s; - height += (42)*0.12f/s; + height += fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*0.125f; + height += fnlGetNoise3D(noise, real_x*0.4f*8,real_z*0.4f*8, 0.0f)*0.0625f; + height += fnlGetNoise3D(noise, real_x*8,real_z*8, 0.0f)*0.03f*(fnlGetNoise3D(noise, -real_x*0.0125f*8-1000,real_z*0.0125f*8+2000, 0.0f)/2+0.5f); + height *= fnlGetNoise3D(noise, real_x*0.0125f*8+1000,real_z*0.0125f*8+1000, 0.0f)/2+0.5f; + height += 1.0f; + height *= 64.0f; return height; } float calc_height_faster(fnl_state *noise, int real_x, int real_z){ - const float s = 0.18f; - float height = fnlGetNoise3D(noise, real_x*0.0125f*s*32,real_z*0.0125f*s*32, 0.0f); - height += fnlGetNoise3D(noise, real_x*0.025f*s*32,real_z*0.025f*s*32, 0.0f)*0.5f; - height += fnlGetNoise3D(noise, real_x*0.05f*s*32,real_z*0.05f*s*32, 0.0f)*0.25f; - height += fnlGetNoise3D(noise, real_x*0.1f*s*32,real_z*0.1f*s*32, 0.0f)*0.225f; - height += fnlGetNoise3D(noise, real_x*0.2f*s*32,real_z*0.2f*s*32, 0.0f)*0.125f; + // const float s = 0.18f; + float height = fnlGetNoise3D(noise, real_x*0.0125f*8,real_z*0.0125f*8, 0.0f); + height += fnlGetNoise3D(noise, real_x*0.025f*8,real_z*0.025f*8, 0.0f)*0.5f; + height += fnlGetNoise3D(noise, real_x*0.05f*8,real_z*0.05f*8, 0.0f)*0.25f; height += fnlGetNoise3D(noise, - real_x*0.2f*s*32 + fnlGetNoise3D(noise, real_x*0.1f*s*32,real_z*0.1f*s*32, 0.0f)*50, - real_z*0.2f*s*32 + fnlGetNoise3D(noise, real_x*0.1f*s*32+4363,real_z*0.1f*s*32, 0.0f)*50, + real_x*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*50, + real_z*0.2f*8 + fnlGetNoise3D(noise, real_x*0.1f*8+4363,real_z*0.1f*8, 0.0f)*50, 0.0f)*0.1f; - // height += fnlGetNoise3D(noise, real_x*0.4f*s*32,real_z*0.4f*s*32, 0.0f)*0.125f*0.5F; - height = height * 0.5f + 0.5f; - height *= height; - height *= (140.0f)*0.12f/s; - height += (42)*0.12f/s; + height += fnlGetNoise3D(noise, real_x*0.1f*8,real_z*0.1f*8, 0.0f)*0.125f; + // height += fnlGetNoise3D(noise, real_x*0.4f*8,real_z*0.4f*8, 0.0f)*0.125f*0.5F; + height *= fnlGetNoise3D(noise, real_x*0.0125f*8+1000,real_z*0.0125f*8+1000, 0.0f)/2+0.5f; + height += 1.0f; + height *= 64.0f; return height; } #include @@ -98,10 +111,13 @@ void WorldGenerator::generate(voxel* voxels, int cx, int cy, int cz, int seed){ noise.noise_type = FNL_NOISE_OPENSIMPLEX2; noise.seed = seed * 60617077 % 25896307; - PseudoRandom random; + PseudoRandom randomtree; + // PseudoRandom random; float heights[CHUNK_VOL]; + std::cout << calc_height(&noise, cx, cy) << "\n"; + for (int z = 0; z < CHUNK_D; z++){ for (int x = 0; x < CHUNK_W; x++){ int real_x = x + cx * CHUNK_W; @@ -127,28 +143,26 @@ void WorldGenerator::generate(voxel* voxels, int cx, int cy, int cz, int seed){ } else if (real_y < height){ id = 1; } else { - int tree = generate_tree(&noise, &random, heights, real_x, real_y, real_z, 16); + int tree = generate_tree(&noise, &randomtree, heights, real_x, real_y, real_z, 16); if (tree) id = tree; - else if ((tree = generate_tree(&noise, &random, heights, real_x, real_y, real_z, 19))){ + else if ((tree = generate_tree(&noise, &randomtree, heights, real_x, real_y, real_z, 19))){ id = tree; - }else if ((tree = generate_tree(&noise, &random, heights, real_x, real_y, real_z, 23))){ + }else if ((tree = generate_tree(&noise, &randomtree, heights, real_x, real_y, real_z, 23))){ id = tree; } } - // if ((real_y < height) && (57 > height) && (height > 51) && ((int)height == real_y)){ - // id = 10; - // } - - // if ( ((height - (1 - 0.1 * pow(height - 55, 4))) < real_y) && (real_y < height)){ - // id = 10; - // } - if ( ((height - (1.5 - 0.2 * pow(height - 54, 4))) < real_y) && (real_y < height)){ id = 10; } if (real_y <= 2) id = 11; + if ((real_y > 55) && ((int)height + 1 == real_y) && ((unsigned short)random() > 56000)){ + id = 12; + } + if ((real_y > 55) && ((int)height + 1 == real_y) && ((unsigned short)random() > 64000)){ + id = 13; + } voxels[(y * CHUNK_D + z) * CHUNK_W + x].id = id; } } diff --git a/src/world_render.h b/src/world_render.h index c3c50a45..a022a531 100644 --- a/src/world_render.h +++ b/src/world_render.h @@ -139,11 +139,14 @@ void draw_hud(World* world, Level* level, Assets* assets, bool devdata, int fps) // choosen block preview Texture* blocks = assets->getTexture("block"); - batch->texture(blocks); + Texture* sprite = assets->getTexture("sprite"); + + batch->texture(sprite); + batch->sprite(16, 640, 64, 64, 16, 0, vec4(1.0f)); + batch->texture(blocks); int texid = Block::blocks[player->choosenBlock]->textureFaces[3]; // face-3 is top face of block - batch->sprite(14, Window::height-82, 68, 68, 16, texid, vec4(0.0f, 0.0f, 0.0f, 1.0f)); - batch->sprite(16, Window::height-80, 64, 64, 16, texid, vec4(1.0f)); + batch->sprite(24, 648, 48, 48, 16, texid, vec4(1.0f)); batch->render(); }