--Masterlau

function GU_Start()
Gu.start3d()
end


function GU_CameraLookAt(camera_x,camera_y,camera_z,camera_look_x,camera_look_y,camera_look_z)
Gum.matrixMode(Gu.PROJECTION)
Gum.loadIdentity()
Gum.perspective(50, 16/9, 3, 10000)        
Gum.matrixMode(Gu.VIEW)       
Gum.loadIdentity()
Gum.lookAt(camera_x,camera_y,camera_z,camera_look_x,camera_look_y,camera_look_z,0,1,0)
end


function GU_End()
Gu.end3d()
end


function GU_DrawModel(x,y,z,a,b,c,Tex,Model)
if tex ~= "false" then
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(Tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, Model)
else
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, Model)
end
end


function GU_DrawLine(x1,y1,z1,color1,x2,y2,z2,color2)
mmodel = { {color1,x1,y1,z1}, {color2,x2,y2,z2}, }
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(0, 0, 0);
Gum.rotateXYZ(0,0,0)
Gum.drawArray(Gu.LINES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D,mmodel)
end




function GU_DrawPyramide(x,y,z,a,b,c,Largeur,hauteur,tex,color)
if tex ~= "false" then
mmodel = {
   {1,1,color,  0,  0, 0},
   {1,0,color,  1*Largeur,  0, 0},
   {0,0,color,  0.5*Largeur,  1*hauteur,  0.5*Largeur},

   {1,1,color,  1*Largeur,  0, 0},
   {1,0,color,  1*Largeur,  0,1*Largeur},
   {0,0,color,  0.5*Largeur,  1*hauteur, 0.5*Largeur},


   {1,1,color,  1*Largeur,  0, 1*Largeur},
   {1,0,color,  0,  0, 1*Largeur},
   {0,0,color,  0.5*Largeur,  1*hauteur,  0.5*Largeur},


   {1,1,color,  0,  0, 1*Largeur},
   {1,0,color,  0,  0, 0},
   {0,0,color, 0.5*Largeur,  1*hauteur,  0.5*Largeur},
}
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
else
mmodel = {
   {color,  0,  0, 0},
   {color,  1*Largeur,  0, 0},
   {color,  0.5*Largeur,  1*hauteur,  0.5*Largeur},

   {color,  1*Largeur,  0, 0},
   {color,  1*Largeur,  0,1*Largeur},
   {color,  0.5*Largeur,  1*hauteur, 0.5*Largeur},


   {color,  1*Largeur,  0, 1*Largeur},
   {color,  0,  0, 1*Largeur},
   {color,  0.5*Largeur,  1*hauteur,  0.5*Largeur},


   {color,  0,  0, 1*Largeur},
   {color,  0,  0, 0},
   {color, 0.5*Largeur,  1*hauteur,  0.5*Largeur},
}
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
end
end




function GU_DrawPlaneX(x,y,z,a,b,c,Largeur,tex,color)
if tex ~= "false" then
mmodel = {
	{0,0,color,1*Largeur,1*Largeur,0},
	{1,1,color,-1*Largeur,-1*Largeur,0},
	{1,0,color,-1*Largeur,1*Largeur,0},

	{0,0,color,1*Largeur,1*Largeur,0},
	{1,1,color,-1*Largeur,-1*Largeur,0},
	{0,1,color,1*Largeur,-1*Largeur,0},


	{0,0,color,1*Largeur,1*Largeur,0},
	{1,0,color,-1*Largeur,1*Largeur,0},
	{1,1,color,-1*Largeur,-1*Largeur,0},

	{0,0,color,1*Largeur,1*Largeur,0},
	{0,1,color,1*Largeur,-1*Largeur,0},
	{1,1,color,-1*Largeur,-1*Largeur,0},
}
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
else
mmodel = {
	{color,1*Largeur,1*Largeur,0},
	{color,-1*Largeur,-1*Largeur,0},
	{color,-1*Largeur,1*Largeur,0},

	{color,1*Largeur,1*Largeur,0},
	{color,-1*Largeur,-1*Largeur,0},
	{color,1*Largeur,-1*Largeur,0},


	{color,1*Largeur,1*Largeur,0},
	{color,-1*Largeur,1*Largeur,0},
	{color,-1*Largeur,-1*Largeur,0},

	{color,1*Largeur,1*Largeur,0},
	{color,1*Largeur,-1*Largeur,0},
	{color,-1*Largeur,-1*Largeur,0},

}
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
end
end





