TAB 2
Test2 = class()
function Test2:name()
return “SuperCraft V1.0 Beta X”
end
function Test2:init()
– all the unique vertices that make up a cube
local vertices = {
vec3(-0.5, -0.5, 0.5), – Left bottom front
vec3( 0.5, -0.5, 0.5), – Right bottom front
vec3( 0.5, 0.5, 0.5), – Right top front
vec3(-0.5, 0.5, 0.5), – Left top front
vec3(-0.5, -0.5, -0.5), – Left bottom back
vec3( 0.5, -0.5, -0.5), – Right bottom back
vec3( 0.5, 0.5, -0.5), – Right top back
vec3(-0.5, 0.5, -0.5), – Left top back
}
-- now construct a cube out of the vertices above
local cubeverts = {
-- Front
vertices[1], vertices[2], vertices[3],
vertices[1], vertices[3], vertices[4],
-- Right
vertices[2], vertices[6], vertices[7],
vertices[2], vertices[7], vertices[3],
-- Back
vertices[6], vertices[5], vertices[8],
vertices[6], vertices[8], vertices[7],
-- Left
vertices[5], vertices[1], vertices[4],
vertices[5], vertices[4], vertices[8],
-- Top
vertices[4], vertices[3], vertices[7],
vertices[4], vertices[7], vertices[8],
-- Bottom
vertices[5], vertices[6], vertices[2],
vertices[5], vertices[2], vertices[1],
}
-- all the unique texture positions needed
local texvertices = { vec2(0.03,0.24),
vec2(0.97,0.24),
vec2(0.03,0.69),
vec2(0.97,0.69) }
-- apply the texture coordinates to each triangle
local cubetexCoords = {
-- Front
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
-- Right
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
-- Back
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
-- Left
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
-- Top
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
-- Bottom
texvertices[1], texvertices[2], texvertices[4],
texvertices[1], texvertices[4], texvertices[3],
}
-- all the unique vertices that make up a cube
local vertices = {
vec3(-0.5, -0.2, 0.5), -- Left bottom front
vec3( 0.5, -0.2, 0.5), -- Right bottom front
vec3( 0.5, 0.2, 0.5), -- Right top front
vec3(-0.5, 0.2, 0.5), -- Left top front
vec3(-0.5, -0.2, -0.5), -- Left bottom back
vec3( 0.5, -0.2, -0.5), -- Right bottom back
vec3( 0.5, 0.2, -0.5), -- Right top back
vec3(-0.5, 0.2, -0.5), -- Left top back
}
-- now construct a cube out of the vertices above
local slab = {
-- Front
vertices[1], vertices[2], vertices[3],
vertices[1], vertices[3], vertices[4],
-- Right
vertices[2], vertices[6], vertices[7],
vertices[2], vertices[7], vertices[3],
-- Back
vertices[6], vertices[5], vertices[8],
vertices[6], vertices[8], vertices[7],
-- Left
vertices[5], vertices[1], vertices[4],
vertices[5], vertices[4], vertices[8],
-- Top
vertices[4], vertices[3], vertices[7],
vertices[4], vertices[7], vertices[8],
-- Bottom
vertices[5], vertices[6], vertices[2],
vertices[5], vertices[2], vertices[1],
}
-- now we have our blocks
-- Stone Block
self.stone = mesh()
self.stone.vertices = cubeverts
self.stone.texture = "Planet Cute:Stone Block"
self.stone.texCoords = cubetexCoords
self.stone:setColors(255,255,255,255)
-- Dirt Block
self.dirt = mesh()
self.dirt.vertices = cubeverts
self.dirt.texture = "Planet Cute:Dirt Block"
self.dirt.texCoords = cubetexCoords
self.dirt:setColors(255,255,255,255)
-- Grass Block
self.grass = mesh()
self.grass.vertices = cubeverts
self.grass.texture = "Planet Cute:Grass Block"
self.grass.texCoords = cubetexCoords
self.grass:setColors(255,255,255,255)
-- Water block
self.water = mesh()
self.water.vertices = cubeverts
self.water.texture = "Planet Cute:Water Block"
self.water.texCoords = cubetexCoords
self.water:setColors(255,255,255,100)
-- Leaves
self.Oak_Leaves = mesh()
self.Oak_Leaves.vertices = cubeverts
self.Oak_Leaves.texture = "Documents:Leaves"
self.Oak_Leaves.texCoords = cubetexCoords
self.Oak_Leaves:setColors(255,255,255,255)
-- Block IDs
self.blocks = { self.grass, self.dirt, self.stone, self.water, self.Oak_Leaves}
-- our scene itself
-- Flat world
-- bottom middle top
self.scene = {
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,4,4,4,4,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,4,4,4,4,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,4,4,4,4,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,4,4,4,4,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} },
{ {3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3}, {2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2}, {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} } }
end
function Test2:draw()
pushMatrix()
pushStyle()
-- Make a floor
translate(0,-Size/2,0)
rotate(Angle,0,1,0)
rotate(90,1,0,0)
–sprite(“SpaceCute:Background”, 0, 0, 300, 300)
-- render each block in turn
for zi,zv in ipairs(self.scene) do
for yi,yv in ipairs(zv) do
for xi, xv in ipairs(yv) do
-- apply each transform need - rotate, scale, translate to the correct place
resetMatrix()
rotate(Angle,0,1,0)
local s = Size*0.10
scale(s,s,s)
translate(xi-10, yi-5, zi-10) -- renders based on corner
-- so -2 fudges it near center
if xv > 0 then
self.blocks[xv]:draw()
end
end
end
end
popStyle()
popMatrix()
end