mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 07:31:40 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
277
Code/Installer/Installer.h
Normal file
277
Code/Installer/Installer.h
Normal file
@@ -0,0 +1,277 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/***********************************************************************************************
|
||||
*** Confidential - Westwood Studios ***
|
||||
***********************************************************************************************
|
||||
* *
|
||||
* Project Name : Installer *
|
||||
* *
|
||||
* $Archive:: /Commando/Code/Installer/Installer.h $*
|
||||
* *
|
||||
* $Author:: Ian_l $*
|
||||
* *
|
||||
* $Modtime:: 1/17/02 5:01p $*
|
||||
* *
|
||||
* $Revision:: 13 $*
|
||||
* *
|
||||
*---------------------------------------------------------------------------------------------*
|
||||
* Functions: *
|
||||
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
||||
#ifndef _INSTALLER_H
|
||||
#define _INSTALLER_H
|
||||
|
||||
// Includes.
|
||||
#include "RegistryManager.h"
|
||||
#include "Utilities.h"
|
||||
#include "Wwuiinput.h"
|
||||
|
||||
|
||||
// Forward declarations.
|
||||
class AudibleSoundClass;
|
||||
class CardSelectionDialogClass;
|
||||
class CopyDialogClass;
|
||||
class DialogBaseClass;
|
||||
class FinalDialogClass;
|
||||
class GameDirectoryDialogClass;
|
||||
class GameFolderDialogClass;
|
||||
class INIClass;
|
||||
class NDADialogClass;
|
||||
class LicenseDialogClass;
|
||||
class MixFileFactoryClass;
|
||||
class ReviewDialogClass;
|
||||
class SerialDialogClass;
|
||||
class WelcomeDialogClass;
|
||||
class WhatToInstallDialogClass;
|
||||
class WOL1DialogClass;
|
||||
class WOL2DialogClass;
|
||||
class WOLDirectoryDialogClass;
|
||||
class WOLFolderDialogClass;
|
||||
class WWAudioClass;
|
||||
class WW3DAssetManager;
|
||||
|
||||
|
||||
// Class definitions.
|
||||
class InstallerUIInputClass : public WWUIInputClass
|
||||
{
|
||||
public:
|
||||
|
||||
InstallerUIInputClass() : WWUIInputClass(), MousePosition (Vector3 (0.0f, 0.0f, 0.0f)) {}
|
||||
|
||||
void Add_Mouse_Wheel (short delta)
|
||||
{
|
||||
MousePosition.Z += delta;
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
const Vector3 &Get_Mouse_Pos (void) const
|
||||
{
|
||||
POINT cursorposition;
|
||||
|
||||
GetCursorPos (&cursorposition);
|
||||
ScreenToClient (MainWindow, &cursorposition);
|
||||
MousePosition.X = cursorposition.x;
|
||||
MousePosition.Y = cursorposition.y;
|
||||
return (MousePosition);
|
||||
}
|
||||
|
||||
void Set_Mouse_Pos (const Vector3 &position)
|
||||
{
|
||||
POINT p;
|
||||
|
||||
if (GameInFocus) {
|
||||
p.x = position.X;
|
||||
p.y = position.Y;
|
||||
ClientToScreen (MainWindow, &p);
|
||||
SetCursorPos (p.x, p.y);
|
||||
MousePosition.X = p.x;
|
||||
MousePosition.Y = p.y;
|
||||
}
|
||||
}
|
||||
|
||||
bool Is_Button_Down (int vk_mouse_button_id)
|
||||
{
|
||||
bool retval = false;
|
||||
switch (vk_mouse_button_id)
|
||||
{
|
||||
case VK_LBUTTON:
|
||||
case VK_MBUTTON:
|
||||
case VK_RBUTTON:
|
||||
retval = (GetKeyState (vk_mouse_button_id) & 0x80000000) != 0x0;
|
||||
break;
|
||||
}
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
mutable Vector3 MousePosition;
|
||||
};
|
||||
|
||||
|
||||
class FileLogClass {
|
||||
|
||||
public:
|
||||
|
||||
// Equality operator.
|
||||
bool operator == (const FileLogClass &f) {
|
||||
return ((RelativePathname == f.RelativePathname) && (Size == f.Size));
|
||||
}
|
||||
|
||||
// Inequality operator.
|
||||
bool operator != (const FileLogClass &f) {
|
||||
return (!(*this == f));
|
||||
}
|
||||
|
||||
WideStringClass RelativePathname; // Relative pathname of file.
|
||||
__int64 Size; // Size of file (in bytes).
|
||||
};
|
||||
|
||||
|
||||
class InstallerClass
|
||||
{
|
||||
public:
|
||||
|
||||
InstallerClass();
|
||||
~InstallerClass();
|
||||
|
||||
InstallerUIInputClass *Get_Input() {return (UIInput);}
|
||||
|
||||
void Cancel_Introduction() {CancelIntroduction = true;}
|
||||
|
||||
void Install (MixFileFactoryClass *mixfilefactory);
|
||||
void Dialog_Callback (DialogBaseClass *dialog, int ctrl_id, int message_id, DWORD param);
|
||||
void On_Prog_End();
|
||||
|
||||
// Main interface.
|
||||
const WCHAR *Get_Source_Game_Path (WideStringClass &path) {path = SourceGamePath; return (path);}
|
||||
const WCHAR *Get_Source_WOL_Path (WideStringClass &path) {path = SourceWOLPath; return (path);}
|
||||
bool Install_Game();
|
||||
bool Install_WOL();
|
||||
bool Install_Game_Shortcut();
|
||||
__int64 Get_Game_Size (bool ondisk);
|
||||
__int64 Get_WOL_Size (bool ondisk);
|
||||
__int64 Get_Total_Size (bool ondisk);
|
||||
bool Get_Game_Space_Available (const WideStringClass &path, __int64 &diskspace) {return (Get_Disk_Space_Available (path, diskspace));}
|
||||
bool Get_WOL_Space_Available (const WideStringClass &path, __int64 &diskspace);
|
||||
const char *Get_Serial_Number (StringClass &serialnumber);
|
||||
const WCHAR *Get_Target_Game_Path (WideStringClass &path);
|
||||
bool Get_Target_Sub_Path (unsigned index, WideStringClass &subdirectoryname);
|
||||
const WCHAR *Get_Target_WOL_Path (WideStringClass &path);
|
||||
const WCHAR *Get_Target_Game_Folder (WideStringClass &folder);
|
||||
const WCHAR *Get_Target_WOL_Folder (WideStringClass &folder);
|
||||
bool Is_Fresh_Game_Install() {return (FreshGameInstall);}
|
||||
bool Is_Fresh_WOL_Install() {return (FreshWOLInstall);}
|
||||
bool Is_Target_WOL_Older_Than_Source() {return (TargetWOLOlder);}
|
||||
WW3DAssetManager *Get_Asset_Manager() {return (AssetManager);}
|
||||
bool Can_Use_IGR_Settings();
|
||||
bool Use_IGR_Settings();
|
||||
bool Beta_Test();
|
||||
|
||||
// Registry interface.
|
||||
void Update_Registry();
|
||||
void Create_Links();
|
||||
bool Get_WOL_Account (unsigned index, WideStringClass &name, WideStringClass &password);
|
||||
void Set_Preferred_WOL_Account (const WideStringClass &accountname) {_RegistryManager.Set_Preferred_WOL_Account (accountname);}
|
||||
|
||||
// File/subdirectory logging interface.
|
||||
void Log (const WideStringClass &pathname, __int64 size = -1);
|
||||
void Create_Uninstall_Logs();
|
||||
|
||||
protected:
|
||||
|
||||
enum ProgEndActionEnum {
|
||||
ACTION_NONE,
|
||||
ACTION_RUN_GAME,
|
||||
ACTION_DISPLAY_README
|
||||
};
|
||||
|
||||
// Internal initialization/shutdown.
|
||||
void Initialize();
|
||||
void Shutdown();
|
||||
bool WW3D_Initialize (int cardselection = -1);
|
||||
void WW3D_Shutdown();
|
||||
|
||||
// Support functions.
|
||||
bool Check_Source();
|
||||
void Count_Source_Files (const WideStringClass &sourcepath, unsigned &filecount, __int64 &filesize);
|
||||
void Check_Existing_Install();
|
||||
void Auto_Configure();
|
||||
bool Register_COM_Server (const WideStringClass &comdll);
|
||||
void Create_Encryption_File (const WideStringClass &pathname);
|
||||
void Encrypt (const char *number, const WideStringClass &pathname, StringClass &encryptednumber);
|
||||
bool Create_File_Link (const WideStringClass &linkpath, const WideStringClass &title, const WideStringClass &targetpathname, const WideStringClass &iconpathname, const WideStringClass *arguments = NULL);
|
||||
bool Create_URL_Link (const WideStringClass &linkpath, const WideStringClass &title, const WideStringClass &url);
|
||||
bool Has_WOL_Account();
|
||||
void Create_Game_Uninstall_Log();
|
||||
void Create_WOL_Uninstall_Log();
|
||||
void Run_Game();
|
||||
void Display_Readme();
|
||||
|
||||
// Data.
|
||||
INIClass *SetupIni;
|
||||
INIClass *GameIni;
|
||||
INIClass *WOLIni;
|
||||
WideStringClass SourceGamePath;
|
||||
WideStringClass SourceWOLPath;
|
||||
MixFileFactoryClass *MixFileFactory;
|
||||
DynamicVectorClass <WideStringClass> FontNames;
|
||||
WideStringClass TargetGamePath;
|
||||
bool FreshGameInstall;
|
||||
bool FreshWOLInstall;
|
||||
bool TargetWOLOlder;
|
||||
unsigned GameFileCount;
|
||||
__int64 GameSize;
|
||||
unsigned WOLFileCount;
|
||||
__int64 WOLSize;
|
||||
WW3DAssetManager *AssetManager;
|
||||
bool WwmathInitialized;
|
||||
bool DialogMgrInitialized;
|
||||
WWAudioClass *AudioSystem;
|
||||
AudibleSoundClass *TransitionMusic;
|
||||
AudibleSoundClass *InstallMusic;
|
||||
InstallerUIInputClass *UIInput;
|
||||
bool CancelIntroduction;
|
||||
bool CancelApplication;
|
||||
WelcomeDialogClass *WelcomeDialog;
|
||||
NDADialogClass *NDADialog;
|
||||
LicenseDialogClass *LicenseDialog;
|
||||
SerialDialogClass *SerialDialog;
|
||||
WhatToInstallDialogClass *WhatToInstallDialog;
|
||||
GameDirectoryDialogClass *GameDirectoryDialog;
|
||||
GameFolderDialogClass *GameFolderDialog;
|
||||
WOLDirectoryDialogClass *WOLDirectoryDialog;
|
||||
WOLFolderDialogClass *WOLFolderDialog;
|
||||
ReviewDialogClass *ReviewDialog;
|
||||
CopyDialogClass *CopyDialog;
|
||||
WOL1DialogClass *WOL1Dialog;
|
||||
WOL2DialogClass *WOL2Dialog;
|
||||
FinalDialogClass *FinalDialog;
|
||||
CardSelectionDialogClass *CardSelectionDialog;
|
||||
DynamicVectorClass <WideStringClass> GameSubdirectories;
|
||||
DynamicVectorClass <FileLogClass> GameFiles;
|
||||
DynamicVectorClass <FileLogClass> WOLFiles;
|
||||
ProgEndActionEnum ProgEndAction;
|
||||
};
|
||||
|
||||
|
||||
// Singleton.
|
||||
extern InstallerClass _Installer;
|
||||
|
||||
|
||||
#endif // INSTALLER_H
|
||||
Reference in New Issue
Block a user