Blame |
Last modification |
View Log
| RSS feed
unit app_main;
interface
uses sux_constant, sux_object,
input_main,
sound_main,
gl_main, app_glscene_main, app_game_main,
app_constant, app_ini;
type
TSettings=record
close:SXBool;
score:SXInt;
end;
SUXApp=class(SUXObject)
settings:TSettings;
input:SUXInput;
sound:SUXSound;
gl:SUXGL;
ini:SAIni;
scene:SAGLScene;
game:SAGame;
procedure getKeyPressed(const key: Char);
procedure onTimer;
procedure initialize;
procedure shutdown;
constructor Create(parent:TObject);
destructor Destroy; override;
end;
implementation
uses main, file_file, Forms;
// --- SUXApp
procedure SUXApp.getKeyPressed(const key: Char);
begin
game.getKeyPressed(key);
end;
procedure SUXApp.onTimer;
begin
sx.timer.ignoreLastFrameDuration;
repeat
try
sx.onTimer; // Update engine timer
input.onTimer;
game.onTimer;
sound.onTimer;
gl.onTimer;
if (ini.settings.menu.canquit) then
if (input.isPressed('Immediate Quit')) then settings.close:=true;
except
sx.console.addLine('ERROR: Unhandled exception occurred in pingK main loop');
end;
until (settings.close);
FormMain.Close;
end;
procedure SUXApp.initialize;
var p: SXInt;
param: SXStringL;
startimmediately: SXBool;
begin
FormMain.Timer.Enabled:=false;
sx.console.addSeparatorLine;
sx.console.addLine('Application Layer: Initializing...');
sx.console.addEmptyLine;
sx.console.addLine('Application: '+SX_APPLICATION_IDENTIFIER);
sx.console.addLine('Version: '+SX_APPLICATION_VERSION);
sx.console.addLine('Copyright: '+SX_APPLICATION_COPYRIGHT);
sx.console.addSeparatorLine;
sx.console.addEmptyLine;
ini.initialize;
// Parse arguments.
startimmediately := false;
for p := 0 to System.ParamCount do
begin
param := System.ParamStr(p);
sx.console.addLine('Command line argument: ' + param);
if (param = '-action') then startimmediately := true;
if (param = 'rx') and (p < System.ParamCount) then
begin
ini.settings.display.width := sx.convert.strToInt(System.ParamStr(p + 1));
ini.settings.display.fullscreen := true;
end;
if (param = 'ry') and (p < System.ParamCount) then
begin
ini.settings.display.height := sx.convert.strToInt(System.ParamStr(p + 1));
ini.settings.display.fullscreen := true;
end;
end;
FormMain.ClientWidth:=ini.settings.display.width;
FormMain.ClientHeight:=ini.settings.display.height;
if (not ini.settings.display.fullscreen) then FormMain.Position:=poScreenCenter
else begin
FormMain.BorderStyle:=bsNone;
FormMain.Left:=0;
FormMain.Top:=0;
end;
input.initialize(FormMain,true,true,true);
sound.initialize(FormMain,false,false,true,44100,ini.settings.sound.volume,32);
gl.initialize(FormMain,'View',0,0,ini.settings.display.width,ini.settings.display.height,32,
ini.settings.display.hz,ini.settings.display.fullscreen);
input.addButton('Quit','Menu',ini.settings.controls.cancel);
input.addButton('Backspace','Menu',SX_INPUT_BUTTONINDEX_BACKSPACE);
input.addButton('Help','Menu',SX_INPUT_BUTTONINDEX_F1);
input.addButton('Hint','Menu',SX_INPUT_BUTTONINDEX_F5);
input.addButton('Immediate Quit','Menu',SX_INPUT_BUTTONINDEX_F10);
input.addButton('Up','Menu',SX_INPUT_BUTTONINDEX_UP);
input.addButton('Down','Menu',SX_INPUT_BUTTONINDEX_DOWN);
input.addButton('Accept','Menu', ini.settings.controls.accept);
input.addButton('Pause','Menu',SX_INPUT_BUTTONINDEX_P);
input.addButton('Up','Player1',ini.settings.player1.keyup);
input.addButton('Down','Player1',ini.settings.player1.keydown);
input.addButton('Up','Player2',ini.settings.player2.keyup);
input.addButton('Down','Player2',ini.settings.player2.keydown);
sound.loadSamplesFromList('sounds\sounds');
scene:=SAGLScene.Create(self,'Scene');
scene.initialize;
if (not ini.settings.menu.candisplaymenu) then startimmediately := true;
game.initialize(startimmediately);
FormMain.Timer.Enabled:=true;
end;
procedure SUXApp.shutdown;
begin
sx.console.addEmptyLine;
sx.console.addSeparatorLine;
sx.console.addLine('Application Layer: Shut down...');
scene.Free;
ini.Free;
game.Free;
sx.console.addSeparatorLine;
sx.console.addEmptyLine;
input.Free;
sound.Free;
gl.Free;
end;
constructor SUXApp.Create(parent:TObject);
begin
inherited Create(parent,'SUX App Main');
settings.close:=false;
settings.score:=0;
input:=SUXInput.Create(self);
sound:=SUXSound.Create(self);
gl:=SUXGL.Create(self);
ini:=SAIni.Create(self);
game:=SAGame.Create(self);
end;
destructor SUXApp.Destroy;
begin
shutdown;
inherited;
end;
end.