| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267 |
- /*
- ** 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/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : Combat *
- * *
- * $Archive:: /Commando/Code/commando/dlgevamaptab.cpp $*
- * *
- * Author:: Patrick Smith *
- * *
- * $Modtime:: 1/09/02 1:54p $*
- * *
- * $Revision:: 14 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #include "dlgevamaptab.h"
- #include "resource.h"
- #include "mapctrl.h"
- #include "combat.h"
- #include "soldier.h"
- #include "objectives.h"
- #include "translatedb.h"
- #include "translateobj.h"
- #include "listctrl.h"
- #include "mapmgr.h"
- #include "lineseg.h"
- #include "rendobj.h"
- #include "phys.h"
- #include "pscene.h"
- #include "coltype.h"
- #include "physcoltest.h"
- #include "gamemode.h"
- #include "gameinitmgr.h"
- #include "imagectrl.h"
- #include "string_ids.h"
- ////////////////////////////////////////////////////////////////
- //
- // On_Init_Dialog
- //
- ////////////////////////////////////////////////////////////////
- void
- EvaMapTabClass::On_Init_Dialog (void)
- {
- //
- // Set the map's title
- //
- Set_Dlg_Item_Text (IDC_MAP_TITLE, TRANSLATE (MapMgrClass::Get_Map_Title ()));
- MapCtrlClass *map_ctrl = (MapCtrlClass *)Get_Dlg_Item (IDC_MAP_CTRL);
- if (map_ctrl != NULL) {
-
- //
- // Configure the map
- //
- StringClass texture_filename;
- MapMgrClass::Get_Map_Texture_Filename (texture_filename);
- if (!texture_filename.Is_Empty()) {
- map_ctrl->Set_Map_Texture (texture_filename);
- }
- map_ctrl->Set_Marker_Texture ("MAPICONS.TGA");
- map_ctrl->Set_Map_Center (MapMgrClass::Get_Map_Center ());
- map_ctrl->Set_Map_Scale (MapMgrClass::Get_Map_Scale ());
- map_ctrl->Initialize_Cloud (MapMgrClass::CLOUD_WIDTH, MapMgrClass::CLOUD_HEIGHT);
- //
- // Do the cloud
- //
- for (int cell_x = 0; cell_x < MapMgrClass::CLOUD_WIDTH; cell_x ++) {
- for (int cell_y = 0; cell_y < MapMgrClass::CLOUD_HEIGHT; cell_y ++) {
- map_ctrl->Set_Cloud_Cell (cell_x, cell_y, MapMgrClass::Is_Cell_Visible (cell_x, cell_y));
- }
- }
-
- //
- // Now add a marker that represents Havoc to the map
- //
- if (COMBAT_STAR && MapMgrClass::Is_Player_Marker_Visible ()) {
- Vector3 pos;
- COMBAT_STAR->Get_Position (&pos);
- map_ctrl->Add_Marker (TRANSLATE (IDS_MENU_HAVOC), pos, RectClass (0, 0, 31, 31));
- }
- //
- // Add all the objective markers
- //
- int count = ObjectiveManager::Get_Objective_Count ();
- for (int index = 0; index < count; index ++) {
- Objective *objective = ObjectiveManager::Get_Objective (index);
-
- //
- // Is this an objective we should put on the map?
- //
- if ( objective != NULL &&
- objective->Status == ObjectiveManager::STATUS_IS_PENDING)
- {
- //
- // Now add a marker that represents this objective
- //
- int color = VRGB_TO_INT32 (objective->Type_To_Color ());
- int item_index = map_ctrl->Add_Marker (L"", objective->Position, RectClass (32, 0, 64, 32), color);
- map_ctrl->Set_Marker_Data (item_index, (uint32)objective);
- }
- }
- //
- // Make sure that Havoc is in view
- //
- if (COMBAT_STAR != NULL && MapMgrClass::Is_Player_Marker_Visible ()) {
- map_ctrl->Center_View_About_Marker (0);
- }
- }
- //
- // Configure the list control
- //
- ListCtrlClass *list_ctrl = (ListCtrlClass *)Get_Dlg_Item (IDC_OBJECT_DESC_LIST);
- if (list_ctrl != NULL) {
- list_ctrl->Add_Column (L"", 1.0F, Vector3 (1, 1, 1));
- }
- ChildDialogClass::On_Init_Dialog ();
- return ;
- }
- ////////////////////////////////////////////////////////////////
- //
- // On_MapCtrl_Marker_Hilighted
- //
- ////////////////////////////////////////////////////////////////
- void
- EvaMapTabClass::On_MapCtrl_Marker_Hilighted
- (
- MapCtrlClass * map_ctrl,
- int ctrl_id,
- int marker_index
- )
- {
- ListCtrlClass *list_ctrl = (ListCtrlClass *)Get_Dlg_Item (IDC_OBJECT_DESC_LIST);
- ImageCtrlClass *image_ctrl = (ImageCtrlClass *)Get_Dlg_Item (IDC_IMAGE);
- if (list_ctrl == NULL || image_ctrl == NULL) {
- return ;
- }
- //
- // Reset the objective description list
- //
- list_ctrl->Delete_All_Entries ();
- image_ctrl->Set_Texture (NULL);
- if (marker_index == 0) {
-
- //
- // Let the user know its Havoc
- //
- list_ctrl->Insert_Entry (0, TRANSLATE (IDS_MENU_NAME_HAVOC));
- } else if (marker_index > 0) {
-
- //
- // Display the objective information
- //
- Objective *objective = (Objective *)map_ctrl->Get_Marker_Data (marker_index);
- if (objective != NULL) {
- WideStringClass name = TRANSLATE (objective->ShortDescriptionID);
- WideStringClass string;
- string.Format (TRANSLATE (IDS_MENU_NAME_FORMAT), (const WCHAR *)name);
- list_ctrl->Insert_Entry (0, string);
- string.Format (TRANSLATE (IDS_MENU_PRIORITY_FORMAT), objective->Type_To_Name ());
- list_ctrl->Insert_Entry (1, string);
- list_ctrl->Set_Entry_Color (1, 0, objective->Type_To_Color ());
- string.Format (TRANSLATE (IDS_MENU_STATUS_FORMAT), objective->Status_To_Name ());
- list_ctrl->Insert_Entry (2, string);
- list_ctrl->Insert_Entry (3, L"");
- //
- // Lookup the translation object from the strings database
- //
- TDBObjClass *translate_obj = TranslateDBClass::Find_Object (objective->LongDescriptionID);
- if (translate_obj != NULL) {
- list_ctrl->Insert_Entry (4, translate_obj->Get_String ());
- }
- //
- // Configure the POG icon
- //
- image_ctrl->Set_Texture (objective->HUDPogTextureName);
- }
- }
- return ;
- }
- ////////////////////////////////////////////////////////////////
- //
- // On_MapCtrl_Pos_Clicked
- //
- ////////////////////////////////////////////////////////////////
- void
- EvaMapTabClass::On_MapCtrl_Pos_Clicked
- (
- MapCtrlClass * map_ctrl,
- int ctrl_id,
- const Vector3 & position
- )
- {
- float start_z = 1000;
- float end_z = -1000;
- //
- // Setup a raycast at this (x,y) position to find the z position
- //
- CastResultStruct result;
- LineSegClass ray (Vector3 (position.X, position.Y, start_z), Vector3 (position.X, position.Y, end_z));
- PhysRayCollisionTestClass raytest (ray, &result, 0, COLLISION_TYPE_PROJECTILE);
- PhysicsSceneClass::Get_Instance ()->Cast_Ray (raytest);
- Vector3 world_space_pos = position;
- //
- // Calculate what the z-position is
- //
- if (result.Fraction < 1.0F) {
- world_space_pos.Z = start_z + (end_z - start_z) * result.Fraction;
- }
- //
- // Warp the player to this position
- //
- COMBAT_STAR->Set_Position (world_space_pos);
- //
- // Return to the game
- //
- //extern void Continue_Game (void);
- //Continue_Game ();
- GameInitMgrClass::Continue_Game();
- return ;
- }
|