parent
f42bd21939
commit
e709c1df68
|
@ -0,0 +1,73 @@
|
|||
function generate_terrain(seed)
|
||||
if(seed!=nil)srand(seed)
|
||||
local complexity=11
|
||||
-- generate a random heightmap
|
||||
local hmap={}
|
||||
for x=0,127 do
|
||||
hmap[x]={}
|
||||
for y=0,127 do
|
||||
hmap[x][y]=rnd(complexity)
|
||||
end
|
||||
end
|
||||
|
||||
-- smooth the heightmap using a simple average filter
|
||||
local function smooth()
|
||||
local temp={}
|
||||
for x=0,127 do
|
||||
temp[x]={}
|
||||
for y=0,127 do
|
||||
local sum=0
|
||||
local ct=0
|
||||
for dx=-1,1 do
|
||||
for dy=-1,1 do
|
||||
local nx=x+dx
|
||||
local ny=y+dy
|
||||
if nx>-1 and nx<128 and ny>-1 and ny<128 then
|
||||
sum+=hmap[nx][ny]
|
||||
ct+=1
|
||||
end
|
||||
end
|
||||
end
|
||||
temp[x][y]=sum/ct
|
||||
end
|
||||
end
|
||||
hmap=temp
|
||||
end
|
||||
|
||||
-- smooth the heightmap 5 times
|
||||
for i=1,4 do
|
||||
smooth()
|
||||
end
|
||||
|
||||
--setting the pixel values
|
||||
for x=0,127 do
|
||||
for y=0,127 do
|
||||
local val=(hmap[x][y])
|
||||
--write your own logic here!
|
||||
--this could be substituted
|
||||
--with mset() or sth similar
|
||||
--and take the values into
|
||||
--account.ill provide a small
|
||||
--example
|
||||
if val<4.5 then
|
||||
--deep water
|
||||
sset(x,y,1)
|
||||
elseif val<5 then
|
||||
--water
|
||||
sset(x,y,12)
|
||||
elseif val<5.2 then
|
||||
--beach
|
||||
sset(x,y,9)
|
||||
elseif val<6 then
|
||||
--grass
|
||||
sset(x,y,3)
|
||||
elseif val<6.7 then
|
||||
--mountain
|
||||
sset(x,y,13)
|
||||
else
|
||||
--snow
|
||||
sset(x,y,6)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue