void CMuzzleFlame::Draw(void) { inArray=true; unsigned char col[4]; float alpha=max(0.f,1-age/(4+size*30)); col[0]=(unsigned char) (200*alpha); col[1]=(unsigned char) (200*alpha); col[2]=(unsigned char) (200*alpha); col[3]=(unsigned char) (alpha*255); for(int a=0;a<numSmoke;++a){ int tex=a%12; float xmod=0.125+(float(int(tex%6)))/16; float ymod=(int(tex/6))/16.0; float drawsize=(age+8)/3.0; float3 interPos(pos+randSmokeDir[a]*(a+2)*age/12.0); va->AddVertexTC(interPos-camera->right*drawsize-camera->up*drawsize,xmod,ymod,col); va->AddVertexTC(interPos+camera->right*drawsize-camera->up*drawsize,xmod+1.0/16,ymod,col); va->AddVertexTC(interPos+camera->right*drawsize+camera->up*drawsize,xmod+1.0/16,ymod+1.0/16,col); va->AddVertexTC(interPos-camera->right*drawsize+camera->up*drawsize,xmod,ymod+1.0/16,col); } if(age<6+size*2){ inArray=true; unsigned char col[4]; float alpha=(1-age/(6+size*2))*(1-age/(6+size*2)); col[0]=(unsigned char) (255*alpha); col[1]=(unsigned char) (255*alpha); col[2]=(unsigned char) (255*alpha); col[3]=1; float curAge=age/(6.0+size*2.0); for(int a=0;a<numFlame;++a){ float drawsize=(age+10)/4.0; drawsize+=max(0.,(0.25-fabs(curAge-(a/float(numFlame))))*0.5); float3 interPos(pos+dir*(a+2)*age/4); va->AddVertexTC(interPos-camera->right*drawsize-camera->up*drawsize,0.25,0.25,col); va->AddVertexTC(interPos+camera->right*drawsize-camera->up*drawsize,0.5,0.25,col); va->AddVertexTC(interPos+camera->right*drawsize+camera->up*drawsize,0.5,0.5,col); va->AddVertexTC(interPos-camera->right*drawsize+camera->up*drawsize,0.25,0.5,col); } } }
void CMuzzleFlame::Draw() { inArray = true; unsigned char col[4]; float alpha = std::max(0.0f, 1 - (age / (4 + size * 30))); float modAge = fastmath::apxsqrt(static_cast<float>(age + 2)); va->EnlargeArrays(numSmoke * 8, 0, VA_SIZE_TC); for (int a = 0; a < numSmoke; ++a) { //! CAUTION: loop count must match EnlargeArrays above int tex = a % projectileDrawer->smoketex.size(); //float xmod=0.125f+(float(int(tex%6)))/16; //float ymod=(int(tex/6))/16.0f; float drawsize = modAge * 3; float3 interPos(pos+randSmokeDir[a]*(a+2)*modAge*0.4f); float fade = std::max(0.0f, std::min(1.0f, (1 - alpha) * (20 + a) * 0.1f)); col[0] = (unsigned char) (180 * alpha * fade); col[1] = (unsigned char) (180 * alpha * fade); col[2] = (unsigned char) (180 * alpha * fade); col[3] = (unsigned char) (255 * alpha * fade); #define st projectileDrawer->smoketex[tex] va->AddVertexQTC(interPos - camera->right * drawsize - camera->up * drawsize, st->xstart, st->ystart, col); va->AddVertexQTC(interPos + camera->right * drawsize - camera->up * drawsize, st->xend, st->ystart, col); va->AddVertexQTC(interPos + camera->right * drawsize + camera->up * drawsize, st->xend, st->yend, col); va->AddVertexQTC(interPos - camera->right * drawsize + camera->up * drawsize, st->xstart, st->yend, col); #undef st if (fade < 1.0f) { float ifade = 1.0f - fade; col[0] = (unsigned char) (ifade * 255); col[1] = (unsigned char) (ifade * 255); col[2] = (unsigned char) (ifade * 255); col[3] = (unsigned char) (1); #define mft projectileDrawer->muzzleflametex va->AddVertexQTC(interPos - camera->right * drawsize - camera->up * drawsize, mft->xstart, mft->ystart, col); va->AddVertexQTC(interPos + camera->right * drawsize - camera->up * drawsize, mft->xend, mft->ystart, col); va->AddVertexQTC(interPos + camera->right * drawsize + camera->up * drawsize, mft->xend, mft->yend, col); va->AddVertexQTC(interPos - camera->right * drawsize + camera->up * drawsize, mft->xstart, mft->yend, col); #undef mft } } }
void CMuzzleFlame::Draw(void) { inArray=true; unsigned char col[4]; float alpha=std::max(0.f,1-age/(4+size*30)); float modAge=sqrt(static_cast<float>(age+2)); va->EnlargeArrays(numSmoke*8,0,VA_SIZE_TC); for (int a = 0; a < numSmoke; ++a) { //! CAUTION: loop count must match EnlargeArrays above int tex = a % ph->smoketex.size(); //float xmod=0.125f+(float(int(tex%6)))/16; //float ymod=(int(tex/6))/16.0f; float drawsize=modAge*3; float3 interPos(pos+randSmokeDir[a]*(a+2)*modAge*0.4f); float fade=std::max(0.f, std::min(1.f, (1-alpha)*(20+a)*0.1f)); col[0]=(unsigned char) (180*alpha*fade); col[1]=(unsigned char) (180*alpha*fade); col[2]=(unsigned char) (180*alpha*fade); col[3]=(unsigned char) (alpha*255*fade); va->AddVertexQTC(interPos-camera->right*drawsize-camera->up*drawsize,ph->smoketex[tex].xstart,ph->smoketex[tex].ystart,col); va->AddVertexQTC(interPos+camera->right*drawsize-camera->up*drawsize,ph->smoketex[tex].xend,ph->smoketex[tex].ystart,col); va->AddVertexQTC(interPos+camera->right*drawsize+camera->up*drawsize,ph->smoketex[tex].xend,ph->smoketex[tex].yend,col); va->AddVertexQTC(interPos-camera->right*drawsize+camera->up*drawsize,ph->smoketex[tex].xstart,ph->smoketex[tex].yend,col); if(fade<1){ float ifade= 1-fade; col[0]=(unsigned char)(ifade*255); col[1]=(unsigned char)(ifade*255); col[2]=(unsigned char)(ifade*255); col[3]=(unsigned char)(1); va->AddVertexQTC(interPos-camera->right*drawsize-camera->up*drawsize,ph->muzzleflametex.xstart,ph->muzzleflametex.ystart,col); va->AddVertexQTC(interPos+camera->right*drawsize-camera->up*drawsize,ph->muzzleflametex.xend ,ph->muzzleflametex.ystart,col); va->AddVertexQTC(interPos+camera->right*drawsize+camera->up*drawsize,ph->muzzleflametex.xend ,ph->muzzleflametex.yend ,col); va->AddVertexQTC(interPos-camera->right*drawsize+camera->up*drawsize,ph->muzzleflametex.xstart,ph->muzzleflametex.yend ,col); } } }
void CMuzzleFlame::Draw(void) { inArray=true; unsigned char col[4]; float alpha=std::max(0.f,1-age/(4+size*30)); float modAge=sqrtf(age+2); for(int a=0;a<numSmoke;++a){ int tex=a%12; //float xmod=0.125+(float(int(tex%6)))/16; //float ymod=(int(tex/6))/16.0; float drawsize=modAge*3; float3 interPos(pos+randSmokeDir[a]*(a+2)*modAge*0.4); float fade=std::max(0.f, std::min(1.f, (1-alpha)*(20+a)*0.1f)); col[0]=(unsigned char) (180*alpha*fade); col[1]=(unsigned char) (180*alpha*fade); col[2]=(unsigned char) (180*alpha*fade); col[3]=(unsigned char) (alpha*255*fade); va->AddVertexTC(interPos-camera->right*drawsize-camera->up*drawsize,ph->smoketex[tex].xstart,ph->smoketex[tex].ystart,col); va->AddVertexTC(interPos+camera->right*drawsize-camera->up*drawsize,ph->smoketex[tex].xend,ph->smoketex[tex].ystart,col); va->AddVertexTC(interPos+camera->right*drawsize+camera->up*drawsize,ph->smoketex[tex].xend,ph->smoketex[tex].yend,col); va->AddVertexTC(interPos-camera->right*drawsize+camera->up*drawsize,ph->smoketex[tex].xstart,ph->smoketex[tex].yend,col); if(fade<1){ float ifade= 1-fade; col[0]=(unsigned char)(ifade*255); col[1]=(unsigned char)(ifade*255); col[2]=(unsigned char)(ifade*255); col[3]=(unsigned char)(1); va->AddVertexTC(interPos-camera->right*drawsize-camera->up*drawsize,ph->explotex.xstart,ph->explotex.ystart,col); va->AddVertexTC(interPos+camera->right*drawsize-camera->up*drawsize,ph->explotex.xend ,ph->explotex.ystart,col); va->AddVertexTC(interPos+camera->right*drawsize+camera->up*drawsize,ph->explotex.xend ,ph->explotex.yend ,col); va->AddVertexTC(interPos-camera->right*drawsize+camera->up*drawsize,ph->explotex.xstart,ph->explotex.yend ,col); } } }