diff --git a/neercs/neercs.cpp b/neercs/neercs.cpp index 3e6ef01..4c69b07 100644 --- a/neercs/neercs.cpp +++ b/neercs/neercs.cpp @@ -71,54 +71,49 @@ void Neercs::TickGame(float seconds) caca_set_color_argb(m_caca, 0xfff, bg_color); caca_clear_canvas(m_caca); - caca_set_color_argb(m_caca, 0x444, bg_color); - - int n = 16; - int radius = 48; - int speed = 1; - int z = 1; + caca_set_color_argb(m_caca, 0x234, bg_color); + for(int i = 0; i < h; i++) + { + float a = M_PI / 180 * i * 16 + m_time * 4; + float b = M_PI / 180 * i * 12; + int x = w / 2 - 15 + h / 3 * lol::cos(a) + h / 4 * lol::sin(b); + caca_put_str(m_caca, x, i, "LOL WUT! NEERCS SI TEH RULEZ!"); + } - for(int i = 0; i < n; i++) + caca_set_color_argb(m_caca, 0x444, bg_color); + for(int i = 0; i < w; i++) { - //z -= speed; - int r = (radius - i * 4) / z; - int x1 = w / 2 + r * lol::cos(m_time * 2 - M_PI / 20); - int y1 = h / 2 + r * lol::sin(m_time * 2 - M_PI / 20); - int x2 = w / 2 + r * lol::cos(m_time * 2 + M_PI * 2 / 3 - M_PI / 20); - int y2 = h / 2 + r * lol::sin(m_time * 2 + M_PI * 2 / 3 - M_PI / 20); - int x3 = w / 2 + r * lol::cos(m_time * 2 + M_PI * 2 / 3 * 2 - M_PI / 20); - int y3 = h / 2 + r * lol::sin(m_time * 2 + M_PI * 2 / 3 * 2 - M_PI / 20); - caca_set_color_argb(m_caca, 0x642, bg_color); - caca_draw_thin_line(m_caca, x1, y1, x2, y2); - caca_draw_thin_line(m_caca, x2, y2, x3, y3); - caca_draw_thin_line(m_caca, x3, y3, x1, y1); + float a = m_time * 1 + M_PI / 180 * i * 8; + float b = m_time * -2 + M_PI / 180 * i * 5; + int y = h / 2 + h / 4 * lol::cos(a) + h / 4 * lol::sin(b); + caca_draw_line(m_caca, i, y - 1, i, y + 1,'%'); } /* .___ __ ______ ______ ______ ______ ______, \° \| /° __ \° __ \° __ \/° ___//° ___/ - / ` > ____/ ____/ ,_ < <____\___ \ -/__/\___\______\______\__| \__\_____________\ + / ` > ____/ ____/ ,_ <_ <____\___ \ +/__/\___\______\______\__| \__/_____________\ */ - int logo_x = (w - 46) / 2; + int logo_x = (w - 45) / 2; int logo_y = h / 2 - 2; - caca_set_color_argb(m_caca, hex_color(0.5f + 0.25f * lol::cos(m_time * 3 ),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 )), bg_color); + caca_set_color_argb(m_caca, hex_color(0.5f + 0.375f * lol::cos(m_time * 3 ),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 )), bg_color); caca_put_str(m_caca, logo_x, logo_y ,".___ __ ______ ______ ______ ______ ______,"); - caca_set_color_argb(m_caca, hex_color(0.5f + 0.25f * lol::cos(m_time * 3 + M_PI / 4 * 1),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 1)), bg_color); + caca_set_color_argb(m_caca, hex_color(0.5f + 0.375f * lol::cos(m_time * 3 + M_PI / 4 * 1),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 1)), bg_color); caca_put_str(m_caca, logo_x, logo_y + 1, " \\° \\| /° __ \\° __ \\° __ \\/° ___//° ___/"); - caca_set_color_argb(m_caca, hex_color(0.5f + 0.25f * lol::cos(m_time * 3 + M_PI / 4 * 2),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 2)), bg_color); - caca_put_str(m_caca, logo_x, logo_y + 2, " / ` > ____/ ____/ ,_ < <____\\___ \\"); - caca_set_color_argb(m_caca, hex_color(0.5f + 0.25f * lol::cos(m_time * 3 + M_PI / 4 * 3),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 3)), bg_color); - caca_put_str(m_caca, logo_x, logo_y + 3, "/__/\\___\\______\\______\\__| \\__\\_____________\\"); + caca_set_color_argb(m_caca, hex_color(0.5f + 0.375f * lol::cos(m_time * 3 + M_PI / 4 * 2),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 2)), bg_color); + caca_put_str(m_caca, logo_x, logo_y + 2, " / ` > ____/ ____/ ,_ <_ <____\\___ \\"); + caca_set_color_argb(m_caca, hex_color(0.5f + 0.375f * lol::cos(m_time * 3 + M_PI / 4 * 3),0.5f,0.5f + 0.25f * lol::sin(m_time * 3 + M_PI / 4 * 3)), bg_color); + caca_put_str(m_caca, logo_x, logo_y + 3, "/__/\\___\\______\\______\\__| \\__/_____________\\"); caca_set_color_argb(m_caca, 0xdef, bg_color); caca_put_str(m_caca, logo_x + 5, logo_y + 5, "ALL YOUR TERMINALS ARE BELONG TO US"); - caca_set_color_ansi(m_caca, 0x666, bg_color); - caca_printf(m_caca, 1, h - 2, "W=%i H=%i", w, h); - //caca_printf(m_caca, 1, h - 2, "2d ratio=%i*%i", ratio_2d.x, ratio_2d.y); - caca_put_str(m_caca, w - 11, h - 2, "CACA RULEZ"); + caca_set_color_argb(m_caca, 0x666, bg_color); + caca_put_str(m_caca, w - 10, h - 1, "CACA RULEZ"); + caca_printf(m_caca, 0, h - 2, "W=%i", w); + caca_printf(m_caca, 0, h - 1, "H=%i", h); } diff --git a/neercs/video/postfx.lolfx b/neercs/video/postfx.lolfx index a17b1d1..d1dcc35 100644 --- a/neercs/video/postfx.lolfx +++ b/neercs/video/postfx.lolfx @@ -22,17 +22,16 @@ uniform bool scanline; uniform float sync; const float PI=3.14159265358979323846; -float lens=PI/(deform+sync*0.0625); +float lens=deform+sync*0.0625; vec2 zoom(in vec2 p,in float radius) { - float zoom=1.5-(radius*cos(p.x*PI/lens)+radius*cos(p.y*PI/lens)); + float zoom=1.5-(radius*cos(p.x*lens)+radius*cos(p.y*lens)); return vec2(p.x*zoom-0.5,p.y*zoom-0.5); } vec3 get_color(in sampler2D tex,in vec2 p) { - //return (p.x<-1.0||p.x>0.0||p.y<-1.0||p.y>0.0)?vec3(0.0,0.0,0.0):texture2D(tex,p).xyz; /* old code */ return texture2D(tex,clamp(p,-1.0,0.0)).xyz; } @@ -41,30 +40,20 @@ float rand(in vec2 p) return fract(sin(dot(p.xy,vec2(12.9898,78.233)))*43758.5453); } -float rounded_square(in vec2 rect,in float r) +float letterbox(in vec2 p,in float radius,in float smooth) { - vec2 b=rect-vec2(r); - vec2 p=vec2(gl_TexCoord[0].xy-screen_size.xy*0.5); - return length(max(abs(p)-b,0.0))-r; - } - -vec3 letterbox(in vec3 c) - { - vec2 rect=screen_size*0.49; - float r=screen_size.x*0.1; - float f=1.0-clamp(rounded_square(rect,r),0.0,1.0); - return c*f; + return 1.0-smoothstep(smooth,1.0,length(max(abs(p*2.0+1.0)+vec2(radius),0.0))-radius); } void main(void) { - vec2 q=gl_TexCoord[0].xy; - vec2 p=-1.0+2.0*gl_TexCoord[0].xy; + vec2 q=gl_FragCoord.xy/screen_size.xy; + vec2 p=-1.0+2.0*gl_FragCoord.xy/screen_size.xy; p.y+=0.025*sync; vec2 z =zoom(p,0.5250); vec2 z1=zoom(p,0.5225); vec2 z2=zoom(p,0.5275); - float g=(2.0-cos(PI/lens/2.0+z.x*PI/lens)-cos(PI/lens/2.0+z.y*PI/lens))*32.0; + float g=(2.0-cos(lens*0.5+z.x*lens)-cos(lens*0.5+z.y*lens))*32.0; float rnd1=rand(vec2(p.x+time,p.y-time)); float rnd2=rand(vec2(p.x-time,p.y+time)); @@ -88,21 +77,21 @@ void main(void) vec3 color=source+glass1*glass1*0.25+glass2*glass2*0.25+(scanline?noise:source); - color+=flash; // flash + color+=flash; // flash if(scanline) { - color-=0.0125*mod(z.y*4.0+time*0.25,1.0); // electron beam - color-=(vec3(rnd1,rnd1,rnd1)-vec3(rnd2,rnd2,rnd2))*0.1; // noise - color*=0.75+0.25*sin(z.x*float(screen_size.x*2)); // scanline w + color-=0.0125*mod(z.y*4.0+time*0.25,1.0); // electron beam + color-=(vec3(rnd1,rnd1,rnd1)-vec3(rnd2,rnd2,rnd2))*0.1; // noise + color*=0.75+0.25*sin(z.x*float(screen_size.x*2)); // scanline w color*=0.90+0.10*cos(z.y*float(screen_size.y))*sin(0.5+z.x*float(screen_size.x)); // scanline h } else { color*=0.675; } - color=vec3(color.x*0.875,color.y*1.0,color.z*0.625); - color*=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0); // vignetting - //color=vec3(1.0,1.0,1.0); - //color=letterbox(color); // letterbox + color=vec3(color.x*0.875,color.y*1.25,color.z*0.5); + color*=q.x*(6.0-q.x*6.0)*q.y*(6.0-q.y*6.0); // vignetting + //color*=2.0*letterbox(z,-0.75,0.125)*2.0; // vignetting + color*=letterbox(z,-0.75,0.975); // letterbox gl_FragColor=vec4(color,1.0); } diff --git a/neercs/video/render.cpp b/neercs/video/render.cpp index 41a96e6..0c824ff 100644 --- a/neercs/video/render.cpp +++ b/neercs/video/render.cpp @@ -52,7 +52,7 @@ int polygon_fillmode = GL_FILL; // fill mode bool key_state = 0; // key state /* window variable */ ivec2 screen_size; // screen size -vec3 screen_color = CR * vec3(48, 56, 64); // screen color +vec3 screen_color = CR * vec3(32, 32, 32); // screen color /* object variable */ float main_angle = 0.0f; // main angle float part_angle = 0.0f; // part angle @@ -229,7 +229,7 @@ int Render::InitDraw(void) int Render::CreateGLWindow() { screen_size = Video::GetSize(); - border = 10 * ratio_2d; + border = 18 * ratio_2d; border.y = border.x; // enabled to get same border everywhere canvas_char = (screen_size - border * 2) / (font_size * ratio_2d); canvas_size = canvas_char * font_size * ratio_2d; @@ -251,7 +251,8 @@ Render::Render(caca_canvas_t *caca) m_shader_blur(true), m_shader_glow(true), m_shader_fx(true), - m_shader_postfx(true) + m_shader_postfx(true), + m_border(false) { text_render = new TextRender(m_caca, font_size); } @@ -375,14 +376,17 @@ void Render::Draw2D() glLoadMatrixf(&m[0][0]); glMatrixMode(GL_MODELVIEW); // draw border - glDisable(GL_TEXTURE_2D); - glDisable(GL_BLEND); - glColor3f(1.0f,1.0f,1.0f); - rectangle(border.x - ratio_2d.x, border.y - ratio_2d.y, canvas_size.x + ratio_2d.x * 2, ratio_2d.y); - rectangle(border.x - ratio_2d.x, border.y, ratio_2d.x, canvas_size.y); - rectangle(border.x + canvas_size.x, border.y, ratio_2d.x, canvas_size.y); - rectangle(border.x - ratio_2d.x, border.y + canvas_size.y, canvas_size.x + ratio_2d.x * 2, ratio_2d.y); - glEnable(GL_BLEND); + if(m_border) + { + glDisable(GL_TEXTURE_2D); + glDisable(GL_BLEND); + glColor3f(1.0f,1.0f,1.0f); + rectangle(border.x - ratio_2d.x, border.y - ratio_2d.y, canvas_size.x + ratio_2d.x * 2, ratio_2d.y); + rectangle(border.x - ratio_2d.x, border.y, ratio_2d.x, canvas_size.y); + rectangle(border.x + canvas_size.x, border.y, ratio_2d.x, canvas_size.y); + rectangle(border.x - ratio_2d.x, border.y + canvas_size.y, canvas_size.x + ratio_2d.x * 2, ratio_2d.y); + glEnable(GL_BLEND); + } } void Render::Draw3D() diff --git a/neercs/video/render.h b/neercs/video/render.h index c10d7bb..bdad369 100644 --- a/neercs/video/render.h +++ b/neercs/video/render.h @@ -34,6 +34,7 @@ private: bool m_shader_glow; bool m_shader_fx; bool m_shader_postfx; + bool m_border; }; #endif // __VIDEO_RENDER_H__