Exemplo n.º 1
0
void stage4_corridor_draw(Vector pos) {
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, get_tex("stage4/planks")->gltex);
	
	glMatrixMode(GL_TEXTURE);
	glScalef(1,2,1);
	glMatrixMode(GL_MODELVIEW);
	
	glPushMatrix();
	glTranslatef(pos[0], pos[1], pos[2]);
	
	glPushMatrix();
	glRotatef(180, 1,0,0);
	glScalef(300,2000,1);
	
	draw_quad();
	glPopMatrix();
		
	glBindTexture(GL_TEXTURE_2D, get_tex("stage4/wall")->gltex);
	
	glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	glRotatef(90,0,0,1);
	glScalef(1,10,1);
	glMatrixMode(GL_MODELVIEW);
	
	glPushMatrix();
	glTranslatef(100,5,75);
	glRotatef(90, 0,1,0);
	glScalef(150,2000,1);
	draw_quad();
	glPopMatrix();
	
	glPushMatrix();
	glTranslatef(-100,5,75);
	glRotatef(180,1,0,0);
	glRotatef(-90, 0,1,0);
	glScalef(150,2000,1);
	draw_quad();
	glPopMatrix();
	
	glMatrixMode(GL_TEXTURE);
	glLoadIdentity();
	glMatrixMode(GL_MODELVIEW);
	
	glDisable(GL_TEXTURE_2D);
	
	glColor3f(0.01,0.01,0.01);
	glPushMatrix();
	glTranslatef(0,0,150);
	glScalef(500,2000,1);
	draw_quad();
	glPopMatrix();
	
	glPopMatrix();
	glColor3f(1,1,1);
}
Exemplo n.º 2
0
void draw_stage_menu(MenuData *m) {
	draw_options_menu_bg(m);
	draw_text(AL_Right, (stringwidth(m->title, _fonts.mainmenu) + 10) * (1-m->fade), 30, m->title, _fonts.mainmenu);
	
	glPushMatrix();
	glTranslatef(100, 100 + (((m->ecount * 20 + 290) > SCREEN_W)? min(0, SCREEN_H * 0.7 - 100 - m->drawdata[2]) : 0), 0);
	
	/*
	glPushMatrix();
	glTranslatef(SCREEN_W/2 - 100, m->drawdata[2], 0);
	glScalef(SCREEN_W - 200, 20, 1);
	glColor4f(0,0,0,0.5);
	draw_quad();
	glPopMatrix();
	*/
	
	Texture *bg = get_tex("part/smoke");
	glPushMatrix();
	glTranslatef(m->drawdata[0], m->drawdata[2], 0);
	glScalef(m->drawdata[1]/100.0, 0.2, 1);
	glRotatef(m->frames*2,0,0,1);
	glColor4f(0,0,0,0.5);
	draw_texture_p(0,0,bg);
	glPopMatrix();
	
	MenuEntry *s = &(m->entries[m->cursor]);
	m->drawdata[0] += ((s->draw? SCREEN_W/2 - 100 : (stringwidth(s->name, _fonts.mainmenu)/2 - s->drawdata*1.5)) - m->drawdata[0])/10.0;
	m->drawdata[1] += ((s->draw? (SCREEN_W - 200)*0.85 : stringwidth(s->name, _fonts.mainmenu)) - m->drawdata[1])/10.0;
	m->drawdata[2] += (20*m->cursor - m->drawdata[2])/10.0;
	
	int i;
	for(i = 0; i < m->ecount; i++) {
		MenuEntry *e = &(m->entries[i]);
		
		e->drawdata += 0.2 * (10*(i == m->cursor) - e->drawdata);
		float a = e->drawdata * 0.1;
		
		if(e->action == NULL)
			glColor4f(0.5, 0.5, 0.5, 0.5);
		else {
			//glColor4f(0.7 + 0.3 * (1-a), 1, 1, 0.7 + 0.3 * a);
			float ia = 1-a;
			glColor4f(0.9 + ia * 0.1, 0.6 + ia * 0.4, 0.2 + ia * 0.8, 0.7 + 0.3 * a);
		}
		
		if(e->draw)
			e->draw(e, i, m->ecount);
		else if(e->name)
			draw_text(AL_Left, 20 - e->drawdata, 20*i, e->name, _fonts.standard);
	}
	
	glPopMatrix();
	
	fade_out(m->fade);
}
Exemplo n.º 3
0
void stage4_lake_draw(Vector pos) {	
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, get_tex("stage4/lake")->gltex);
	
	glPushMatrix();
	glTranslatef(pos[0], pos[1]+140, pos[2]);
	glScalef(15,15,15);
	
	draw_model("lake");
	glPopMatrix();
	
	glPushMatrix();
	glTranslatef(pos[0], pos[1]+944, pos[2]+50);
	glScalef(30,30,30);
	
	glBindTexture(GL_TEXTURE_2D, get_tex("stage4/mansion")->gltex);
	
	draw_model("mansion");
	glPopMatrix();
	
	
	glDisable(GL_TEXTURE_2D);
}
Exemplo n.º 4
0
void stage4_fountain_draw(Vector pos) {
	glEnable(GL_TEXTURE_2D);
	glBindTexture(GL_TEXTURE_2D, get_tex("stage2/border")->gltex);
	
	glPushMatrix();
	glTranslatef(pos[0], pos[1], pos[2]);
	glRotatef(-90, 1,0,0);
	glScalef(1000,3010,1);
		
	draw_quad();
	
	glPopMatrix();
	
	glDisable(GL_TEXTURE_2D);
}
Exemplo n.º 5
0
Texture *prefix_get_tex(char *name, char *prefix) {
	char *src;
	
	if((src = strrchr(name, '/')))
		src++;
	else
		src = name;
	
	char *buf = malloc(strlen(src) + strlen(prefix) + 1);
	strcpy(buf, prefix);
	strcat(buf, src);
	
	Texture *tex = get_tex(buf);
	free(buf);

	return tex;
}
Exemplo n.º 6
0
void draw_laser_curve(Laser *laser) {
	glEnable(GL_TEXTURE_2D);
	Texture *tex = get_tex("part/lasercurve");
	complex last;
	
	glBindTexture(GL_TEXTURE_2D, tex->gltex);
	
	glColor4fv((float *)laser->color);
	
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);
		
	float t = (global.frames - laser->birthtime)*laser->speed - laser->timespan + laser->timeshift;
	if(t < 0)
		t = 0;
	
	last = laser->prule(laser, t);
	
	for(t += 0.5; t < (global.frames - laser->birthtime)*laser->speed + laser->timeshift && t <= laser->deathtime + laser->timeshift; t += 1.5) {
		complex pos = laser->prule(laser,t);
		glPushMatrix();
		
		float t1 = t - ((global.frames - laser->birthtime)*laser->speed - laser->timespan/2 + laser->timeshift);
		
		float tail = laser->timespan/1.9;

		float s = -0.75/pow(tail,2)*(t1-tail)*(t1+tail);
			
		glTranslatef(creal(pos), cimag(pos), 0);
		glRotatef(180/M_PI*carg(last-pos), 0, 0, 1);
		
		float wq = ((float)tex->w)/tex->truew;
		float hq = ((float)tex->h)/tex->trueh;			
		
		glScalef(tex->w*wq*0.5*cabs(last-pos),s*laser->width*hq,s);			
		draw_quad();
		
		last = pos;
		
		glPopMatrix();
	}
	
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
	
	glColor4f(1,1,1,1);
	glDisable(GL_TEXTURE_2D);
}
Exemplo n.º 7
0
void draw_laser_curve_instanced(Laser *l) {
	float t;
	int c;
	
	Texture *tex = get_tex("part/lasercurve");
	
	float wq = ((float)tex->w)/tex->truew;
	float hq = ((float)tex->h)/tex->trueh;	
	
	c = l->timespan;
	
	t = (global.frames - l->birthtime)*l->speed - l->timespan + l->timeshift;
	
	if(t + l->timespan > l->deathtime + l->timeshift)
		c += l->deathtime + l->timeshift - (t + l->timespan);
	
	if(t < 0) {
		c += t;
		t = 0;
	}
			
	glBindTexture(GL_TEXTURE_2D, tex->gltex);
	
	glBlendFunc(GL_SRC_ALPHA, GL_ONE);
	
	glUseProgram(l->shader->prog);
	glUniform4fv(uniloc(l->shader, "clr"), 1, (float *)l->color);
	
	glUniform2f(uniloc(l->shader, "pos"), creal(l->pos), cimag(l->pos));
	glUniform2f(uniloc(l->shader, "a0"), creal(l->args[0]), cimag(l->args[0]));
	glUniform2f(uniloc(l->shader, "a1"), creal(l->args[1]), cimag(l->args[1]));
	glUniform2f(uniloc(l->shader, "a2"), creal(l->args[2]), cimag(l->args[2]));
	glUniform2f(uniloc(l->shader, "a3"), creal(l->args[3]), cimag(l->args[3]));
	
	glUniform1f(uniloc(l->shader, "timeshift"), t);
	glUniform1f(uniloc(l->shader, "wq"), wq*l->width);
	glUniform1f(uniloc(l->shader, "hq"), hq*l->width);
	
	glUniform1i(uniloc(l->shader, "span"), c*2);
		
	glDrawArraysInstanced(GL_QUADS, 0, 4, c*2);
		
	glUseProgram(0);
	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
Exemplo n.º 8
0
Arquivo: main.c Projeto: NegMozzie/42
int				main(int ac, char **argv)
{
	t_env		env;

	if (ac < 2)
		return (0);
	if ((env.ptr = mlx_init()) == NULL)
		return (0);
	if ((env.win = mlx_new_window(env.ptr, SCREENWIDTH, SCREENHEIGHT
		, "Raycaster")) == NULL)
		return (0);
	create_img(&env);
	get_tex(&env);
	init(&env);
	get_map(&env.worldmap, argv[1]);
	mlx(&env);
	return (0);
}
Exemplo n.º 9
0
/*!
 *  The texture name to use comes from the mesh, unless it's
 *  the null string, then it comes from the view. If the
 *  texture name is GTexture::static_name() then return the
 *  Patch's "current texture." Otherwise return a texture
 *  matching the given texture name.
 *
 */
GTexture*
Patch::cur_tex(CVIEWptr& v)
{
   // What name are we going for?
   string tex_name =
      _mesh->render_style().empty() ?
      v->rendering() :
      _mesh->render_style();

   if (tex_name == GTexture::static_name()) {
      GTexture* tex = cur_tex();
      if (tex)
         return tex;

      // If there is no current texture, go w/ flat shading as a
      // default:
      tex_name = RFLAT_SHADE;
   }

   return get_tex(tex_name);
}
Exemplo n.º 10
0
void fill_screen(float xoff, float yoff, float ratio, char *name) {
	fill_screen_p(xoff, yoff, ratio, get_tex(name));
}
Exemplo n.º 11
0
void draw_texture(float x, float y, char *name) {
	draw_texture_p(x, y, get_tex(name));
}
Exemplo n.º 12
0
void draw_options_menu(MenuData *menu) {
	draw_options_menu_bg(menu);
	
	draw_text(AL_Right, 140*(1-menu->fade), 30, "Options", _fonts.mainmenu);
	
	glPushMatrix();
	glTranslatef(100, 100, 0);
	
	/*
	glPushMatrix();
	glTranslatef(SCREEN_W/2 - 100, menu->drawdata[2], 0);
	glScalef(SCREEN_W - 200, 20, 1);
	glColor4f(0,0,0,0.5);
	draw_quad();
	glPopMatrix();
	*/
	
	Texture *bg = get_tex("part/smoke");
	glPushMatrix();
	glTranslatef(menu->drawdata[0], menu->drawdata[2], 0);
	glScalef(menu->drawdata[1]/100.0, 0.2, 1);
	glRotatef(menu->frames*2,0,0,1);
	glColor4f(0,0,0,0.5);
	draw_texture_p(0,0,bg);
	glPopMatrix();
	
	OptionBinding *binds = (OptionBinding*)menu->context;
	OptionBinding *bind;
	
	menu->drawdata[0] += ((SCREEN_W/2 - 100) - menu->drawdata[0])/10.0;
	menu->drawdata[1] += ((SCREEN_W - 200) - menu->drawdata[1])/10.0;
	menu->drawdata[2] += (20*menu->cursor - menu->drawdata[2])/10.0;
	
	int i, caption_drawn = 0;
	
	for(i = 0; i < menu->ecount; i++) {
		if(!menu->entries[i].name)
			continue;
		
		menu->entries[i].drawdata += 0.2 * (10*(i == menu->cursor) - menu->entries[i].drawdata);
		float a = menu->entries[i].drawdata * 0.1;
		
		bind = &(binds[i]);
		int hasbind = bind->enabled;
		float alpha = (!hasbind || bind_isactive(bind))? 1 : 0.5;
		
		if(menu->entries[i].action == NULL) {
			glColor4f(0.5, 0.5, 0.5, 0.7 * alpha);
		} else {
			//glColor4f(0.7 + 0.3 * (1-a), 1, 1, (0.7 + 0.3 * a) * alpha);
			float ia = 1-a;
			glColor4f(0.9 + ia * 0.1, 0.6 + ia * 0.4, 0.2 + ia * 0.8, (0.7 + 0.3 * a) * alpha);
		}
		
		draw_text(AL_Left,
					((hasbind && bind->dependence)? 20 : 0)	// hack hack hack
					+ 20 - menu->entries[i].drawdata, 20*i, menu->entries[i].name, _fonts.standard);
		
		if(hasbind)
		{
			int j, origin = SCREEN_W - 220;
			
			switch(bind->type)
			{
				case BT_IntValue:
					if(bind->valrange_max) {
						char tmp[16];	// who'd use a 16-digit number here anyway?
						snprintf(tmp, 16, "%d", bind_getvalue(bind));
						draw_text(AL_Right, origin, 20*i, tmp, _fonts.standard);
					} else for(j = bind->valcount-1; j+1; --j) {
						if(j != bind->valcount-1)
							origin -= strlen(bind->values[j+1])/2.0 * 20;
						
						if(bind_getvalue(bind) == j) {
							glColor4f(0.9, 0.6, 0.2, alpha);
						} else {
							glColor4f(0.5,0.5,0.5,0.7 * alpha);
						}
							
						draw_text(AL_Right, origin, 20*i, bind->values[j], _fonts.standard);
					}
					break;
				
				case BT_KeyBinding:
					if(bind->blockinput) {
						glColor4f(0.5, 1, 0.5, 1);
						draw_text(AL_Right, origin, 20*i, "Press a key to assign, ESC to cancel", _fonts.standard);
					} else
						draw_text(AL_Right, origin, 20*i, SDL_GetKeyName(tconfig.intval[bind->configentry]), _fonts.standard);
					
					if(!caption_drawn) {
						glColor4f(1,1,1,0.7);
						draw_text(AL_Center, (SCREEN_W - 200)/2, 20*(i-1), "Controls", _fonts.standard);
						caption_drawn = 1;
					}
					break;
				
				case BT_StrValue:
					if(bind->blockinput) {
						glColor4f(0.5, 1, 0.5, 1.0);
						if(strlen(*bind->values))
							draw_text(AL_Right, origin, 20*i, *bind->values, _fonts.standard);
					} else
						draw_text(AL_Right, origin, 20*i, tconfig.strval[bind->configentry], _fonts.standard);
					break;
				
				case BT_Resolution: {
					char tmp[16];
					int w, h;
					
					if(bind->selected == -1) {
						w = video.intended.width;
						h = video.intended.height;
					} else {
						VideoMode *m = &(video.modes[bind->selected]);
						w = m->width;
						h = m->height;
					}
					
					snprintf(tmp, 16, "%dx%d", w, h);
					draw_text(AL_Right, origin, 20*i, tmp, _fonts.standard);
					break;
				}
			}
		}
	}
	
	
	glPopMatrix();
	
	fade_out(menu->fade);
}