This repository has been archived on 2025-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
CnC_Renegade/Code/Commando/gamemenu.cpp

248 lines
6.9 KiB
C++
Raw Permalink Normal View History

/*
** 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 : Commando *
* *
* $Archive:: /Commando/Code/Commando/gamemenu.cpp $*
* *
* $Author:: Bhayes $*
* *
* $Modtime:: 2/08/02 12:16p $*
* *
* $Revision:: 191 $*
* *
*---------------------------------------------------------------------------------------------*
* Functions: *
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
#include "gamemenu.h"
#include "scene.h"
#include "camera.h"
#include "ww3d.h"
#include "debug.h"
#include "assets.h"
#include "font3d.h"
#include "render2d.h"
#include "saveloadstatus.h"
#include "cnetwork.h"
#include "netinterface.h"
#include "langmode.h"
#include "wolgmode.h"
#include "miscutil.h"
#include "_globals.h"
#include "player.h"
#include "gamedata.h"
#include "useroptions.h"
#include "devoptions.h"
#include "playertype.h"
#include "singlepl.h"
#include "translatedb.h"
#include "string_ids.h"
#include "playermanager.h"
#include "teammanager.h"
#include "thread.h"
#include "textdisplay.h"
#include "msgloop.h"
#include "texture.h"
#include "combatgmode.h"
#include "font3d.h"
#include "wwprofile.h"
#include "wwmemlog.h"
#include "physlist.h"
#include "pscene.h"
#include "dazzle.h"
#include "decophys.h"
#include "wwaudio.h"
#include "audiblesound.h"
#include "gametype.h"
#include "dx8wrapper.h"
#include "dx8renderer.h"
#include "rect.h"
#include "dialogmgr.h"
#include "renegadedialogmgr.h"
#include "textureloader.h"
#include "input.h"
#include "menudialog.h"
#include "popupdialog.h"
#include "resource.h"
#include "gameinitmgr.h"
#include "menubackdrop.h"
#include "dlgmainmenu.h"
#include "ccamera.h"
bool g_is_loading = false;
////////////////////////////////////////////////////////////////////
//
// MenuGameModeClass2
//
////////////////////////////////////////////////////////////////////
MenuGameModeClass2::MenuGameModeClass2 (void) :
MenuMusic (NULL)
{
return ;
}
////////////////////////////////////////////////////////////////////
//
// Init
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Init (void)
{
const char *MENU_MUSIC_FILENAME = "menu.mp3";
//
// Create the background music
//
MenuMusic = WWAudioClass::Get_Instance ()->Create_Sound_Effect (MENU_MUSIC_FILENAME);
if (MenuMusic != NULL) {
MenuMusic->Set_Type (AudibleSoundClass::TYPE_MUSIC);
MenuMusic->Set_Priority (1.0F);
MenuMusic->Set_Loop_Count (0);
MenuMusic->Set_Volume (1.0F);
}
if (MenuDialogClass::Get_BackDrop () && MenuDialogClass::Get_BackDrop ()->Peek_Model () == NULL) {
MenuDialogClass::Get_BackDrop ()->Set_Model ("IF_BACK01");
MenuDialogClass::Get_BackDrop ()->Set_Animation ("IF_BACK01.IF_BACK01");
}
return ;
}
////////////////////////////////////////////////////////////////////
//
// Shutdown
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Shutdown (void)
{
if (MenuMusic != NULL) {
MenuMusic->Stop ();
REF_PTR_RELEASE (MenuMusic);
}
return ;
}
////////////////////////////////////////////////////////////////////
//
// Think
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Think (void)
{
if (MenuMusic != NULL) {
//
// Start playing the music where necessary and stop the music
// where necessary
//
if (Is_Active () && MenuMusic->Is_Playing () == false) {
if (IS_SOLOPLAY || GameInitMgrClass::Is_Game_In_Progress () == false) {
MenuMusic->Stop ();
MenuMusic->Play ();
}
} else if (Is_Active () == false && MenuMusic->Is_Playing ()) {
MenuMusic->Stop ();
}
}
if (Is_Active () && DialogMgrClass::Get_Dialog_Count () == 0) {
Deactivate ();
}
return ;
}
////////////////////////////////////////////////////////////////////
//
// Think
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Render (void)
{
return ;
}
////////////////////////////////////////////////////////////////////
//
// Activate
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Activate (void)
{
WWMEMLOG(MEM_GAMEDATA);
GameModeClass::Activate();
//
// Pause game sounds and activate menu sounds
//
if (IS_SOLOPLAY && WWAudioClass::Get_Instance () != NULL) {
WWAudioClass::Get_Instance ()->Set_Active_Sound_Page (WWAudioClass::PAGE_SECONDARY);
}
if (COMBAT_CAMERA != NULL) {
COMBAT_CAMERA->Set_Snap_Shot_Mode (false);
}
return ;
}
////////////////////////////////////////////////////////////////////
//
// Deactivate
//
////////////////////////////////////////////////////////////////////
void
MenuGameModeClass2::Deactivate (void)
{
WWMEMLOG(MEM_GAMEDATA);
//
// Resume game sounds as necessary
//
if (WWAudioClass::Get_Instance () != NULL) {
WWAudioClass::Get_Instance ()->Flush_Playlist (WWAudioClass::PAGE_SECONDARY);
WWAudioClass::Get_Instance ()->Set_Active_Sound_Page (WWAudioClass::PAGE_PRIMARY);
}
DialogMgrClass::Flush_Dialogs ();
GameModeClass::Deactivate();
return ;
}