couch/demo/main.lua

127 lines
3.6 KiB
Lua
Raw Normal View History

2021-01-15 20:33:25 -06:00
local min = math.min
local max = math.max
2021-01-13 16:47:16 -06:00
local ball
2021-01-14 11:52:01 -06:00
local ball1
2021-01-13 16:47:16 -06:00
local camera
2021-01-13 18:51:58 -06:00
local vx = 0.0
local vz = 0.0
local ballvy = -1.0
2021-01-13 20:50:08 -06:00
local cam_rot_x = 0.0
2021-01-13 22:50:01 -06:00
local cam_rot_y = 0.0
2021-01-13 20:50:08 -06:00
2021-01-15 20:33:25 -06:00
local SPEED = 30
local RED = couch.Color(1.0, 0.0, 0.0)
local BLUE = couch.Color(0.0, 0.0, 1.0)
2021-01-21 15:26:39 -06:00
local light
2021-01-13 16:47:16 -06:00
function init()
2021-01-20 14:54:54 -06:00
local material
2021-01-13 16:47:16 -06:00
camera = couch.Camera()
camera:MakeCurrent()
2021-01-13 20:08:39 -06:00
camera.transform:Translate(0.0, 0.0, 10.0)
2021-01-21 15:26:39 -06:00
light = couch.DirectionalLight.new()
2021-01-21 18:03:50 -06:00
light.direction = couch.Vector3(0.0, -1.0, 0.0)
2021-01-21 15:26:39 -06:00
light.color = couch.Vector3(1.0, 1.0, 1.0)
2021-01-21 18:03:50 -06:00
light.ambient = 0.2
2021-01-21 15:26:39 -06:00
light.diffuse = 1.0
2021-01-21 18:29:49 -06:00
light.specular = 0.01
2021-01-21 15:26:39 -06:00
couch.Node.GetRoot().children:Append(light)
ball = couch.Mesh.FromFile("cube.glb")
2021-01-20 15:16:44 -06:00
material = couch.Material()
2021-01-20 14:54:54 -06:00
material.color = RED
material.usesColor = true
ball:SetMaterial(0, material)
2021-01-14 11:52:01 -06:00
couch.Node.GetRoot().children:Append(ball)
2021-01-21 18:29:49 -06:00
ball1 = couch.Mesh.FromFile("ball.glb")
2021-01-20 15:16:44 -06:00
material = couch.Material()
2021-01-20 14:54:54 -06:00
material.tex = couch.Texture.FromFile("container.png")
material.usesTex = true
ball1:SetMaterial(0, material)
2021-01-14 11:52:01 -06:00
couch.Node.GetRoot().children:Append(ball1)
2021-01-13 18:51:58 -06:00
ball1.transform:Translate(0.0, 3.0, 0.0)
2021-01-18 18:25:47 -06:00
trough = couch.TexturedMesh("trough.glb", "wood_lowres.png")
couch.Node.GetRoot().children:Append(trough)
trough.transform:Translate(10.0, 0.0, 0.0)
2021-01-20 17:18:39 -06:00
trough.transform.scale = trough.transform.scale * 3.0
2021-01-20 12:50:59 -06:00
scaffold = couch.TexturedMesh("scaffold.glb", "grate_floor_lowres.png", "railing.png")
2021-01-20 20:49:12 -06:00
material = scaffold:GetMaterial(0)
material.alphaScissor = 0.9
scaffold:SetMaterial(0, material)
material = scaffold:GetMaterial(1)
material.alphaScissor = 0.1
scaffold:SetMaterial(1, material)
2021-01-20 12:50:59 -06:00
couch.Node.GetRoot().children:Append(scaffold)
scaffold.transform:Translate(-10.0, 0.0, 0.0)
2021-01-13 16:47:16 -06:00
end
function update(delta)
2021-01-15 17:51:19 -06:00
local cam_forwards = camera.transform:Forward()
2021-01-21 11:12:45 -06:00
local cam_right = camera.transform:Right()
2021-01-15 20:33:25 -06:00
local move_vec = couch.Vector3()
move_vec = camera.transform.position + cam_forwards * delta * vz * SPEED
2021-01-21 11:12:45 -06:00
move_vec = move_vec + cam_right * delta * vx * SPEED
2021-01-15 20:33:25 -06:00
camera.transform.position = move_vec
2021-01-13 22:50:01 -06:00
camera.transform.rotation.y = camera.transform.rotation.y - cam_rot_x * delta
cam_rot_x = 0.0
camera.transform.rotation.x = camera.transform.rotation.x - cam_rot_y * delta
2021-01-20 22:17:33 -06:00
camera.transform.rotation.x = min(max(camera.transform.rotation.x, -3.14 / 2.0), 3.14 / 2.0)
2021-01-13 22:50:01 -06:00
cam_rot_y = 0.0
2021-01-13 18:51:58 -06:00
local loc = ball1.transform.position
if loc.y > 4.0 then
ballvy = -1.0
elseif loc.y < 2.0 then
ballvy = 1.0
end
2021-01-13 20:08:39 -06:00
ball1.transform.position.y = ball1.transform.position.y + ballvy * delta
ball.transform.rotation.z = ball.transform.rotation.z + 1.0 * delta;
2021-01-13 18:51:58 -06:00
end
function onkey(key, code, action, mod)
2021-01-20 21:58:43 -06:00
if key == couch.KEY_W and action == couch.ACTION_PRESS then
2021-01-13 18:51:58 -06:00
vz = 1.0
2021-01-20 21:58:43 -06:00
elseif key == couch.KEY_S and action == couch.ACTION_PRESS then
2021-01-15 20:33:25 -06:00
vz = -1.0
2021-01-20 21:58:43 -06:00
elseif (key == couch.KEY_W or key == couch.KEY_S) and action == couch.ACTION_RELEASE then
2021-01-13 18:51:58 -06:00
vz = 0.0
end
2021-01-21 11:12:45 -06:00
if key == couch.KEY_A and action == couch.ACTION_PRESS then
vx = -1.0
elseif key == couch.KEY_D and action == couch.ACTION_PRESS then
vx = 1.0
elseif (key == couch.KEY_D or key == couch.KEY_A) and action == couch.ACTION_RELEASE then
vx = 0.0
end
2021-01-21 15:26:39 -06:00
if key == couch.KEY_DOWN and action == couch.ACTION_PRESS then
2021-01-21 18:03:50 -06:00
light.ambient = max(light.ambient - 0.1, 0.0)
2021-01-21 15:26:39 -06:00
elseif key == couch.KEY_UP and action == couch.ACTION_PRESS then
light.ambient = light.ambient + 0.1
2021-01-21 18:03:50 -06:00
print(light.ambient)
2021-01-21 15:26:39 -06:00
end
2021-01-13 16:47:16 -06:00
end
2021-01-13 22:50:01 -06:00
function onmousemotion(_, _, relx, rely)
cam_rot_x = relx
cam_rot_y = rely
end