From c91847d549cc1c30eb15504a15ea9a6d5aa48165 Mon Sep 17 00:00:00 2001 From: "chirs241097@gmail.com" Date: Sun, 12 Jan 2014 14:43:14 +0000 Subject: --- libcghEx.cpp | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 libcghEx.cpp (limited to 'libcghEx.cpp') diff --git a/libcghEx.cpp b/libcghEx.cpp new file mode 100644 index 0000000..f959e19 --- /dev/null +++ b/libcghEx.cpp @@ -0,0 +1,93 @@ +//Chrisoft Bullet Lab Remix HGE +//Chrisoft Game Helper Extras implementations +//"Copyleft" Chrisoft 2013 +#include "libcgh.h" +#include +#include +static const char* LIBCGH_SRC_FN="libcghEx.cpp"; + +void CircleIndicator::Init(double _r,double _thk,BYTE _a,bool _gr,HTEXTURE _Texture,TextureRect _TR,DWORD _cc) +{ + circle=new hgeDistortionMesh(1025,3); + circle->SetTexture(_Texture); + circle->SetTextureRect(_TR.x,_TR.y,_TR.w,_TR.h); + radius=_r;thk=_thk;gradient=_gr;alpha=_a; + if (_gr)ccolour=SETA(0x00FF0000,alpha);else ccolour=_cc; + for (int i=0;i<=1024;++i) + { + double tang,tx,ty; + tang=(double)i/1024.0f*pi*2-pi/2; + tx=-cos(tang)*radius;ty=sin(tang)*radius; + circle->SetDisplacement(i,2,tx,ty,HGEDISP_TOPLEFT); + tx*=thk;ty*=thk; + circle->SetDisplacement(i,1,tx,ty,HGEDISP_TOPLEFT); + tx*=thk;ty*=thk; + circle->SetDisplacement(i,0,tx,ty,HGEDISP_TOPLEFT); + } +} +void CircleIndicator::SetAlpha(BYTE _alpha){alpha=_alpha;} +void CircleIndicator::SetValue(double _value) +{ + value=_value; + for (int i=0;i<=1024;++i) + { + int tr=(int)((1.0f-value)*255); + int tg=(int)(value*255); + DWORD tcolour=ARGB(alpha,tr,tg,0); + hgeColorHSV *tc=new hgeColorHSV(tcolour); + if (tc->v<0.85)tc->v=0.85; + if (gradient)tcolour=SETA(tc->GetHWColor(),alpha);else tcolour=SETA(ccolour,alpha); + if ((double)i/1024.0f<=value) + { + circle->SetColor(i,0,tcolour); + circle->SetColor(i,1,SETA(0x00FFFFFF,alpha)); + circle->SetColor(i,2,tcolour); + } + else + { + circle->SetColor(i,0,0x00000000); + circle->SetColor(i,1,0x00000000); + circle->SetColor(i,2,0x00000000); + } + } + } +void CircleIndicator::Render(double x,double y){circle->Render(x,y);} + +void LinearProgresser::Init(double _a,double _b,double _Lim){a=_a,b=_b,Limit=_Lim;} +void LinearProgresser::Launch(){Elapsed=0;val=a;} +void LinearProgresser::Update(double DT){if (Elapsed>=Limit)return;Elapsed+=DT;val=(b-a)*(Elapsed/Limit)+a;} +double LinearProgresser::GetValue(){return val;} +double LinearProgresser::GetA(){return a;} +double LinearProgresser::GetB(){return b;} +double LinearProgresser::GetPercentage(){return (Elapsed/Limit);} +double LinearProgresser::GetDelta(){return val-a;} +double LinearProgresser::GetElapsed(){return Elapsed;} + +bool HangUpText::Active(){return TFont&&!done;} +void HangUpText::Init(char *Font,char *_Text,double _tlim,double _alim,double _dlim,DWORD _color) +{ + TFont=new hgeFont(Font); + memcpy(Text,_Text,sizeof(_Text)); + Limit=_tlim;alim=_alim;dlim=_dlim;TFont->SetColor(_color); + Progresser.Init(0,dlim,Limit);Progalpha.Init(0,255,Limit/2); +} +void HangUpText::Launch(vector2d pos) +{ + Position=pos;Elapsed=0;delta=0;Progresser.Launch();Progalpha.Launch();done=false; +} +void HangUpText::Process(double DT) +{ + Progresser.Update(DT); + Position.y-=delta; + delta=Progresser.GetDelta(); + Position.y+=delta; + if (Progresser.GetElapsed()>Limit/2&&Progalpha.GetA()Progalpha.GetB()&&Progresser.GetElapsed()>=Limit)return (void)(done=true); + Progalpha.Update(DT); + TFont->SetColor(SETA(TFont->GetColor(),Progalpha.GetValue())); + TFont->printf(Position.x,Position.y,HGETEXT_CENTER,Text); +} -- cgit v1.2.3