function GU_DrawPlaneY(x,y,z,a,b,c,Largeur,tex,color)
if tex ~= "false" then
mmodel = {
	{0,0,color,0,1*Largeur,1*Largeur},
	{1,1,color,0,-1*Largeur,-1*Largeur},
	{1,0,color,0,1*Largeur,-1*Largeur},

	{0,0,color,0,1*Largeur,1*Largeur},
	{1,1,color,0,-1*Largeur,-1*Largeur},
	{0,1,color,0,-1*Largeur,1*Largeur},


	{0,0,color,0,1*Largeur,1*Largeur},
	{1,0,color,0,1*Largeur,-1*Largeur},
	{1,1,color,0,-1*Largeur,-1*Largeur},

	{0,0,color,0,1*Largeur,1*Largeur},
	{0,1,color,0,-1*Largeur,1*Largeur},
	{1,1,color,0,-1*Largeur,-1*Largeur},

}
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
else
mmodel = {
	{color,0,1*Largeur,1*Largeur},
	{color,0,-1*Largeur,-1*Largeur},
	{color,0,1*Largeur,-1*Largeur},

	{color,0,1*Largeur,1*Largeur},
	{color,0,-1*Largeur,-1*Largeur},
	{color,0,-1*Largeur,1*Largeur},


	{color,0,1*Largeur,1*Largeur},
	{color,0,1*Largeur,-1*Largeur},
	{color,0,-1*Largeur,-1*Largeur},

	{color,0,1*Largeur,1*Largeur},
	{color,0,-1*Largeur,1*Largeur},
	{color,0,-1*Largeur,-1*Largeur},
}
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
end
end





function GU_DrawGround(x,y,z,a,b,c,Largeur,tex,color)
if tex ~= "false" then
mmodel = {

{1,1,color,  1*Largeur,  0,  1*Largeur},
{0,0,color,  0,  0,  0},
{1,0,color,  1*Largeur,  0,  0},

{0,0,color,   0,  0, 0},
{1,1,color,   1*Largeur,  0, 1*Largeur},
{0,1,color,   0,  0, 1*Largeur},

}
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
else
mmodel = {

{color,  1*Largeur,  0,  1*Largeur},
{color,  0,  0,  0},
{color,  1*Largeur,  0,  0},

{color,   0,  0, 0},
{color,   1*Largeur,  0, 1*Largeur},
{color,   0,  0, 1*Largeur},

}
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y, z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
end
end








