/* ** Command & Conquer Generals(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 . */ //////////////////////////////////////////////////////////////////////////////// // // // (c) 2001-2003 Electronic Arts Inc. // // // //////////////////////////////////////////////////////////////////////////////// // FILE: W3DRadar.h /////////////////////////////////////////////////////////////////////////////// // Author: Colin Day, January 2002 // Desc: W3D radar implementation, this has the necessary device dependent drawing // necessary for the radar /////////////////////////////////////////////////////////////////////////////////////////////////// #pragma once #ifndef __W3DRADAR_H_ #define __W3DRADAR_H_ // INCLUDES /////////////////////////////////////////////////////////////////////////////////////// #include "Common/Radar.h" #include "WW3D2/WW3DFormat.h" // FORWARD REFERENCES ///////////////////////////////////////////////////////////////////////////// class TextureClass; class TerrainLogic; // PROTOTYPES ///////////////////////////////////////////////////////////////////////////////////// //------------------------------------------------------------------------------------------------- /** W3D radar class. This has the device specific implementation of the radar such as * the drawing routines */ //------------------------------------------------------------------------------------------------- class W3DRadar : public Radar { public: W3DRadar( void ); ~W3DRadar( void ); virtual void init( void ); ///< subsystem init virtual void update( void ); ///< subsystem update virtual void reset( void ); ///< subsystem reset virtual void newMap( TerrainLogic *terrain ); ///< reset radar for new map void draw( Int pixelX, Int pixelY, Int width, Int height ); ///< draw the radar virtual void clearShroud(); virtual void setShroudLevel(Int x, Int y, CellShroudStatus setting); virtual void refreshTerrain( TerrainLogic *terrain ); protected: void drawSingleBeaconEvent( Int pixelX, Int pixelY, Int width, Int height, Int index ); void drawSingleGenericEvent( Int pixelX, Int pixelY, Int width, Int height, Int index ); void initializeTextureFormats( void ); ///< find format to use for the radar texture void deleteResources( void ); ///< delete resources used void drawEvents( Int pixelX, Int pixelY, Int width, Int height); ///< draw all of the radar events void drawHeroIcon( Int pixelX, Int pixelY, Int width, Int height, const Coord3D *pos ); //< draw a hero icon void drawViewBox( Int pixelX, Int pixelY, Int width, Int height ); ///< draw view box void buildTerrainTexture( TerrainLogic *terrain ); ///< create the terrain texture of the radar void drawIcons( Int pixelX, Int pixelY, Int width, Int height ); ///< draw all of the radar icons void renderObjectList( const RadarObject *listHead, TextureClass *texture, Bool calcHero = FALSE ); ///< render an object list to the texture void interpolateColorForHeight( RGBColor *color, Real height, Real hiZ, Real midZ, Real loZ ); ///< "shade" color according to height value void reconstructViewBox( void ); ///< remake the view box void radarToPixel( const ICoord2D *radar, ICoord2D *pixel, Int radarUpperLeftX, Int radarUpperLeftY, Int radarWidth, Int radarHeight ); ///< convert radar coord to pixel location WW3DFormat m_terrainTextureFormat; ///< format to use for terrain texture Image *m_terrainImage; ///< terrain image abstraction for drawing TextureClass *m_terrainTexture; ///< terrain background texture WW3DFormat m_overlayTextureFormat; ///< format to use for overlay texture Image *m_overlayImage; ///< overlay image abstraction for drawing TextureClass *m_overlayTexture; ///< overlay texture WW3DFormat m_shroudTextureFormat; ///< format to use for shroud texture Image *m_shroudImage; ///< shroud image abstraction for drawing TextureClass *m_shroudTexture; ///< shroud texture Int m_textureWidth; ///< width for all radar textures Int m_textureHeight; ///< height for all radar textures // // we want to keep a flag that tells us when to reconstruct the view box, we want // to reconstruct the box on map change, and when the camera changes height // or orientation. We want to avoid making the view box every frame because // the 4 points visible on the edge of the screen will "jitter" unevenly as we // translate real world coords to integer radar spots // Bool m_reconstructViewBox; ///< true when we need to reconstruct the box Real m_viewAngle; ///< camera angle used for the view box we have Real m_viewZoom; ///< camera zoom used for the view box we have ICoord2D m_viewBox[ 4 ]; ///< radar cell points for the 4 corners of view box std::list m_cachedHeroPosList; //< cache of hero positions for drawing icons in radar overlay }; #endif // __W3DRADAR_H_