/* ** 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 . */ /*********************************************************************************************** *** Confidential - Westwood Studios *** *********************************************************************************************** * * * Project Name : Commando * * * * $Archive:: /Commando/Code/Combat/evasettings.cpp $* * * * $Author:: Patrick $* * * * $Modtime:: 1/07/02 10:46a $* * * * $Revision:: 10 $* * * *---------------------------------------------------------------------------------------------* * Functions: * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ #include "evasettings.h" #include "combatchunkid.h" #include "wwhack.h" #include "persistfactory.h" #include "definitionfactory.h" #include "simpledefinitionfactory.h" #include "debug.h" #include "objectives.h" #include "combat.h" #include "messagewindow.h" DECLARE_FORCE_LINK (EvaSettings) /////////////////////////////////////////////////////////////////////////////////////////// // Static member initialization /////////////////////////////////////////////////////////////////////////////////////////// EvaSettingsDefClass * EvaSettingsDefClass::EvaSettings = NULL; /////////////////////////////////////////////////////////////////////////////////////////// // Factories /////////////////////////////////////////////////////////////////////////////////////////// SimplePersistFactoryClass _EvaSettingsDefPersistFactory; DECLARE_DEFINITION_FACTORY(EvaSettingsDefClass, CLASSID_GLOBAL_SETTINGS_DEF_EVA, "Eva Settings") _EvaSettingsDefDefFactory; /////////////////////////////////////////////////////////////////////////////////////////// // Save/load constants /////////////////////////////////////////////////////////////////////////////////////////// enum { CHUNKID_PARENT = 803001812, CHUNKID_VARIABLES, VARID_OBJECTIVESSCREENRECT = 1, VARID_OBJECTIVESTEXTRECT, VARID_OBJECTIVESENDCAPUVRECT, VARID_OBJECTIVESFADEOUTUVRECT, VARID_OBJECTIVESBACKGROUNDUVRECT, VARID_OBJECTIVESTEXTURESIZE, VARID_MESSAGESSCREENRECT, VARID_MESSAGESTEXTRECT, VARID_MESSAGESENDCAPUVRECT, VARID_MESSAGESFADEOUTUVRECT, VARID_MESSAGESBACKGROUNDUVRECT, VARID_MESSAGESTEXTURESIZE, VARID_MESSAGESICONPOS }; /////////////////////////////////////////////////////////////////////////////////////////// // Default values /////////////////////////////////////////////////////////////////////////////////////////// const RectClass DEF_OBJECTIVESSCREENRECT (0.063F, 0.25F, 0.938F, 0.75); const RectClass DEF_OBJECTIVESTEXTRECT (0.1F, 0.260F, 0.906F, 0.555F); const RectClass DEF_OBJECTIVESENDCAPUVRECT (0, 67, 8, 127); const RectClass DEF_OBJECTIVESFADEOUTUVRECT (41, 34, 127, 65); const RectClass DEF_OBJECTIVESBACKGROUNDUVRECT (2, 1, 126, 32); const Vector2 DEF_OBJECTIVESTEXTURESIZE (128, 128); const RectClass DEF_MESSAGESSCREENRECT (0.116F, 0.021F, 0.938F, 0.208F); const RectClass DEF_MESSAGESTEXTRECT (0.147F, 0.031F, 0.906F, 0.198F); const RectClass DEF_MESSAGESENDCAPUVRECT (0, 67, 8, 127); const RectClass DEF_MESSAGESFADEOUTUVRECT (41, 34, 127, 65); const RectClass DEF_MESSAGESBACKGROUNDUVRECT (2, 1, 126, 32); const Vector2 DEF_MESSAGESTEXTURESIZE (128, 128); const Vector2 DEF_MESSAGESICONPOS (0.016F, 0.021F); EvaSettingsDefClass _DefaultSettings; /////////////////////////////////////////////////////////////////////////////////////////// // // EvaSettingsDefClass // /////////////////////////////////////////////////////////////////////////////////////////// EvaSettingsDefClass::EvaSettingsDefClass (void) : ObjectivesScreenRect (DEF_OBJECTIVESSCREENRECT), ObjectivesTextRect (DEF_OBJECTIVESTEXTRECT), ObjectivesEndcapUVRect (DEF_OBJECTIVESENDCAPUVRECT), ObjectivesFadeoutUVRect (DEF_OBJECTIVESFADEOUTUVRECT), ObjectivesBackgroundUVRect (DEF_OBJECTIVESBACKGROUNDUVRECT), ObjectivesTextureSize (DEF_OBJECTIVESTEXTURESIZE), MessagesScreenRect (DEF_MESSAGESSCREENRECT), MessagesTextRect (DEF_MESSAGESTEXTRECT), MessagesEndcapUVRect (DEF_MESSAGESENDCAPUVRECT), MessagesFadeoutUVRect (DEF_MESSAGESFADEOUTUVRECT), MessagesBackgroundUVRect (DEF_MESSAGESBACKGROUNDUVRECT), MessagesTextureSize (DEF_MESSAGESTEXTURESIZE), MessagesIconPos (DEF_MESSAGESICONPOS) { PARAM_SEPARATOR (EvaSettingsDefClass, "Objectives Viewer"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, ObjectivesScreenRect, "Screen Rect (normalized pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, ObjectivesTextRect, "Text Rect (normalized pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_VECTOR2, ObjectivesTextureSize, "Texture Size (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, ObjectivesEndcapUVRect, "Endcap UV Rect (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, ObjectivesFadeoutUVRect, "Fadeout UV Rect (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, ObjectivesBackgroundUVRect, "Background UV Rect (pixels)"); PARAM_SEPARATOR (EvaSettingsDefClass, "Messages Window"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, MessagesScreenRect, "Screen Rect (normalized pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, MessagesTextRect, "Text Rect (normalized pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_VECTOR2, MessagesIconPos, "Icon Position (normalized pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_VECTOR2, MessagesTextureSize, "Texture Size (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, MessagesEndcapUVRect, "Endcap UV Rect (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, MessagesFadeoutUVRect, "Fadeout UV Rect (pixels)"); NAMED_EDITABLE_PARAM (EvaSettingsDefClass, ParameterClass::TYPE_RECT, MessagesBackgroundUVRect, "Background UV Rect (pixels)"); EvaSettings = this; return ; } /////////////////////////////////////////////////////////////////////////////////////////// // // ~EvaSettingsDefClass // /////////////////////////////////////////////////////////////////////////////////////////// EvaSettingsDefClass::~EvaSettingsDefClass (void) { EvaSettings = &_DefaultSettings; return ; } /////////////////////////////////////////////////////////////////////////////////////////// // // Get_Class_ID // /////////////////////////////////////////////////////////////////////////////////////////// uint32 EvaSettingsDefClass::Get_Class_ID (void) const { return CLASSID_GLOBAL_SETTINGS_DEF_EVA; } /////////////////////////////////////////////////////////////////////////////////////////// // // Get_Factory // /////////////////////////////////////////////////////////////////////////////////////////// const PersistFactoryClass & EvaSettingsDefClass::Get_Factory (void) const { return _EvaSettingsDefPersistFactory; } /////////////////////////////////////////////////////////////////////////////////////////// // // Create // /////////////////////////////////////////////////////////////////////////////////////////// PersistClass * EvaSettingsDefClass::Create (void) const { WWASSERT (0); return NULL; } /////////////////////////////////////////////////////////////////////////////////////////// // // Save // /////////////////////////////////////////////////////////////////////////////////////////// bool EvaSettingsDefClass::Save (ChunkSaveClass &csave) { csave.Begin_Chunk (CHUNKID_PARENT); DefinitionClass::Save (csave); csave.End_Chunk (); csave.Begin_Chunk (CHUNKID_VARIABLES); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESSCREENRECT, ObjectivesScreenRect); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESTEXTRECT, ObjectivesTextRect); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESENDCAPUVRECT, ObjectivesEndcapUVRect); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESFADEOUTUVRECT, ObjectivesFadeoutUVRect); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESBACKGROUNDUVRECT, ObjectivesBackgroundUVRect); WRITE_MICRO_CHUNK (csave, VARID_OBJECTIVESTEXTURESIZE, ObjectivesTextureSize); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESSCREENRECT, MessagesScreenRect); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESTEXTRECT, MessagesTextRect); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESENDCAPUVRECT, MessagesEndcapUVRect); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESFADEOUTUVRECT, MessagesFadeoutUVRect); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESBACKGROUNDUVRECT, MessagesBackgroundUVRect); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESTEXTURESIZE, MessagesTextureSize); WRITE_MICRO_CHUNK (csave, VARID_MESSAGESICONPOS, MessagesIconPos); csave.End_Chunk(); return true; } /////////////////////////////////////////////////////////////////////////////////////////// // // Load // /////////////////////////////////////////////////////////////////////////////////////////// bool EvaSettingsDefClass::Load (ChunkLoadClass &cload) { while (cload.Open_Chunk ()) { switch(cload.Cur_Chunk_ID ()) { case CHUNKID_PARENT: DefinitionClass::Load (cload); break; case CHUNKID_VARIABLES: while (cload.Open_Micro_Chunk ()) { switch(cload.Cur_Micro_Chunk_ID ()) { READ_MICRO_CHUNK (cload, VARID_OBJECTIVESSCREENRECT, ObjectivesScreenRect); READ_MICRO_CHUNK (cload, VARID_OBJECTIVESTEXTRECT, ObjectivesTextRect); READ_MICRO_CHUNK (cload, VARID_OBJECTIVESENDCAPUVRECT, ObjectivesEndcapUVRect); READ_MICRO_CHUNK (cload, VARID_OBJECTIVESFADEOUTUVRECT, ObjectivesFadeoutUVRect); READ_MICRO_CHUNK (cload, VARID_OBJECTIVESBACKGROUNDUVRECT, ObjectivesBackgroundUVRect); READ_MICRO_CHUNK (cload, VARID_OBJECTIVESTEXTURESIZE, ObjectivesTextureSize); READ_MICRO_CHUNK (cload, VARID_MESSAGESSCREENRECT, MessagesScreenRect); READ_MICRO_CHUNK (cload, VARID_MESSAGESTEXTRECT, MessagesTextRect); READ_MICRO_CHUNK (cload, VARID_MESSAGESENDCAPUVRECT, MessagesEndcapUVRect); READ_MICRO_CHUNK (cload, VARID_MESSAGESFADEOUTUVRECT, MessagesFadeoutUVRect); READ_MICRO_CHUNK (cload, VARID_MESSAGESBACKGROUNDUVRECT, MessagesBackgroundUVRect); READ_MICRO_CHUNK (cload, VARID_MESSAGESTEXTURESIZE, MessagesTextureSize); READ_MICRO_CHUNK (cload, VARID_MESSAGESICONPOS, MessagesIconPos); default: Debug_Say(("Unhandled Micro Chunk:%d File:%s Line:%d\r\n",cload.Cur_Micro_Chunk_ID (),__FILE__,__LINE__)); break; } cload.Close_Micro_Chunk(); } break; default: Debug_Say(("Unhandled Chunk:%d File:%s Line:%d\r\n",cload.Cur_Chunk_ID(),__FILE__,__LINE__)); break; } cload.Close_Chunk(); } ObjectiveManager::Reload_Viewer (); // // Ask the message window to recalculate its size... // MessageWindowClass *message_window = CombatManager::Get_Message_Window (); if (message_window != NULL) { message_window->Clear_Log (); message_window->Reset_Current_Rect (); message_window->Set_Window_Dirty (true); } return true; }