buldthensnip/pkg/gm/abos/main_client.lua

207 lines
5.0 KiB
Lua

dofile("pkg/gm/abos/common.lua")
dofile("pkg/gm/abos/genmap.lua")
dofile("pkg/gm/abos/player.lua")
dofile("pkg/base/lib_sdlkey.lua")
client.mk_compat_disable()
client.mk_set_title("A Buttfull Of Skateboards")
render_sec_current = 0
mouse_x, mouse_y = client.screen_get_dims()
mouse_x = mouse_x / 2
mouse_y = mouse_y / 2
client.map_enable_autorender(false)
client.map_enable_ao(false)
client.map_enable_side_shading(false)
img_funbox = common.img_load("pkg/gm/abos/funbox.png", "png")
img_genbox = common.img_load("pkg/gm/abos/genbox.png", "png")
img_ramp = common.img_load("pkg/gm/abos/ramp.png", "png")
function load_shaders()
shader_main, result = client.glsl_create([==[
#version 120
varying vec4 vnorm;
varying vec4 vpos;
void main()
{
vpos = gl_ModelViewMatrix * gl_Vertex;
gl_Position = gl_ProjectionMatrix * vpos;
gl_FrontColor = vec4(1.0);//gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vnorm = gl_ModelViewMatrix * vec4(gl_Normal, 0.0);
}
]==], [==[
#version 120
varying vec4 vnorm;
varying vec4 vpos;
uniform sampler2D smp0;
void main()
{
float amb_fac = 0.2;
float diff_fac = max(0.0, min(1.0,
-dot(normalize(vnorm), normalize(vpos))
));
float diff = amb_fac + (diff_fac * (1.0 - amb_fac));
vec4 ct0 = texture2D(smp0, gl_TexCoord[0].st);
gl_FragColor = (gl_Color * ct0) * diff;
gl_FragColor.a = 1.0;
}
]==], {})
print(result)
shader_player, result = client.glsl_create([==[
#version 120
varying vec4 vnorm;
varying vec4 vpos;
void main()
{
vpos = gl_ModelViewMatrix * gl_Vertex;
gl_Position = gl_ProjectionMatrix * vpos;
gl_FrontColor = gl_Color;
gl_TexCoord[0] = gl_MultiTexCoord0;
vnorm = gl_ModelViewMatrix * vec4(gl_Normal, 0.0);
}
]==], [==[
#version 120
varying vec4 vnorm;
varying vec4 vpos;
void main()
{
float amb_fac = 0.2;
float diff_fac = max(0.0, min(1.0,
-dot(normalize(vnorm), normalize(vpos))
));
float diff = amb_fac + (diff_fac * (1.0 - amb_fac));
gl_FragColor = gl_Color * diff;
gl_FragColor.a = 1.0;
}
]==], {})
print(result)
end
do
local l = {}
local a = 1.0
local al = 0.4
local x0 = math.sin(0*math.pi*2.0/3.0)*a
local y0 = math.cos(0*math.pi*2.0/3.0)*a
local x1 = math.sin(1*math.pi*2.0/3.0)*a
local y1 = math.cos(1*math.pi*2.0/3.0)*a
local x2 = math.sin(2*math.pi*2.0/3.0)*a
local y2 = math.cos(2*math.pi*2.0/3.0)*a
l[1+#l] = {x0, y0, 0, 1, 0, 0, al}
l[1+#l] = {x2, y2, 0, 1, 0, 0, al}
l[1+#l] = {x1, y1, 0, 1, 0, 0, al}
va_tri_red = common.va_make(l, nil, "3v,4c")
end
player = player_new {
pos = {0, 0.5, 0},
}
function client.hook_tick(sec_current, sec_delta)
render_sec_current = sec_current
player.move(sec_current, sec_delta)
--return math.max(0.001, math.min(0.02, 0.02*2.0 - sec_delta))
return 0.0001
end
function h_render_main()
local screen_w, screen_h = client.screen_get_dims()
local smx = -(mouse_x-screen_w/2)/screen_w*2.0
local smy = (mouse_y-screen_h/2)/screen_w*2.0
local ra = render_sec_current * math.pi*2.0 / 3.0 * 3.0
-- render shit
client.camera_move_to(player.pos.x, player.pos.y, player.pos.z)
local fwx = math.sin(player.ya)--*math.cos(player.xa)
local fwy = 0.5--math.sin(player.xa)
local fwz = math.cos(player.ya)--*math.cos(player.xa)
fwx = player.vel.x
--fwy = player.vel.y
fwz = player.vel.z
print(fwx, fwz)
local fwid2 = 1.0/math.max(0.0001, math.sqrt(fwx*fwx + fwz*fwz))
fwx = fwx * fwid2
fwz = fwz * fwid2
local fwd = math.sqrt(fwx*fwx + fwy*fwy + fwz*fwz)
if fwid2 > 2.0 then
fwx = math.sin(player.ya)
fwz = math.cos(player.ya)
fwd = math.sqrt(fwx*fwx + fwy*fwy + fwz*fwz)
print(fwx, fwy, fwz)
end
local fwid = 1.0/math.max(0.001, fwd)
fwx = fwx * fwid
fwy = fwy * fwid
fwz = fwz * fwid
client.camera_point_sky(fwx, fwy, fwz, 1.0, 0, -1, 0)
client.camera_move_local(0, 0, -5)
client.glsl_use(shader_main)
lev_current.render()
client.glsl_use(shader_player)
player.render()
-- render mouse
--[[
client.gfx_clear_depth()
local wgx = smx
local wgy = smy
local xi, xf = math.modf(wgx)
local yi, yf = math.modf(wgy)
xi = xi % 32.0
yi = yi % 32.0
wgz = -4.0
client.va_render_global(va_tri_red, wgx, wgy, wgz, math.pi/2.0, ra, -math.pi/2.0, 0.2,
nil, "ah")
]]
end
function h_render_init()
client.hook_render = h_render_main
client.map_fog_set(0, 0, 85, 200)
client.camera_move_to(0, -1, -10)
client.camera_point_sky(0, 1, 2, 1.0, 0, -1, 0)
load_shaders()
lev_current = genmap_default()
end
function client.hook_kick(reason)
print("KICKED", tostring(reason))
client.hook_tick = nil
end
function client.hook_key(key, state, modif, uni)
if false then
elseif key == SDLK_UP then player.rot_xaneg = state
elseif key == SDLK_DOWN then player.rot_xapos = state
elseif key == SDLK_LEFT then player.rot_yaneg = state
elseif key == SDLK_RIGHT then player.rot_yapos = state
elseif key == SDLK_SPACE then player.do_jump = state
end
end
function client.hook_mouse_button(button, state)
end
function client.hook_mouse_motion(mx, my, dx, dy)
mouse_x = mx
mouse_y = my
end
client.hook_render = h_render_init
print(anytostring(common.version))