function GU_DrawCube(x,y,z,a,b,c,Largeur,tex,color)
if tex ~= "false" then
mmodel = {
	{0, 0, color, -1*Largeur, -1*Largeur,  1*Largeur}, 
	{1, 0, color, -1*Largeur,  1*Largeur,  1*Largeur},
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},  

	{0, 0, color, -1*Largeur, -1*Largeur,  1*Largeur}, 
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{0, 1, color,  1*Largeur, -1*Largeur,  1*Largeur},  


	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur}, 
	{1, 0, color,  1*Largeur, -1*Largeur, -1*Largeur}, 
	{1, 1, color,  1*Largeur,  1*Largeur, -1*Largeur}, 

	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur},
	{1, 1, color,  1*Largeur,  1*Largeur, -1*Largeur}, 
	{0, 1, color, -1*Largeur,  1*Largeur, -1*Largeur},  




	{0, 0, color,  1*Largeur, -1*Largeur, -1*Largeur},  
	{1, 0, color,  1*Largeur, -1*Largeur,  1*Largeur},  
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},

	{0, 0, color,  1*Largeur, -1*Largeur, -1*Largeur}, 
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{0, 1, color,  1*Largeur,  1*Largeur, -1*Largeur}, 


	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{1, 0, color, -1*Largeur,  1*Largeur, -1*Largeur}, 
	{1, 1, color, -1*Largeur,  1*Largeur,  1*Largeur},  

	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{1, 1, color, -1*Largeur,  1*Largeur,  1*Largeur},  
	{0, 1, color, -1*Largeur, -1*Largeur,  1*Largeur},  




	{0, 0, color, -1*Largeur,  1*Largeur, -1*Largeur},  
	{1, 0, color,  1*Largeur,  1*Largeur, -1*Largeur}, 
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},  

	{0, 0, color, -1*Largeur,  1*Largeur, -1*Largeur},  
	{1, 1, color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{0, 1, color, -1*Largeur,  1*Largeur,  1*Largeur}, 


	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{1, 0, color, -1*Largeur, -1*Largeur,  1*Largeur},  
	{1, 1, color,  1*Largeur, -1*Largeur,  1*Largeur},  

	{0, 0, color, -1*Largeur, -1*Largeur, -1*Largeur},
	{1, 1, color,  1*Largeur, -1*Largeur,  1*Largeur},  
	{0, 1, color,  1*Largeur, -1*Largeur, -1*Largeur},  
}
Gu.enable(Gu.TEXTURE_2D)
Gu.texImage(tex)
Gu.texFunc(Gu.TFX_MODULATE, Gu.TCC_RGBA)
Gu.texEnvColor(Color.new(255,255,255))
Gu.texFilter(Gu.LINEAR, Gu.LINEAR)
Gu.texScale(1, 1)
Gu.texOffset(0, 0)
Gu.ambientColor(Color.new(255,255,255))
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.TEXTURE_32BITF+Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
else
mmodel = {
	{color, -1*Largeur, -1*Largeur,  1*Largeur}, 
	{color, -1*Largeur,  1*Largeur,  1*Largeur},
	{color,  1*Largeur,  1*Largeur,  1*Largeur},  

	{color, -1*Largeur, -1*Largeur,  1*Largeur}, 
	{color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{color,  1*Largeur, -1*Largeur,  1*Largeur},  


	{ color, -1*Largeur, -1*Largeur, -1*Largeur}, 
	{ color,  1*Largeur, -1*Largeur, -1*Largeur}, 
	{ color,  1*Largeur,  1*Largeur, -1*Largeur}, 

	{ color, -1*Largeur, -1*Largeur, -1*Largeur},
	{ color,  1*Largeur,  1*Largeur, -1*Largeur}, 
	{ color, -1*Largeur,  1*Largeur, -1*Largeur},  




	{ color,  1*Largeur, -1*Largeur, -1*Largeur},  
	{ color,  1*Largeur, -1*Largeur,  1*Largeur},  
	{ color,  1*Largeur,  1*Largeur,  1*Largeur},

	{ color,  1*Largeur, -1*Largeur, -1*Largeur}, 
	{ color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{ color,  1*Largeur,  1*Largeur, -1*Largeur}, 


	{ color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{ color, -1*Largeur,  1*Largeur, -1*Largeur}, 
	{ color, -1*Largeur,  1*Largeur,  1*Largeur},  

	{ color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{ color, -1*Largeur,  1*Largeur,  1*Largeur},  
	{ color, -1*Largeur, -1*Largeur,  1*Largeur},  




	{ color, -1*Largeur,  1*Largeur, -1*Largeur},  
	{ color,  1*Largeur,  1*Largeur, -1*Largeur}, 
	{ color,  1*Largeur,  1*Largeur,  1*Largeur},  

	{ color, -1*Largeur,  1*Largeur, -1*Largeur},  
	{ color,  1*Largeur,  1*Largeur,  1*Largeur},  
	{ color, -1*Largeur,  1*Largeur,  1*Largeur}, 


	{ color, -1*Largeur, -1*Largeur, -1*Largeur},  
	{ color, -1*Largeur, -1*Largeur,  1*Largeur},  
	{ color,  1*Largeur, -1*Largeur,  1*Largeur},  

	{ color, -1*Largeur, -1*Largeur, -1*Largeur},
	{ color,  1*Largeur, -1*Largeur,  1*Largeur},  
	{ color,  1*Largeur, -1*Largeur, -1*Largeur},  
}
Gu.disable(Gu.TEXTURE_2D)  
Gum.matrixMode(Gu.MODEL)
Gum.loadIdentity()
Gum.translate(x, y+(Largeur), z);
Gum.rotateXYZ(math.rad(a),math.rad(b),math.rad(c))
Gum.drawArray(Gu.TRIANGLES, Gu.COLOR_8888+Gu.VERTEX_32BITF+Gu.TRANSFORM_3D, mmodel)
end
end



function GU_Fog(start,finish,color)
Gu.enable(Gu.FOG) 
Gu.fog(start,finish,color) 
end













cx = 0
cy= 4
cz = 0
clx = 0
cly = 0
clz = 0

xG = 0
yG = 4
zG = 0

CameraTurn=0

CanTurn = "true"

vecteur = 180

vitesse = 0

forceTurn = 0
forceTurnBord = "right"

function GU_3eme_Personne_Camera(loin,vitesseMax,axelerationBRUT,decelerationBRUT)

axeleration = axelerationBRUT/1000
deceleration = decelerationBRUT/1000

cx = math.sin(math.rad(vecteur-CameraTurn))*loin + xG

cz = math.cos(math.rad(vecteur-CameraTurn))*loin + zG

clx = xG
cly = yG
clz = zG


if pad:cross() then
vitesse = vitesse + axeleration
else
vitesse = vitesse - deceleration
end

if vitesse < 0 then
vitesse = 0
end

if vitesse > vitesseMax then
vitesse = vitesseMax
end

xG = xG - math.sin(math.rad(vecteur))*vitesse

zG = zG - math.cos(math.rad(vecteur))*vitesse


if CanTurn == "true" then
if pad:right() then
forceTurnBord = "right"
forceTurn = forceTurn - 0.5
end
if pad:left() then
forceTurnBord = "left"
forceTurn = forceTurn + 0.5
end
end


if forceTurnBord == "left" then
if forceTurn > 2 then 
forceTurn = 2
end
end

if forceTurnBord == "right" then
if forceTurn < -2 then 
forceTurn = -2
end
end


if pad:right() or pad:left() then
asd = 0
else

if forceTurnBord == "right" then 
forceTurn = forceTurn + 0.3
  if forceTurn >  0 then
  forceTurn = 0
  end
end

if forceTurnBord == "left" then 
forceTurn = forceTurn - 0.3
  if forceTurn < 0 then
  forceTurn = 0
  end
end

end

vecteur = vecteur + forceTurn

GU_CameraLookAt(cx,cy,cz,clx,cly,clz)
end




--Masterlau