void newfont(char *name, char *tex, int *defaultw, int *defaulth, int *offsetx, int *offsety, int *offsetw, int *offseth) { if(*defaulth < 10) return; // (becomes FONTH) Texture *_tex = textureload(tex); if(_tex == notexture || !_tex->xs || !_tex->ys) return; font *f = fonts.access(name); if(!f) { name = newstring(name); f = &fonts[name]; f->name = name; } f->tex = _tex; f->chars.shrink(0); f->defaultw = *defaultw; f->defaulth = *defaulth; f->offsetx = *offsetx; f->offsety = *offsety; f->offsetw = *offsetw; f->offseth = *offseth; f->skip = 33; fontdef = f; }
int playerpreview(int model, int team, int weap, float sizescale, bool overlaid) { autotab(); if(sizescale==0) sizescale = 1; int size = (int)(sizescale*2*FONTH)-SHADOW; if(visible()) { bool hit = ishit(size+SHADOW, size+SHADOW); float xs = size, ys = size, xi = curx, yi = cury; if(overlaid && hit && actionon) { glDisable(GL_TEXTURE_2D); notextureshader->set(); glColor4f(0, 0, 0, 0.75f); rect_(xi+SHADOW, yi+SHADOW, xs, ys); glEnable(GL_TEXTURE_2D); defaultshader->set(); } int x1 = int(floor(screenw*(xi*scale.x+origin.x))), y1 = int(floor(screenh*(1 - ((yi+ys)*scale.y+origin.y)))), x2 = int(ceil(screenw*((xi+xs)*scale.x+origin.x))), y2 = int(ceil(screenh*(1 - (yi*scale.y+origin.y)))); glViewport(x1, y1, x2-x1, y2-y1); glScissor(x1, y1, x2-x1, y2-y1); glEnable(GL_SCISSOR_TEST); glDisable(GL_BLEND); modelpreview::start(overlaid); game::renderplayerpreview(model, team, weap); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); modelpreview::end(); glDisable(GL_SCISSOR_TEST); glViewport(0, 0, screenw, screenh); if(overlaid) { if(hit) { glDisable(GL_TEXTURE_2D); notextureshader->set(); glBlendFunc(GL_ZERO, GL_SRC_COLOR); glColor3f(1, 0.5f, 0.5f); rect_(xi, yi, xs, ys); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); defaultshader->set(); } if(!overlaytex) { string otname; inexor::filesystem::appendmediadir(otname, "guioverlay.png", DIR_UI); overlaytex = textureload(otname, 3); } glColor3fv(light.v); glBindTexture(GL_TEXTURE_2D, overlaytex->id); rect_(xi, yi, xs, ys, 0); } } return layout(size+SHADOW, size+SHADOW); }
int modelpreview(const char *name, int anim, float sizescale, bool overlaid) { autotab(); if(sizescale==0) sizescale = 1; int size = (int)(sizescale*2*FONTH)-SHADOW; if(visible()) { bool hit = ishit(size+SHADOW, size+SHADOW); float xs = size, ys = size, xi = curx, yi = cury; if(overlaid && hit && actionon) { hudnotextureshader->set(); gle::colorf(0, 0, 0, 0.75f); rect_(xi+SHADOW, yi+SHADOW, xs, ys); hudshader->set(); } int x1 = int(floor(screen->w*(xi*scale.x+origin.x))), y1 = int(floor(screen->h*(1 - ((yi+ys)*scale.y+origin.y)))), x2 = int(ceil(screen->w*((xi+xs)*scale.x+origin.x))), y2 = int(ceil(screen->h*(1 - (yi*scale.y+origin.y)))); glDisable(GL_BLEND); modelpreview::start(x1, y1, x2-x1, y2-y1, overlaid); model *m = loadmodel(name); if(m) { entitylight light; light.color = vec(1, 1, 1); light.dir = vec(0, -1, 2).normalize(); vec center, radius; m->boundbox(center, radius); float yaw; vec o = calcmodelpreviewpos(radius, yaw).sub(center); rendermodel(&light, name, anim, o, yaw, 0, 0, NULL, NULL, 0); } modelpreview::end(); hudshader->set(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); if(overlaid) { if(hit) { hudnotextureshader->set(); glBlendFunc(GL_ZERO, GL_SRC_COLOR); gle::colorf(1, 0.5f, 0.5f); rect_(xi, yi, xs, ys); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); hudshader->set(); } if(!overlaytex) overlaytex = textureload("data/guioverlay.png", 3); gle::color(light); glBindTexture(GL_TEXTURE_2D, overlaytex->id); rect_(xi, yi, xs, ys, 0); } } return layout(size+SHADOW, size+SHADOW); }
void loadcaustics(bool force) { static bool needcaustics = false; if(force) needcaustics = true; if(!caustics || !needcaustics) return; useshaderbyname("caustics"); if(caustictex[0]) return; loopi(NUMCAUSTICS) { defformatstring(name, "<grey><noswizzle>media/texture/mat_water/caustic/caust%.2d.png", i); caustictex[i] = textureload(name); } }
mitemmaploadmanual(gmenu *parent, const char *filename, const char *altfontname, char *text, char *action, char *hoveraction, color *bgcolor, const char *desc = NULL) : mitemmanual(parent, text, action, NULL, NULL, NULL), filename(filename) { image = NULL; copystring(maptitle, filename ? filename : "-n/a-"); if(filename) { // see worldio.cpp:setnames() string pakname, mapname, cgzpath; const char *slash = strpbrk(filename, "/\\"); if(slash) { copystring(pakname, filename, slash-filename+1); copystring(mapname, slash+1); } else { copystring(pakname, "maps"); copystring(mapname, filename); } formatstring(cgzpath)("packages/%s", pakname); char *d = getfiledesc(cgzpath, mapname, "cgz"); if( d ) { formatstring(maptitle)("%s", d[0] ? d : "-n/a-"); } else { copystring(pakname, "maps/official"); formatstring(cgzpath)("packages/%s", pakname); char *d = getfiledesc("packages/maps/official", mapname, "cgz"); if( d ) { formatstring(maptitle)("%s", d[0] ? d : "-n/a-"); } else formatstring(maptitle)("-n/a-:%s", mapname); } defformatstring(p2p)("%s/preview/%s.jpg", cgzpath, mapname); silent_texture_load = true; image = textureload(p2p, 3); if(image==notexture) image = textureload("packages/misc/nopreview.jpg", 3); silent_texture_load = false; } else { formatstring(maptitle)("-n/a-:%s", filename); image = textureload("packages/misc/nopreview.png", 3); } copystring(mapstats, ""); }
int prefabpreview(const char *prefab, const vec &color, float sizescale, bool overlaid) { autotab(); if(sizescale==0) sizescale = 1; int size = (int)(sizescale*2*FONTH)-SHADOW; if(visible()) { bool hit = ishit(size+SHADOW, size+SHADOW); float xs = size, ys = size, xi = curx, yi = cury; if(overlaid && hit && actionon) { hudnotextureshader->set(); gle::colorf(0, 0, 0, 0.75f); rect_(xi+SHADOW, yi+SHADOW, xs, ys); hudshader->set(); } int x1 = int(floor(screen->w*(xi*scale.x+origin.x))), y1 = int(floor(screen->h*(1 - ((yi+ys)*scale.y+origin.y)))), x2 = int(ceil(screen->w*((xi+xs)*scale.x+origin.x))), y2 = int(ceil(screen->h*(1 - (yi*scale.y+origin.y)))); glDisable(GL_BLEND); modelpreview::start(x1, y1, x2-x1, y2-y1, overlaid); previewprefab(prefab, color); modelpreview::end(); hudshader->set(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); if(overlaid) { if(hit) { hudnotextureshader->set(); glBlendFunc(GL_ZERO, GL_SRC_COLOR); gle::colorf(1, 0.5f, 0.5f); rect_(xi, yi, xs, ys); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); hudshader->set(); } if(!overlaytex) overlaytex = textureload("data/guioverlay.png", 3); gle::color(light); glBindTexture(GL_TEXTURE_2D, overlaytex->id); rect_(xi, yi, xs, ys, 0); } } return layout(size+SHADOW, size+SHADOW); }
void newfont(char *name, char *tex, int *defaultw, int *defaulth, int *offsetx, int *offsety, int *offsetw, int *offseth) { font *f = fonts.access(name); if(!f) { name = newstring(name); f = &fonts[name]; f->name = name; } f->tex = textureload(tex); f->chars.setsize(0); f->defaultw = *defaultw; f->defaulth = *defaulth; f->offsetx = *offsetx; f->offsety = *offsety; f->offsetw = *offsetw; f->offseth = *offseth; fontdef = f; }
mitemimagemanual(gmenu *parent, const char *filename, const char *altfontname, char *text, char *action, char *hoveraction, color *bgcolor, const char *desc = NULL) : mitemmanual(parent, text, action, hoveraction, bgcolor, desc), filename(filename) { image = filename ? textureload(filename, 3) : NULL; altfont = altfontname ? getfont(altfontname) : NULL; }
int modelpreview(const char *name, int anim, float sizescale, bool overlaid) { autotab(); if(sizescale==0) sizescale = 1; int size = (int)(sizescale*2*FONTH)-SHADOW; if(visible()) { bool hit = ishit(size+SHADOW, size+SHADOW); float xs = size, ys = size, xi = curx, yi = cury; if(overlaid && hit && actionon) { glDisable(GL_TEXTURE_2D); notextureshader->set(); glColor4f(0, 0, 0, 0.75f); rect_(xi+SHADOW, yi+SHADOW, xs, ys); glEnable(GL_TEXTURE_2D); defaultshader->set(); } int x1 = int(floor(screenw*(xi*scale.x+origin.x))), y1 = int(floor(screenh*(1 - ((yi+ys)*scale.y+origin.y)))), x2 = int(ceil(screenw*((xi+xs)*scale.x+origin.x))), y2 = int(ceil(screenh*(1 - (yi*scale.y+origin.y)))); glViewport(x1, y1, x2-x1, y2-y1); glScissor(x1, y1, x2-x1, y2-y1); glEnable(GL_SCISSOR_TEST); glDisable(GL_BLEND); modelpreview::start(overlaid); model *m = loadmodel(name); if(m) { entitylight light; light.color = vec(1, 1, 1); light.dir = vec(0, -1, 2).normalize(); vec center, radius; m->boundbox(center, radius); float dist = 2.0f*max(radius.magnitude2(), 1.1f*radius.z), yaw = fmod(lastmillis/10000.0f*360.0f, 360.0f); vec o(-center.x, dist - center.y, -0.1f*dist - center.z); rendermodel(&light, name, anim, o, yaw, 0, 0, NULL, NULL, 0); } modelpreview::end(); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_BLEND); glDisable(GL_SCISSOR_TEST); glViewport(0, 0, screenw, screenh); if(overlaid) { if(hit) { glDisable(GL_TEXTURE_2D); notextureshader->set(); glBlendFunc(GL_ZERO, GL_SRC_COLOR); glColor3f(1, 0.5f, 0.5f); rect_(xi, yi, xs, ys); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); defaultshader->set(); } if(!overlaytex) { string otname; inexor::filesystem::appendmediadir(otname, "guioverlay.png", DIR_UI); overlaytex = textureload(otname, 3); } glColor3fv(light.v); glBindTexture(GL_TEXTURE_2D, overlaytex->id); rect_(xi, yi, xs, ys, 0); } } return layout(size+SHADOW, size+SHADOW); }
Contentmgr::Contentmgr(SDL_Renderer* renderer) { textureload(renderer); }