rendered paste body#include <zahu/zahu.h>#include <zahu/basic_app.h>#include <cstdlib>#include <ctime>#include <zahu/opengl/static_font.h>#include <zahu/opengl/utils.h>//#include "lib/minifmod.h"#define CP_MAX 64#define SF_MAX 256using namespace zahu;using namespace zahu::Imaging;using namespace zahu::OpenGL;class Scene{private:public: virtual void Init() pure; virtual void Deinit() pure; virtual void Update(const fp32 delta) pure;};class TestScene : public Scene{public: virtual void Init() { } virtual void Deinit() { } virtual void Update(const fp32 delta) { }};class App : public zahu::IBasicApp{private: StaticFont fnt, fnt_cp; Time::Timer timer; Array<Scene*> m_Scenes; int x; fp32 r, g, b, a; int offset_t, height; Texture cp_tex; float cp_width; float cp_hight; float cp_angle; float cp_y, cp_x; float cp_possy[CP_MAX+1]; // lol // starfield struct s_star { float x,y,a,s; }; s_star sf_stars[SF_MAX]; // music /*char music[42069]; FMUSIC_MODULE *m;*/ public: App() : fnt(), fnt_cp(), timer() { x = 0; }; void Setup(char *filename) { glShadeModel(GL_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0, 800, 600, 0, -1, 1); glViewport(0, 0, m_width, m_height); glClearColor(0.f, 0.f, 0.f, 1.f); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); Input::SetStickyKeys(true); Input::SetKeyRepeat(true); Input::HandleSystemKeys(true); if(!fnt.LoadFont("fonts/retro.fnt")) { LOGERROR("Failed to load font"); Terminate(); return; } if(!fnt_cp.LoadFont("fonts/retro01.fnt")) { LOGERROR("Failed to load retro01 font"); Terminate(); return; } fnt_cp.Set("COCK!!!"); fnt.Set("fags:\n jonte\n sweetfish\n acura\n {LOL ? erland : 3==D}"); r = jda_rand_fp32(); g = jda_rand_fp32(); b = jda_rand_fp32(); a = jda_rand_fp32(); offset_t = jda_rand_int32() % 200; height = 600-offset_t; // sinuskuk stuff: cp_width = 5.0f; cp_hight = 160.0f; cp_angle = 0.0f; cp_y = m_height/2-cp_hight/2; cp_x = m_width;//+(cp_width*CP_MAX); for (int i = 0; i < CP_MAX+1; i++) { cp_possy[i] = cp_y; } // starfieldshits for (int i = 0; i < SF_MAX; i++) { GenerateStar(&sf_stars[i]); sf_stars[i].x = jda_rand_fp32()*m_width; } if(!cp_tex.Load("data/cock.png")) { LOGERROR("Failed to load cock texture, terminating."); Terminate(); return; } /* * init fmod * if (FSOUND_Init( 44100,0 ) == 0) { LOGERROR("Unable to initialize minifmod." ); Terminate(); return; } FILE *f = fopen("racers - green flag.xm", "rb"); fread(music, sizeof(music), 1, f); fclose(f); FMUSIC_LoadSong(music, sizeof(music), NULL); FMUSIC_PlaySong(m);*/ } virtual void RenderStar(float x, float y, float s, float a) { glBegin(GL_QUADS); glColor3f(jda_abs(sin(a)), jda_abs(sin(a+3.14f)), jda_abs(sin(a-1.0f))); glVertex2f(x,y); glVertex2f(x+s,y); glVertex2f(x+s,y+s); glVertex2f(x,y+s); glEnd(); } virtual void GenerateStar(s_star *s) { s->s = 1.0f + jda_rand_fp32()*2.0f; s->a = jda_rand_fp32()*3.14f; s->y = jda_rand_fp32()*m_height; s->x = m_width + s->s; } virtual void Update(const fp32 delta) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glDisable(GL_TEXTURE_2D); // THE SINUSKUK! aka Snake 3.0 if (timer.Diff() > 0.01f) { cp_angle+=0.1f; cp_possy[0] = sin(cp_angle)*70.0f; // fix position for every other piece of the huge awesome cock for (int i = CP_MAX; i > 0; i--) { cp_possy[i] = (cp_possy[i-1])*0.96f; } //if (cp_x > m_width) cp_x-= cp_x / 64.0f; if (cp_x > m_width - ((CP_MAX-1)*cp_width)) cp_x = cp_x - (m_width - cp_x*0.1f) / 256.0f; // starfield fucks for (int i = 0; i < SF_MAX; i++) { sf_stars[i].x -= 1.2 * sf_stars[i].s; sf_stars[i].a += 1.0f; if (sf_stars[i].x + sf_stars[i].s < 0) GenerateStar(&sf_stars[i]); } timer.Reset(); } /* * render starfield * */ for (int i = 0; i < SF_MAX; i++) { RenderStar(sf_stars[i].x, sf_stars[i].y, sf_stars[i].s, sf_stars[i].a); } /* * render the cock! * */ glEnable(GL_TEXTURE_2D); cp_tex.Bind(); glBegin(GL_QUADS); glColor3f(jda_abs(sin(cp_angle)), 0.8f, 0.8f); for (int i = 1; i < CP_MAX; i++) { glTexCoord2d((0.999f / CP_MAX)*i,0); glVertex2f(cp_x + (float)i*cp_width, cp_possy[i-1] + cp_y); glTexCoord2d((0.999f / CP_MAX)*i + (0.999f / CP_MAX),0); glVertex2f(cp_x + (float)i*cp_width+cp_width, cp_possy[i] + cp_y); glTexCoord2d((0.999f / CP_MAX)*i + (0.999f / CP_MAX),1); glVertex2f(cp_x + (float)i*cp_width+cp_width, cp_possy[i] + cp_hight + cp_y); glTexCoord2d((0.999f / CP_MAX)*i,1); glVertex2f(cp_x + (float)i*cp_width, cp_possy[i-1] + cp_hight + cp_y); } glEnd(); timer.Tick(); } virtual void HandleInput() { int k = Input::GetLastKey(); if (k == Input::ESC) Terminate(); Input::ClearLastKey(); } virtual ~App() { //FMUSIC_StopSong(m); //FMUSIC_FreeSong(m); }};int main(int argc, char **argv)//int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int Cmd ){ App a; if (!a.Init(800, 600, 32, FLAG_NO_RESIZE | FLAG_VSYNC)) return false; a.SetTitle("test app"); a.Setup(""); return a.Run(); return 0;}