aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/Classes/UCore.pas
diff options
context:
space:
mode:
Diffstat (limited to 'Game/Code/Classes/UCore.pas')
-rw-r--r--Game/Code/Classes/UCore.pas333
1 files changed, 160 insertions, 173 deletions
diff --git a/Game/Code/Classes/UCore.pas b/Game/Code/Classes/UCore.pas
index c19147ea..2e1304de 100644
--- a/Game/Code/Classes/UCore.pas
+++ b/Game/Code/Classes/UCore.pas
@@ -8,11 +8,13 @@ interface
{$I switches.inc}
-uses uPluginDefs,
- uCoreModule,
- UHooks,
- UServices,
- UModules;
+uses
+ uPluginDefs,
+ uCoreModule,
+ UHooks,
+ UServices,
+ UModules;
+
{*********************
TCore
Class manages all CoreModules, teh StartUp, teh MainLoop and the shutdown process
@@ -51,31 +53,31 @@ type
iCurExecuted: Integer;
iLastExecuted: Integer;
- Procedure SetCurExecuted(Value: Integer);
+ procedure SetCurExecuted(Value: Integer);
//Function Get all Modules and Creates them
- Function GetModules: Boolean;
+ function GetModules: Boolean;
//Loads Core and all Modules
- Function Load: Boolean;
+ function Load: Boolean;
//Inits Core and all Modules
- Function Init: Boolean;
+ function Init: Boolean;
//DeInits Core and all Modules
- Function DeInit: Boolean;
+ function DeInit: Boolean;
//Load the Core
- Function LoadCore: Boolean;
+ function LoadCore: Boolean;
//Init the Core
- Function InitCore: Boolean;
+ function InitCore: Boolean;
//DeInit the Core
- Function DeInitCore: Boolean;
+ function DeInitCore: Boolean;
//Called one Time per Frame
- Function MainLoop: Boolean;
+ function MainLoop: Boolean;
public
Hooks: THookManager; //Teh Hook Manager ;)
@@ -93,24 +95,24 @@ type
//---------------
//Main Methods to control the Core:
//---------------
- Constructor Create(const cName: String; const cVersion: LongWord);
+ constructor Create(const cName: String; const cVersion: LongWord);
//Starts Loading and Init Process. Then Runs MainLoop. DeInits on Shutdown
- Procedure Run;
+ procedure Run;
//Method for other Classes to get Pointer to a specific Module
- Function GetModulebyName(const Name: String): PCoreModule;
+ function GetModulebyName(const Name: String): PCoreModule;
//--------------
// Hook and Service Procs:
//--------------
- Function ShowMessage(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (lParam: PChar Text, wParam: Symbol)
- Function ReportError(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername))
- Function ReportDebug(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername))
- Function Retranslate(wParam: TwParam; lParam: TlParam): integer; //Calls Translate hook
- Function ReloadTextures(wParam: TwParam; lParam: TlParam): integer; //Calls LoadTextures hook
- Function GetModuleInfo(wParam: TwParam; lParam: TlParam): integer; //If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TModuleInfo to address at lparam
- Function GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer; //Returns Application Handle
+ function ShowMessage(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (lParam: PChar Text, wParam: Symbol)
+ function ReportError(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername))
+ function ReportDebug(wParam: TwParam; lParam: TlParam): integer; //Shows a Message (wParam: Pchar(Message), lParam: PChar(Reportername))
+ function Retranslate(wParam: TwParam; lParam: TlParam): integer; //Calls Translate hook
+ function ReloadTextures(wParam: TwParam; lParam: TlParam): integer; //Calls LoadTextures hook
+ function GetModuleInfo(wParam: TwParam; lParam: TlParam): integer; //If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TModuleInfo to address at lparam
+ function GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer; //Returns Application Handle
end;
var
@@ -118,15 +120,16 @@ var
implementation
-uses {$IFDEF win32}
- Windows,
- {$ENDIF}
- SysUtils;
+uses
+ {$IFDEF win32}
+ Windows,
+ {$ENDIF}
+ SysUtils;
//-------------
// Create - Creates Class + Hook and Service Manager
//-------------
-Constructor TCore.Create(const cName: String; const cVersion: LongWord);
+constructor TCore.Create(const cName: String; const cVersion: LongWord);
begin
inherited Create;
@@ -145,134 +148,114 @@ end;
//-------------
//Starts Loading and Init Process. Then Runs MainLoop. DeInits on Shutdown
//-------------
-Procedure TCore.Run;
+procedure TCore.Run;
var
- noError: Boolean;
+ Success: Boolean;
+
+ procedure HandleError(const ErrorMsg: string);
+ begin
+ if (LastErrorString <> '') then
+ Self.ShowMessage(CORE_SM_ERROR, PChar(ErrorMsg + ': ' + LastErrorString))
+ else
+ Self.ShowMessage(CORE_SM_ERROR, PChar(ErrorMsg));
+
+ //DeInit
+ DeInit;
+ end;
+
begin
//Get Modules
- Try
- noError := GetModules;
- Except
- noError := False;
+ try
+ Success := GetModules();
+ except
+ Success := False;
+ end;
+
+ if (not Success) then
+ begin
+ HandleError('Error Getting Modules');
+ Exit;
end;
//Loading
- if (noError) then
+ try
+ Success := Load();
+ except
+ Success := False;
+ end;
+
+ if (not Success) then
begin
- Try
- noError := Load;
- Except
- noError := False;
- end;
+ HandleError('Error loading Modules');
+ Exit;
+ end;
- if (noError) then
- begin //Init
- Try
- noError := Init;
- Except
- noError := False;
- end;
+ //Init
+ try
+ Success := Init();
+ except
+ Success := False;
+ end;
- If noError then
- begin
- //Call Translate Hook
- noError := (Hooks.CallEventChain(hTranslate, 0, nil) = 0);
-
- If noError then
- begin //Calls LoadTextures Hook
- noError := (Hooks.CallEventChain(hLoadTextures, 0, nil) = 0);
-
- if noError then
- begin //Calls Loading Finished Hook
- noError := (Hooks.CallEventChain(hLoadingFinished, 0, nil) = 0);
-
- If noError then
- begin
- //Start MainLoop
- While noError do
- begin
- noError := MainLoop;
- // to-do : Call Display Draw here
- end;
- end
- else
- begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error calling LoadingFinished Hook: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error calling LoadingFinished Hook'));
- end;
- end
- else
- begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error loading textures: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error loading textures'));
- end;
- end
- else
- begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error translating: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error translating'));
- end;
-
- end
- else
- begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error initing Modules: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error initing Modules'));
- end;
- end
- else
- begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error loading Modules: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error loading Modules'));
- end;
- end
- else
+ if (not Success) then
begin
- If (LastErrorString <> '') then
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error Getting Modules: ' + LastErrorString))
- else
- Self.ShowMessage(CORE_SM_ERROR, PChar('Error Getting Modules'));
+ HandleError('Error initing Modules');
+ Exit;
end;
- //DeInit
- DeInit;
+ //Call Translate Hook
+ if (Hooks.CallEventChain(hTranslate, 0, nil) <> 0) then
+ begin
+ HandleError('Error translating');
+ Exit;
+ end;
+
+ //Calls LoadTextures Hook
+ if (Hooks.CallEventChain(hLoadTextures, 0, nil) <> 0) then
+ begin
+ HandleError('Error loading textures');
+ Exit;
+ end;
+
+ //Calls Loading Finished Hook
+ if (Hooks.CallEventChain(hLoadingFinished, 0, nil) <> 0) then
+ begin
+ HandleError('Error calling LoadingFinished Hook');
+ Exit;
+ end;
+
+ //Start MainLoop
+ while Success do
+ begin
+ Success := MainLoop();
+ // to-do : Call Display Draw here
+ end;
end;
//-------------
//Called one Time per Frame
//-------------
-Function TCore.MainLoop: Boolean;
+function TCore.MainLoop: Boolean;
begin
Result := False;
-
end;
//-------------
//Function Get all Modules and Creates them
//-------------
-Function TCore.GetModules: Boolean;
+function TCore.GetModules: Boolean;
var
- I: Integer;
+ i: Integer;
begin
Result := False;
- for I := 0 to high(Modules) do
+ for i := 0 to high(Modules) do
begin
try
- Modules[I].NeedsDeInit := False;
- Modules[I].Module := CORE_MODULES_TO_LOAD[I].Create;
- Modules[I].Module.Info(@Modules[I].Info);
+ Modules[i].NeedsDeInit := False;
+ Modules[i].Module := CORE_MODULES_TO_LOAD[i].Create;
+ Modules[i].Module.Info(@Modules[i].Info);
except
- ReportError(Integer(PChar('Can''t get module #' + InttoStr(I) + ' "' + Modules[I].Info.Name + '"')), PChar('Core'));
+ ReportError(Integer(PChar('Can''t get module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core'));
Exit;
end;
end;
@@ -282,61 +265,65 @@ end;
//-------------
//Loads Core and all Modules
//-------------
-Function TCore.Load: Boolean;
+function TCore.Load: Boolean;
var
- I: Integer;
+ i: Integer;
begin
Result := LoadCore;
- I := 0;
- While ((Result = True) AND (I <= High(CORE_MODULES_TO_LOAD))) do
+ for i := 0 to High(CORE_MODULES_TO_LOAD) do
begin
try
- Result := Modules[I].Module.Load;
+ Result := Modules[i].Module.Load;
except
Result := False;
- ReportError(Integer(PChar('Error loading module #' + InttoStr(I) + ' "' + Modules[I].Info.Name + '"')), PChar('Core'));
end;
- Inc(I);
+ if (not Result) then
+ begin
+ ReportError(Integer(PChar('Error loading module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core'));
+ break;
+ end;
end;
end;
//-------------
//Inits Core and all Modules
//-------------
-Function TCore.Init: Boolean;
+function TCore.Init: Boolean;
var
- I: Integer;
+ i: Integer;
begin
Result := InitCore;
- I := 0;
- While ((Result = True) AND (I <= High(CORE_MODULES_TO_LOAD))) do
+ for i := 0 to High(CORE_MODULES_TO_LOAD) do
begin
try
- Result := Modules[I].Module.Init;
+ Result := Modules[i].Module.Init;
except
Result := False;
- ReportError(Integer(PChar('Error initing module #' + InttoStr(I) + ' "' + Modules[I].Info.Name + '"')), PChar('Core'));
end;
- Modules[I].NeedsDeInit := Result;
- Inc(I);
+ if (not Result) then
+ begin
+ ReportError(Integer(PChar('Error initing module #' + InttoStr(i) + ' "' + Modules[i].Info.Name + '"')), PChar('Core'));
+ break;
+ end;
+
+ Modules[i].NeedsDeInit := Result;
end;
end;
//-------------
//DeInits Core and all Modules
//-------------
-Function TCore.DeInit: boolean;
-
+function TCore.DeInit: boolean;
var
i: integer;
-
begin
for i := High(CORE_MODULES_TO_LOAD) downto 0 do
+ begin
try
if (Modules[i].NeedsDeInit) then
Modules[i].Module.DeInit;
@@ -352,7 +339,7 @@ end;
//-------------
//Load the Core
//-------------
-Function TCore.LoadCore: Boolean;
+function TCore.LoadCore: Boolean;
begin
hLoadingFinished := Hooks.AddEvent('Core/LoadingFinished');
hMainLoop := Hooks.AddEvent('Core/MainLoop');
@@ -380,53 +367,53 @@ end;
//-------------
//Init the Core
//-------------
-Function TCore.InitCore: Boolean;
+function TCore.InitCore: Boolean;
begin
- //Dont Init s.th. atm.
+ //Don not init something atm.
result := true;
end;
//-------------
//DeInit the Core
//-------------
-Function TCore.DeInitCore: Boolean;
+function TCore.DeInitCore: Boolean;
begin
-
-
- // to-do : write TService-/HookManager.Free and call it here
+ // TODO: write TService-/HookManager.Free and call it here
Result := true;
end;
//-------------
-//Method for other Classes to get Pointer to a specific Module
+//Method for other classes to get pointer to a specific module
//-------------
-Function TCore.GetModulebyName(const Name: String): PCoreModule;
-var I: Integer;
+function TCore.GetModuleByName(const Name: String): PCoreModule;
+var i: Integer;
begin
Result := nil;
- For I := 0 to high(Modules) do
- If (Modules[I].Info.Name = Name) then
+ for i := 0 to High(Modules) do
+ begin
+ if (Modules[i].Info.Name = Name) then
begin
- Result := @Modules[I].Module;
+ Result := @Modules[i].Module;
Break;
end;
+ end;
end;
//-------------
// Shows a MessageDialog (lParam: PChar Text, wParam: Symbol)
//-------------
-Function TCore.ShowMessage(wParam: TwParam; lParam: TlParam): integer;
+function TCore.ShowMessage(wParam: TwParam; lParam: TlParam): integer;
{$IFDEF MSWINDOWS}
-var Params: Cardinal; // Auto Removed, Unused Variable
+var Params: Cardinal;
{$ENDIF}
begin
Result := -1;
{$IFDEF MSWINDOWS}
- If (lParam<>nil) then
+ if (lParam <> nil) then
begin
Params := MB_OK;
- Case wParam of
+ case wParam of
CORE_SM_ERROR: Params := Params or MB_ICONERROR;
CORE_SM_WARNING: Params := Params or MB_ICONWARNING;
CORE_SM_INFO: Params := Params or MB_ICONINFORMATION;
@@ -437,13 +424,13 @@ begin
end;
{$ENDIF}
- // to-do : write ShowMessage for other OSes
+ // TODO: write ShowMessage for other OSes
end;
//-------------
// Calls NewError HookChain (wParam: Pchar(Message), lParam: PChar(Reportername))
//-------------
-Function TCore.ReportError(wParam: TwParam; lParam: TlParam): integer;
+function TCore.ReportError(wParam: TwParam; lParam: TlParam): integer;
begin
//Update LastErrorReporter and LastErrorString
LastErrorReporter := String(PChar(lParam));
@@ -455,7 +442,7 @@ end;
//-------------
// Calls NewDebugInfo HookChain (wParam: Pchar(Message), lParam: PChar(Reportername))
//-------------
-Function TCore.ReportDebug(wParam: TwParam; lParam: TlParam): integer;
+function TCore.ReportDebug(wParam: TwParam; lParam: TlParam): integer;
begin
Hooks.CallEventChain(hDebug, wParam, lParam);
end;
@@ -463,7 +450,7 @@ end;
//-------------
// Calls Translate hook
//-------------
-Function TCore.Retranslate(wParam: TwParam; lParam: TlParam): integer;
+function TCore.Retranslate(wParam: TwParam; lParam: TlParam): integer;
begin
Hooks.CallEventChain(hTranslate, 1, nil);
end;
@@ -471,7 +458,7 @@ end;
//-------------
// Calls LoadTextures hook
//-------------
-Function TCore.ReloadTextures(wParam: TwParam; lParam: TlParam): integer;
+function TCore.ReloadTextures(wParam: TwParam; lParam: TlParam): integer;
begin
Hooks.CallEventChain(hLoadTextures, 1, nil);
end;
@@ -479,7 +466,7 @@ end;
//-------------
// If lParam = nil then get length of Moduleinfo Array. If lparam <> nil then write array of TModuleInfo to address at lparam
//-------------
-Function TCore.GetModuleInfo(wParam: TwParam; lParam: TlParam): integer;
+function TCore.GetModuleInfo(wParam: TwParam; lParam: TlParam): integer;
begin
if (Pointer(lParam) = nil) then
begin
@@ -487,14 +474,14 @@ begin
end
else
begin
- Try
- For Result := 0 to High(Modules) do
+ try
+ for Result := 0 to High(Modules) do
begin
AModuleInfo(Pointer(lParam))[Result].Name := Modules[Result].Info.Name;
AModuleInfo(Pointer(lParam))[Result].Version := Modules[Result].Info.Version;
AModuleInfo(Pointer(lParam))[Result].Description := Modules[Result].Info.Description;
end;
- Except
+ except
Result := -1;
end;
end;
@@ -503,7 +490,7 @@ end;
//-------------
// Returns Application Handle
//-------------
-Function TCore.GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer;
+function TCore.GetApplicationHandle(wParam: TwParam; lParam: TlParam): integer;
begin
Result := hInstance;
end;
@@ -511,7 +498,7 @@ end;
//-------------
// Called when setting CurExecuted
//-------------
-Procedure TCore.SetCurExecuted(Value: Integer);
+procedure TCore.SetCurExecuted(Value: Integer);
begin
//Set Last Executed
iLastExecuted := iCurExecuted;