//Chrisoft Bullet Lab Remix HGE //Background drawing Implementations //"Copyleft" Chrisoft 2013 const char* BACKGROUND_H_FN="background.h"; double deltaBG; //******************************************** //Full-screen Leaves Background //******************************************** class BG_Leaves { private: DWORD alpha,alim; bool onfadein,onfadeout; int fadebreak; hgeSprite* BGSpr[6][6]; HTEXTURE LeafTex; void DoFadeIn() { if (LOWFPS)fadebreak+=17;else ++fadebreak; if (fadebreak>17)fadebreak=0;else return; if (LOWFPS)if(alpha+0x20<=alim)alpha+=0x20;else{} else if (alpha+0x2<=alim)alpha+=2; if (alpha>=alim)onfadein=false; } void DoFadeOut() { if (LOWFPS)fadebreak+=17;else ++fadebreak; if (fadebreak>30)fadebreak=0;else return; if (LOWFPS) if (alpha<0x20)alpha=0;else alpha-=0x20; else if (alpha<0x2)alpha=0;else alpha-=0x2; if (!alpha)onfadeout=0; } public: bool IsActive() { return alpha?true:false; } void Init(DWORD limalpha) { LeafTex=hge->Texture_Load("./Resources/b_leaves.png"); for (int i=0;i<6;++i) for (int j=0;j<6;++j) { BGSpr[i][j]=new hgeSprite(LeafTex,0,0,200,150); BGSpr[i][j]->SetColor(0x00CCCCCC); } onfadein=onfadeout=false;alpha=0x00;alim=limalpha;fadebreak=0; } void SetFadeIn() { alpha=0x01; onfadein=true; } void SetFadeOut() { alpha=alim; onfadeout=true; } void Update() { double tx,ty,dt; DWORD tcol; if (onfadein)DoFadeIn(); if (onfadeout)DoFadeOut(); dt=hge->Timer_GetDelta(); deltaBG+=dt; tx=200*cosf(deltaBG/10); ty=150*sinf(deltaBG/10); for (int i=-1;i<5;++i) for (int j=-1;j<5;++j) BGSpr[i+1][j+1]->SetColor(ARGB(alpha,0xCC,0xCC,0xCC)), BGSpr[i+1][j+1]->Render(i*199.0f+tx,j*149.0f+ty); } }; BG_Leaves Leaves; //******************************************** //Animated Leaves Background //******************************************** HTEXTURE TLeaf; HTEXTURE TSflake; class Leaf_Anim; Leaf_Anim *Head,*Tail; bool LE_Active; double lescale; HTEXTURE letex;TextureRect letr; DWORD lecolor; class Leaf_Anim { private: hgeSprite* Leaf; double Rotation,DRotate; double x,y,dx,dy; int lim; ~Leaf_Anim(){} public: Leaf_Anim *Last,*Next; void init(int _lim) { //Leaf=new hgeSprite(letex,0,0,108,108); Leaf=new hgeSprite(letex,letr.x,letr.y,letr.w,letr.h); Leaf->SetColor(lecolor); x=rand()%908-108; y=-108; lim=_lim; dx=rand()%200/100.0f-1.0f; dx*=0.075; dy=rand()%200/100.0f+0.5f; dy*=0.075; Rotation=0; DRotate=rand()%100/10000.0f; DRotate*=0.1; Next=NULL; } void Delete() { if (this==Head)Head=this->Next; if (this==Tail)Tail=this->Last; if (this->Next) this->Next->Last=this->Last; if (this->Last) this->Last->Next=this->Next; delete this->Leaf; delete this;//Not sure this will work?..--Answer: This worked... } void Update() { if (!this||!Leaf)return; int times=1;if (LOWFPS)times=17; for (int i=1;i<=times;++i) { Rotation+=DRotate; x+=dx;y+=dy; } if (x>908||x<-108||y>708)return Delete(); if (!Leaf)return; Leaf->RenderEx(x,y,Rotation,lescale); } void Process() { int times=1; if(LOWFPS) times=17; for (int i=1;i<=times;++i) if (rand()%1000>lim&&LE_Active) { Tail->Next=new Leaf_Anim(); Tail->Next->init(990); Tail->Next->Last=Tail; Tail=Tail->Next; } Leaf_Anim *cur=Head; while (cur)cur->Update(),cur=cur->Next; } }; //******************************************** //3D-Clouds Background //******************************************** class TDClouds { private: hgeQuad CQuad; double DTime; int alpha,lima; bool onFadein,onFadeout; void DoFadein() { int times=1; if (LOWFPS)times=17; for (int i=1;i<=times;++i)if (alpha0)--alpha; } public: void Init(int _lima) { DTime=0.0f; CQuad.tex=hge->Texture_Load("sky.png"); CQuad.blend=BLEND_ALPHABLEND; alpha=0;lima=_lima; onFadein=onFadeout=false; for (int i=0;i<4;++i) CQuad.v[i].col=0x00FFFFFF; CQuad.v[0].x=0,CQuad.v[0].y=300; CQuad.v[1].x=800,CQuad.v[1].y=300; CQuad.v[2].x=1000,CQuad.v[2].y=600; CQuad.v[3].x=-200,CQuad.v[3].y=600; CQuad.v[0].tx=0,CQuad.v[0].ty=0; CQuad.v[0].tx=0.5,CQuad.v[0].ty=0; CQuad.v[0].tx=0.5,CQuad.v[0].ty=0.5; CQuad.v[0].tx=0,CQuad.v[0].ty=0.5; } void SetFadein() { onFadein=true; onFadeout=false; alpha=0; } void SetFadeout() { onFadeout=true; onFadein=false; alpha=lima; } void Update() { if (onFadein)DoFadein(); if (onFadeout)DoFadeout(); for (int i=0;i<4;++i) CQuad.v[i].col=ARGB(alpha,0xFF,0xFF,0xFF); DTime+=0.1*hge->Timer_GetDelta(); CQuad.v[0].tx=cos(DTime),CQuad.v[0].ty=sin(DTime); CQuad.v[1].tx=CQuad.v[0].tx+0.5f;CQuad.v[1].ty=CQuad.v[0].ty; CQuad.v[2].tx=CQuad.v[0].tx+0.5f;CQuad.v[2].ty=CQuad.v[0].ty+0.5f; CQuad.v[3].tx=CQuad.v[0].tx;CQuad.v[3].ty=CQuad.v[0].ty+0.5f; hge->Gfx_RenderQuad(&CQuad); } }; TDClouds Sky; DWORD ColorTransfer(DWORD a,DWORD t) { int r=GETR(a),g=GETG(a),b=GETB(a); int tr=GETR(t),tg=GETG(t),tb=GETB(t); if (rtr)--r; if (gtg)--g; if (btb)--b; a=SETR(a,r);a=SETG(a,g);a=SETB(a,b); }