Subversion Repositories AndroidProjects

Rev

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.