Blame |
Last modification |
View Log
| RSS feed
unit app_glscene_flash;
interface
uses OpenGL, GLaux, glExt, sux_constant, sux_object, app_constant,
resource_texture, resource_shader;
type
TSScore=record
texture:SRTexture;
owngoaltexture:SRTexture;
intensity:SXFloat;
typeofscore:SXState;
end;
TSettings=record
score:TSScore;
newballintensity:SXFloat;
menuintensity:SXFloat;
end;
SAGLSFlash=class(SUXObject)
settings:TSettings;
procedure displayNewBall;
procedure renderNewBall;
procedure displayGainScore(scoretype:SXState);
procedure renderScore;
procedure displayMenuFlash;
procedure renderMenu;
procedure onTimer;
procedure initialize;
constructor Create(parent:TObject);
destructor Destroy; override;
end;
implementation
uses sux_main, gl_main, main;
// --- SAGLSFlash
procedure SAGLSFlash.displayNewBall;
begin
settings.newballintensity:=1;
app.sound.playSample2D('sounds\newball');
end;
procedure SAGLSFlash.renderNewBall;
begin
with settings do
begin
if (newballintensity<=0) then exit;
gl.gl2D.renderRectangle(0,0,640,480,SX_GL_BLEND_ADDITIVE,sx.convert.ColorRGBOf(1,1,1),newballintensity*0.5);
sx.timer.decTimer(newballintensity,3);
end;
end;
procedure SAGLSFlash.displayGainScore(scoretype:SXState);
begin
settings.score.intensity:=1.5;
settings.score.typeofscore:=scoretype;
app.sound.playSample2D('sounds\score');
end;
procedure SAGLSFlash.renderScore;
var size,intensity:SXFloat;
texture:SRTexture;
begin
with settings do
begin
if (score.intensity<=0) then exit;
intensity:=(score.intensity-1.3)*20;
gl.gl2D.renderRectangle(0,0,640,480,SX_GL_BLEND_ADDITIVE,sx.convert.ColorRGBOf(1,1,1),intensity);
case score.typeofscore of
SX_SCORE_TYPE_NORMAL : texture:=score.texture;
SX_SCORE_TYPE_OWNGOAL : texture:=score.owngoaltexture;
else
exit;
end;
size:=(score.intensity-1.2)*300;
if (size<0) then size:=0;
gl.gl2D.renderPatternQuad(texture,SX_GL_BLEND_AVERAGE,
sx.convert.ColorRGBOf(1,1,1),score.intensity,0,0,1,1,320,240,260+size);
sx.timer.decTimer(score.intensity,2);
end;
end;
procedure SAGLSFlash.displayMenuFlash;
begin
settings.menuintensity:=1;
end;
procedure SAGLSFlash.renderMenu;
begin
with settings do
begin
if (menuintensity<=0) then exit;
gl.gl2D.renderRectangle(0,0,640,480,SX_GL_BLEND_NEGATIVEINVERT,sx.convert.ColorRGBOf(1,1,1),1-menuintensity);
sx.timer.decTimer(menuintensity,4);
end;
end;
procedure SAGLSFlash.onTimer;
begin
renderScore;
renderNewBall;
renderMenu;
end;
procedure SAGLSFlash.initialize;
begin
settings.score.texture:=SRTexture.Create('textures\menu\score',self);
settings.score.owngoaltexture:=SRTexture.Create('textures\menu\owngoal',self);
end;
constructor SAGLSFlash.Create(parent:TObject);
begin
inherited Create(parent,'GL Flash');
settings.score.intensity:=0;
settings.newballintensity:=0;
settings.menuintensity:=0;
end;
destructor SAGLSFlash.Destroy;
begin
settings.score.texture.Free;
settings.score.owngoaltexture.Free;
inherited;
end;
end.