//========================================================================== // // // //========================================================================== void GLSprite::SplitSprite(sector_t * frontsector, bool translucent) { GLSprite copySprite; fixed_t lightbottom; float maplightbottom; unsigned int i; bool put=false; TArray<lightlist_t> & lightlist=frontsector->e->XFloor.lightlist; //y1+=y; //y2+=y; //y=0; for(i=0; i<lightlist.Size(); i++) { // Particles don't go through here so we can safely assume that actor is not NULL if (i<lightlist.Size()-1) lightbottom=lightlist[i+1].plane.ZatPoint(actor->x,actor->y); else lightbottom=frontsector->floorplane.ZatPoint(actor->x,actor->y); //maplighttop=FIXED2FLOAT(lightlist[i].height); maplightbottom=FIXED2FLOAT(lightbottom); if (maplightbottom<z2) maplightbottom=z2; if (maplightbottom<z1) { copySprite=*this; copySprite.lightlevel=*lightlist[i].p_lightlevel; copySprite.Colormap.CopyLightColor(*lightlist[i].p_extra_colormap); if (glset.nocoloredspritelighting) { int v = (copySprite.Colormap.LightColor.r + copySprite.Colormap.LightColor.g + copySprite.Colormap.LightColor.b )/3; copySprite.Colormap.LightColor.r= copySprite.Colormap.LightColor.g= copySprite.Colormap.LightColor.b=(255+v+v)/3; } if (!gl_isWhite(ThingColor)) { copySprite.Colormap.LightColor.r=(copySprite.Colormap.LightColor.r*ThingColor.r)>>8; copySprite.Colormap.LightColor.g=(copySprite.Colormap.LightColor.g*ThingColor.g)>>8; copySprite.Colormap.LightColor.b=(copySprite.Colormap.LightColor.b*ThingColor.b)>>8; } z1=copySprite.z2=maplightbottom; vt=copySprite.vb=copySprite.vt+ (maplightbottom-copySprite.z1)*(copySprite.vb-copySprite.vt)/(z2-copySprite.z1); copySprite.PutSprite(translucent); put=true; }
void GLSprite::SplitSprite(HWDrawInfo *di, sector_t * frontsector, bool translucent) { GLSprite copySprite; double lightbottom; unsigned int i; bool put=false; TArray<lightlist_t> & lightlist=frontsector->e->XFloor.lightlist; for(i=0;i<lightlist.Size();i++) { // Particles don't go through here so we can safely assume that actor is not nullptr if (i<lightlist.Size()-1) lightbottom=lightlist[i+1].plane.ZatPoint(actor); else lightbottom=frontsector->floorplane.ZatPoint(actor); if (lightbottom<z2) lightbottom=z2; if (lightbottom<z1) { copySprite=*this; copySprite.lightlevel = hw_ClampLight(*lightlist[i].p_lightlevel); copySprite.Colormap.CopyLight(lightlist[i].extra_colormap); if (level.flags3 & LEVEL3_NOCOLOREDSPRITELIGHTING) { copySprite.Colormap.Decolorize(); } if (!ThingColor.isWhite()) { copySprite.Colormap.LightColor.r = (copySprite.Colormap.LightColor.r*ThingColor.r) >> 8; copySprite.Colormap.LightColor.g = (copySprite.Colormap.LightColor.g*ThingColor.g) >> 8; copySprite.Colormap.LightColor.b = (copySprite.Colormap.LightColor.b*ThingColor.b) >> 8; } z1=copySprite.z2=lightbottom; vt=copySprite.vb=copySprite.vt+ (lightbottom-copySprite.z1)*(copySprite.vb-copySprite.vt)/(z2-copySprite.z1); copySprite.PutSprite(di, translucent); put=true; }