Endless terrain generator
Posted: Wed Dec 02, 2015 2:50 pm
Hi guys, did you ever face the attempt to create an endless terrain? I do. I "just" want to repeat same 3d model block (let's say 2048x2048x32 sized) in a matrix 3x3 cells. When player moves I delete old cells and recreate new ones. I'm struggling to find a method suitable in quakec but with no luck. There's something already ready to eat?
I tried this video tutorial for Unity in C# and it worked, but I couldn't replicate it in in quakec.
I also trying to do something like this in a static way but, .bsp maps, used as models, are not rendered!
inside worldspawn function
Another Idea I had is to store previous terrain and then add origin from previous to the new one, but I don't want that use player position, I want that uses old terrain origin and creates a new terrain ACCORDING to player position.
I dunno if I explain myself correctly, sorry otherwise! Thanks guys in advance for any suggestion!!
PS: I use FTE + CSQC but I don't think it's related in this case.
I tried this video tutorial for Unity in C# and it worked, but I couldn't replicate it in in quakec.
I also trying to do something like this in a static way but, .bsp maps, used as models, are not rendered!
inside worldspawn function
Code: Select all
local int i;
local float isize = 2048;
for(i=0;i<9;i++){
terrain = spawn();
setmodel(terrain,"maps/terrain.bsp");
setsize(terrain,[-(isize/2),-(isize/2),16],[isize/2,isize/2,16]);
terrain.solid = SOLID_BSP;
if(i == 0){
setorigin(terrain,[0,0,0]);
}
else if(i == 1){
setorigin(terrain,[isize,0,0]);
}
else if(i == 2){
setorigin(terrain,[-isize,0,0]);
}
else if(i == 3){
setorigin(terrain,[0,isize,0]);
}
else if(i == 4){
setorigin(terrain,[0,-isize,0]);
}
else if(i == 5){
setorigin(terrain,[isize,isize,0]);
}
else if(i == 6){
setorigin(terrain,[-isize,isize,0]);
}
else if(i == 7){
setorigin(terrain,[isize,-isize,0]);
}
else if(i == 8){
setorigin(terrain,[-isize,-isize,0]);
}
terrain.SendFlags |= 1;
terrain.SendEntity = SendTerrainFlags;
}
Code: Select all
local entity terrainprev;
local float isize = 2048;
for(i=0;i<9;i++){
terrain = spawn();
setmodel(terrain,"maps/terrain.bsp");
setsize(terrain,[-(isize/2),-(isize/2),16],[isize/2,isize/2,16]);
terrain.solid = SOLID_BSP;
if(terrainprev!=world){
setorigin(terrain,[terrainprev.origin_x,terrainprev.origin_y+isize,0]);
}
terrain.SendFlags |= 1;
terrain.SendEntity = SendTerrainFlags;
terrainprev = terrain;
}
PS: I use FTE + CSQC but I don't think it's related in this case.