| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842 |
- /*
- ** 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 <http://www.gnu.org/licenses/>.
- */
- ////////////////////////////////////////////////////////////////////////////////
- // //
- // (c) 2001-2003 Electronic Arts Inc. //
- // //
- ////////////////////////////////////////////////////////////////////////////////
- // FILE: InGameUI.h ///////////////////////////////////////////////////////////////////////////////
- // Defines the in-game user interface singleton
- // Author: Michael S. Booth, March 2001
- // Colin Day August 2001, or so
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- #pragma once
- #ifndef _IN_GAME_UI_H_
- #define _IN_GAME_UI_H_
- #include "Common/GameCommon.h"
- #include "Common/GameType.h"
- #include "Common/MessageStream.h" // for GameMessageTranslator
- #include "Common/SpecialPowerType.h"
- #include "Common/STLTypedefs.h"
- #include "Common/SubsystemInterface.h"
- #include "Common/UnicodeString.h"
- #include "GameClient/DisplayString.h"
- #include "GameClient/Mouse.h"
- #include "GameClient/RadiusDecal.h"
- #include "GameClient/View.h"
- #include "Common/Snapshot.h"
- // FORWARD DECLARATIONS ///////////////////////////////////////////////////////////////////////////
- class Drawable;
- class Object;
- class ThingTemplate;
- class GameWindow;
- class VideoBuffer;
- class VideoStreamInterface;
- class CommandButton;
- class SpecialPowerTemplate;
- class WindowLayout;
- class Anim2DTemplate;
- class Anim2D;
- class Shadow;
- enum LegalBuildCode;
- enum KindOfType;
- enum ShadowType;
- enum CanAttackResult;
- // ------------------------------------------------------------------------------------------------
- enum RadiusCursorType
- {
- RADIUSCURSOR_NONE = 0,
- RADIUSCURSOR_ATTACK_DAMAGE_AREA,
- RADIUSCURSOR_ATTACK_SCATTER_AREA,
- RADIUSCURSOR_ATTACK_CONTINUE_AREA,
- RADIUSCURSOR_GUARD_AREA,
- RADIUSCURSOR_EMERGENCY_REPAIR,
- RADIUSCURSOR_FRIENDLY_SPECIALPOWER,
- RADIUSCURSOR_OFFENSIVE_SPECIALPOWER,
- RADIUSCURSOR_SUPERWEAPON_SCATTER_AREA,
-
- RADIUSCURSOR_PARTICLECANNON,
- RADIUSCURSOR_A10STRIKE,
- RADIUSCURSOR_CARPETBOMB,
- RADIUSCURSOR_DAISYCUTTER,
- RADIUSCURSOR_PARADROP,
- RADIUSCURSOR_SPYSATELLITE,
- RADIUSCURSOR_NUCLEARMISSILE,
- RADIUSCURSOR_EMPPULSE,
- RADIUSCURSOR_ARTILLERYBARRAGE,
- RADIUSCURSOR_NAPALMSTRIKE,
- RADIUSCURSOR_CLUSTERMINES,
- RADIUSCURSOR_SCUDSTORM,
- RADIUSCURSOR_ANTHRAXBOMB,
- RADIUSCURSOR_AMBUSH,
- RADIUSCURSOR_RADAR,
- RADIUSCURSOR_SPYDRONE,
- RADIUSCURSOR_COUNT // keep last
- };
- #ifdef DEFINE_RADIUSCURSOR_NAMES
- static const char *TheRadiusCursorNames[] =
- {
- "NONE",
- "ATTACK_DAMAGE_AREA",
- "ATTACK_SCATTER_AREA",
- "ATTACK_CONTINUE_AREA",
- "GUARD_AREA",
- "EMERGENCY_REPAIR",
- "FRIENDLY_SPECIALPOWER", //green
- "OFFENSIVE_SPECIALPOWER", //red
- "SUPERWEAPON_SCATTER_AREA",//red
- "PARTICLECANNON",
- "A10STRIKE",
- "CARPETBOMB",
- "DAISYCUTTER",
- "PARADROP",
- "SPYSATELLITE",
- "NUCLEARMISSILE",
- "EMPPULSE",
- "ARTILLERYBARRAGE",
- "NAPALMSTRIKE",
- "CLUSTERMINES",
- "SCUDSTORM",
- "ANTHRAXBOMB",
- "AMBUSH",
- "RADAR",
- "SPYDRONE",
- NULL
- };
- #endif
- // ------------------------------------------------------------------------------------------------
- /** For keeping track in the UI of how much build progress has been done */
- // ------------------------------------------------------------------------------------------------
- enum { MAX_BUILD_PROGRESS = 64 }; ///< interface can support building this many different units
- struct BuildProgress
- {
- const ThingTemplate *m_thingTemplate;
- Real m_percentComplete;
- GameWindow *m_control;
- };
- // TYPE DEFINES ///////////////////////////////////////////////////////////////////////////////////
- // ------------------------------------------------------------------------------------------------
- typedef std::list<Drawable *> DrawableList;
- typedef std::list<Drawable *>::iterator DrawableListIt;
- typedef std::list<Drawable *>::const_iterator DrawableListCIt;
- // ------------------------------------------------------------------------------------------------
- // ------------------------------------------------------------------------------------------------
- class SuperweaponInfo : public MemoryPoolObject
- {
- MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(SuperweaponInfo, "SuperweaponInfo")
- private:
- // not saved
- DisplayString * m_nameDisplayString; ///< display string used to render the message
- DisplayString * m_timeDisplayString; ///< display string used to render the message
- Color m_color;
- const SpecialPowerTemplate* m_powerTemplate;
- public:
- SuperweaponInfo(
- ObjectID id,
- UnsignedInt timestamp,
- Bool hiddenByScript,
- Bool hiddenByScience,
- Bool ready,
- const AsciiString& superweaponNormalFont,
- Int superweaponNormalPointSize,
- Bool superweaponNormalBold,
- Color c,
- const SpecialPowerTemplate* spt
- );
- const SpecialPowerTemplate* getSpecialPowerTemplate() const { return m_powerTemplate; }
- void setFont(const AsciiString& superweaponNormalFont, Int superweaponNormalPointSize, Bool superweaponNormalBold);
- void setText(const UnicodeString& name, const UnicodeString& time);
- void drawName(Int x, Int y, Color color, Color dropColor);
- void drawTime(Int x, Int y, Color color, Color dropColor);
- Real getHeight() const;
- // saved & public
- AsciiString m_powerName;
- ObjectID m_id;
- UnsignedInt m_timestamp; ///< seconds shown in display string
- Bool m_hiddenByScript;
- Bool m_hiddenByScience;
- Bool m_ready; ///< Stores if we were ready last draw, since readyness can change without time changing
- // not saved, but public
- Bool m_forceUpdateText;
- };
- // ------------------------------------------------------------------------------------------------
- typedef std::list<SuperweaponInfo *> SuperweaponList;
- typedef std::map<AsciiString, SuperweaponList> SuperweaponMap;
- // ------------------------------------------------------------------------------------------------
- // Popup message box
- class PopupMessageData : public MemoryPoolObject
- {
- MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(PopupMessageData, "PopupMessageData")
- public:
- UnicodeString message;
- Int x;
- Int y;
- Int width;
- Color textColor;
- Bool pause;
- Bool pauseMusic;
- WindowLayout* layout;
- };
- EMPTY_DTOR(PopupMessageData)
- // ------------------------------------------------------------------------------------------------
- class NamedTimerInfo : public MemoryPoolObject
- {
- MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(NamedTimerInfo, "NamedTimerInfo")
- public:
- AsciiString m_timerName; ///< Timer name, needed on Load to reconstruct Map.
- UnicodeString timerText; ///< timer text
- DisplayString* displayString; ///< display string used to render the message
- UnsignedInt timestamp; ///< seconds shown in display string
- Color color;
- Bool isCountdown;
- };
- EMPTY_DTOR(NamedTimerInfo)
- // ------------------------------------------------------------------------------------------------
- typedef std::map<AsciiString, NamedTimerInfo *> NamedTimerMap;
- typedef NamedTimerMap::iterator NamedTimerMapIt;
- // ------------------------------------------------------------------------------------------------
- enum {MAX_SUBTITLE_LINES = 4}; ///< The maximum number of lines a subtitle can have
- // ------------------------------------------------------------------------------------------------
- // Floating Text Data
- class FloatingTextData : public MemoryPoolObject
- {
- MEMORY_POOL_GLUE_WITH_USERLOOKUP_CREATE(FloatingTextData, "FloatingTextData")
- public:
- FloatingTextData(void);
- //~FloatingTextData(void);
- Color m_color; ///< It's current color
- UnicodeString m_text; ///< the text we're displaying
- DisplayString* m_dString; ///< The display string
- Coord3D m_pos3D; ///< the 3d position in game coords
- Int m_frameTimeOut; ///< when we want this thing to disappear
- Int m_frameCount; ///< how many frames have we been displaying text?
- };
- typedef std::list<FloatingTextData *> FloatingTextList;
- typedef FloatingTextList::iterator FloatingTextListIt;
- enum
- {
- DEFAULT_FLOATING_TEXT_TIMEOUT = LOGICFRAMES_PER_SECOND/3,
- };
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////////////////////////
- // ------------------------------------------------------------------------------------------------
- enum WorldAnimationOptions
- {
- WORLD_ANIM_NO_OPTIONS = 0x00000000,
- WORLD_ANIM_FADE_ON_EXPIRE = 0x00000001,
- WORLD_ANIM_PLAY_ONCE_AND_DESTROY = 0x00000002,
- };
- // ------------------------------------------------------------------------------------------------
- class WorldAnimationData
- {
- public:
- WorldAnimationData( void );
- ~WorldAnimationData( void ) { }
- Anim2D *m_anim; ///< the animation instance
- Coord3D m_worldPos; ///< position in the world
- UnsignedInt m_expireFrame; ///< frame we expire on
- WorldAnimationOptions m_options; ///< options
- Real m_zRisePerSecond; ///< Z units to rise per second
- };
- typedef std::list< WorldAnimationData *> WorldAnimationList;
- typedef WorldAnimationList::iterator WorldAnimationListIterator;
- // ------------------------------------------------------------------------------------------------
- /** Basic functionality common to all in-game user interfaces */
- // ------------------------------------------------------------------------------------------------
- class InGameUI : public SubsystemInterface, public Snapshot
- {
-
- friend class Drawable; // for selection/deselection transactions
-
- public: // ***************************************************************************************
- enum SelectionRules
- {
- SELECTION_ANY, //Only one of the selected units has to qualify
- SELECTION_ALL, //All selected units have to qualify
- };
- enum ActionType
- {
- ACTIONTYPE_NONE,
- ACTIONTYPE_ATTACK_OBJECT,
- ACTIONTYPE_GET_REPAIRED_AT,
- ACTIONTYPE_DOCK_AT,
- ACTIONTYPE_GET_HEALED_AT,
- ACTIONTYPE_REPAIR_OBJECT,
- ACTIONTYPE_RESUME_CONSTRUCTION,
- ACTIONTYPE_ENTER_OBJECT,
- ACTIONTYPE_HIJACK_VEHICLE,
- ACTIONTYPE_CONVERT_OBJECT_TO_CARBOMB,
- ACTIONTYPE_CAPTURE_BUILDING,
- ACTIONTYPE_DISABLE_VEHICLE_VIA_HACKING,
- #ifdef ALLOW_SURRENDER
- ACTIONTYPE_PICK_UP_PRISONER,
- #endif
- ACTIONTYPE_STEAL_CASH_VIA_HACKING,
- ACTIONTYPE_DISABLE_BUILDING_VIA_HACKING,
- ACTIONTYPE_MAKE_DEFECTOR,
- ACTIONTYPE_SET_RALLY_POINT,
- ACTIONTYPE_COMBATDROP_INTO,
- //Keep last.
- NUM_ACTIONTYPES
- };
- InGameUI( void );
- virtual ~InGameUI( void );
-
- // Inherited from subsystem interface -----------------------------------------------------------
- virtual void init( void ); ///< Initialize the in-game user interface
- virtual void update( void ); ///< Update the UI by calling preDraw(), draw(), and postDraw()
- virtual void reset( void ); ///< Reset
- //-----------------------------------------------------------------------------------------------
- // interface for the popup messages
- virtual void popupMessage( const AsciiString& message, Int x, Int y, Int width, Bool pause, Bool pauseMusic);
- virtual void popupMessage( const AsciiString& message, Int x, Int y, Int width, Color textColor, Bool pause, Bool pauseMusic);
- PopupMessageData *getPopupMessageData( void ) { return m_popupMessageData; }
- void clearPopupMessageData( void );
- // interface for messages to the user
- // srj sez: passing as const-ref screws up varargs for some reason. dunno why. just pass by value.
- virtual void messageColor( const RGBColor *rgbColor, UnicodeString format, ... ); ///< display a colored message to the user
- virtual void message( UnicodeString format, ... ); ///< display a message to the user
- virtual void message( AsciiString stringManagerLabel, ... );///< display a message to the user
- virtual void toggleMessages( void ) { m_messagesOn = 1 - m_messagesOn; } ///< toggle messages on/off
- virtual Bool isMessagesOn( void ) { return m_messagesOn; } ///< are the display messages on
- void freeMessageResources( void ); ///< free resources for the ui messages
- Color getMessageColor(Bool altColor) { return (altColor)?m_messageColor2:m_messageColor1; }
-
- // interface for military style messages
- virtual void militarySubtitle( const AsciiString& label, Int duration ); // time in milliseconds
- virtual void removeMilitarySubtitle( void );
-
- // for can't build messages
- virtual void displayCantBuildMessage( LegalBuildCode lbc ); ///< display message to use as to why they can't build here
- // interface for graphical "hints" which provide visual feedback for user-interface commands
- virtual void beginAreaSelectHint( const GameMessage *msg ); ///< Used by HintSpy. An area selection is occurring, start graphical "hint"
- virtual void endAreaSelectHint( const GameMessage *msg ); ///< Used by HintSpy. An area selection had occurred, finish graphical "hint"
- virtual void createMoveHint( const GameMessage *msg ); ///< A move command has occurred, start graphical "hint"
- virtual void createAttackHint( const GameMessage *msg ); ///< An attack command has occurred, start graphical "hint"
- virtual void createForceAttackHint( const GameMessage *msg ); ///< A force attack command has occurred, start graphical "hint"
- virtual void createMouseoverHint( const GameMessage *msg ); ///< An object is mouse hovered over, start hint if any
- virtual void createCommandHint( const GameMessage *msg ); ///< Used by HintSpy. Someone is selected so generate the right Cursor for the potential action
- virtual void createGarrisonHint( const GameMessage *msg ); ///< A garrison command has occurred, start graphical "hint"
-
- virtual void addSuperweapon(Int playerIndex, const AsciiString& powerName, ObjectID id, const SpecialPowerTemplate *powerTemplate);
- virtual Bool removeSuperweapon(Int playerIndex, const AsciiString& powerName, ObjectID id, const SpecialPowerTemplate *powerTemplate);
- virtual void objectChangedTeam(const Object *obj, Int oldPlayerIndex, Int newPlayerIndex); // notification for superweapons, etc
- virtual void setSuperweaponDisplayEnabledByScript( Bool enable ); ///< Set the superweapon display enabled or disabled
- virtual Bool getSuperweaponDisplayEnabledByScript( void ) const; ///< Get the current superweapon display status
- virtual void hideObjectSuperweaponDisplayByScript(const Object *obj);
- virtual void showObjectSuperweaponDisplayByScript(const Object *obj);
- void addNamedTimer( const AsciiString& timerName, const UnicodeString& text, Bool isCountdown );
- void removeNamedTimer( const AsciiString& timerName );
- void showNamedTimerDisplay( Bool show );
- // mouse mode interface
- virtual void setScrolling( Bool isScrolling ); ///< set right-click scroll mode
- virtual Bool isScrolling( void ); ///< are we scrolling?
- virtual void setSelecting( Bool isSelecting ); ///< set drag select mode
- virtual Bool isSelecting( void ); ///< are we selecting?
- virtual void setScrollAmount( Coord2D amt ); ///< set scroll amount
- virtual Coord2D getScrollAmount( void ); ///< get scroll amount
- // gui command interface
- virtual void setGUICommand( const CommandButton *command ); ///< the command has been clicked in the UI and needs additional data
- virtual const CommandButton *getGUICommand( void ) const; ///< get the pending gui command
- // build interface
- virtual void placeBuildAvailable( const ThingTemplate *build, Drawable *buildDrawable ); ///< built thing being placed
- virtual const ThingTemplate *getPendingPlaceType( void ); ///< get item we're trying to place
- virtual const ObjectID getPendingPlaceSourceObjectID( void ); ///< get producing object
- virtual void setPlacementStart( const ICoord2D *start ); ///< placement anchor point (for choosing angles)
- virtual void setPlacementEnd( const ICoord2D *end ); ///< set target placement point (for choosing angles)
- virtual Bool isPlacementAnchored( void ); ///< is placement arrow anchor set
- virtual void getPlacementPoints( ICoord2D *start, ICoord2D *end );///< get the placemnt arrow points
- virtual Real getPlacementAngle( void ); ///< placement angle of drawable at cursor when placing down structures
- // Drawable selection mechanisms
- virtual void selectDrawable( Drawable *draw ); ///< Mark given Drawable as "selected"
- virtual void deselectDrawable( Drawable *draw ); ///< Clear "selected" status from Drawable
- virtual void deselectAllDrawables( Bool postMsg = true ); ///< Clear the "select" flag from all drawables
- virtual Int getSelectCount( void ) { return m_selectCount; } ///< Get count of currently selected drawables
- virtual Int getMaxSelectCount( void ) { return m_maxSelectCount; } ///< Get the max number of selected drawables
- virtual UnsignedInt getFrameSelectionChanged( void ) { return m_frameSelectionChanged; } ///< Get the max number of selected drawables
- virtual const DrawableList *getAllSelectedDrawables( void ) const; ///< Return the list of all the currently selected Drawable IDs.
- virtual const DrawableList *getAllSelectedLocalDrawables( void ); ///< Return the list of all the currently selected Drawable IDs owned by the current player.
- virtual Drawable *getFirstSelectedDrawable( void ); ///< get the first selected drawable (if any)
- virtual DrawableID getSoloNexusSelectedDrawableID( void ) { return m_soloNexusSelectedDrawableID; } ///< Return the one drawable of the nexus if only 1 angry mob is selected
- virtual Bool isDrawableSelected( DrawableID idToCheck ) const; ///< Return true if the selected ID is in the drawable list
- virtual Bool isAnySelectedKindOf( KindOfType kindOf ) const; ///< is any selected object a kind of
- virtual Bool isAllSelectedKindOf( KindOfType kindOf ) const; ///< are all selected objects a kind of
- virtual void setRadiusCursor(RadiusCursorType r, const SpecialPowerTemplate* sp, WeaponSlotType wslot);
- virtual void setRadiusCursorNone() { setRadiusCursor(RADIUSCURSOR_NONE, NULL, PRIMARY_WEAPON); }
- virtual void setInputEnabled( Bool enable ); ///< Set the input enabled or disabled
- virtual Bool getInputEnabled( void ) { return m_inputEnabled; } ///< Get the current input status
- virtual void disregardDrawable( Drawable *draw ); ///< Drawable is being destroyed, clean up any UI elements associated with it
- virtual void preDraw( void ); ///< Logic which needs to occur before the UI renders
- virtual void draw( void ) = 0; ///< Render the in-game user interface
- virtual void postDraw( void ); ///< Logic which needs to occur after the UI renders
- /// Ingame video playback
- virtual void playMovie( const AsciiString& movieName );
- virtual void stopMovie( void );
- virtual VideoBuffer* videoBuffer( void );
- /// Ingame cameo video playback
- virtual void playCameoMovie( const AsciiString& movieName );
- virtual void stopCameoMovie( void );
- virtual VideoBuffer* cameoVideoBuffer( void );
- // mouse over information
- virtual DrawableID getMousedOverDrawableID( void ) const; ///< Get drawble ID of drawable under cursor
-
- /// Set the ingame flag as to if we have the Quit menu up or not
- virtual void setQuitMenuVisible( Bool t ) { m_isQuitMenuVisible = t; }
- virtual Bool isQuitMenuVisible( void ) const { return m_isQuitMenuVisible; }
- // INI file parsing
- virtual const FieldParse* getFieldParse( void ) const { return s_fieldParseTable; }
- //Provides a global way to determine whether or not we can issue orders to what we have selected.
- Bool areSelectedObjectsControllable() const;
- //Wrapper function that includes any non-attack canSelectedObjectsXXX checks.
- Bool canSelectedObjectsNonAttackInteractWithObject( const Object *objectToInteractWith, SelectionRules rule ) const;
- //Wrapper function that checks a specific action.
- CanAttackResult getCanSelectedObjectsAttack( ActionType action, const Object *objectToInteractWith, SelectionRules rule, Bool additionalChecking = FALSE ) const;
- Bool canSelectedObjectsDoAction( ActionType action, const Object *objectToInteractWith, SelectionRules rule, Bool additionalChecking = FALSE ) const;
- Bool canSelectedObjectsDoSpecialPower( const CommandButton *command, const Object *objectToInteractWith, const Coord3D *position, SelectionRules rule, UnsignedInt commandOptions, Object* ignoreSelObj ) const;
- Bool canSelectedObjectsEffectivelyUseWeapon( const CommandButton *command, const Object *objectToInteractWith, const Coord3D *position, SelectionRules rule ) const;
- Bool canSelectedObjectsOverrideSpecialPowerDestination( const Coord3D *loc, SelectionRules rule, SpecialPowerType spType = SPECIAL_INVALID ) const;
- // Selection Methods
- virtual Int selectMatchingUnits(); ///< selects matching units
- virtual Int selectAcrossScreen(); ///< selects matching units across screen
- virtual Int selectAcrossMap(); ///< selects matching units across map
- virtual Int selectAcrossRegion( IRegion2D *region ); // -1 = no locally-owned selection, 0+ = # of units selected
- virtual void buildRegion( const ICoord2D *anchor, const ICoord2D *dest, IRegion2D *region ); ///< builds a region around the specified coordinates
- virtual Bool getDisplayedMaxWarning( void ) { return m_displayedMaxWarning; }
- virtual void setDisplayedMaxWarning( Bool selected ) { m_displayedMaxWarning = selected; }
- // Floating Test Methods
- virtual void addFloatingText(const UnicodeString& text,const Coord3D * pos, Color color);
- // Drawable caption stuff
- AsciiString getDrawableCaptionFontName( void ) { return m_drawableCaptionFont; }
- Int getDrawableCaptionPointSize( void ) { return m_drawableCaptionPointSize; }
- Bool isDrawableCaptionBold( void ) { return m_drawableCaptionBold; }
- Color getDrawableCaptionColor( void ) { return m_drawableCaptionColor; }
- inline Bool shouldMoveRMBScrollAnchor( void ) { return m_moveRMBScrollAnchor; }
- Bool isClientQuiet( void ) const { return m_clientQuiet; }
- Bool isInWaypointMode( void ) const { return m_waypointMode; }
- Bool isInForceAttackMode( void ) const { return m_forceAttackMode; }
- Bool isInForceMoveToMode( void ) const { return m_forceMoveToMode; }
- Bool isInPreferSelectionMode( void ) const { return m_preferSelection; }
- void setClientQuiet( Bool enabled ) { m_clientQuiet = enabled; }
- void setWaypointMode( Bool enabled ) { m_waypointMode = enabled; }
- void setForceMoveMode( Bool enabled ) { m_forceMoveToMode = enabled; }
- void setForceAttackMode( Bool enabled ) { m_forceAttackMode = enabled; }
- void setPreferSelectionMode( Bool enabled ) { m_preferSelection = enabled; }
-
- void toggleAttackMoveToMode( void ) { m_attackMoveToMode = !m_attackMoveToMode; }
- Bool isInAttackMoveToMode( void ) const { return m_attackMoveToMode; }
- void clearAttackMoveToMode( void ) { m_attackMoveToMode = FALSE; }
-
- void setCameraRotateLeft( Bool set ) { m_cameraRotatingLeft = set; }
- void setCameraRotateRight( Bool set ) { m_cameraRotatingRight = set; }
- void setCameraZoomIn( Bool set ) { m_cameraZoomingIn = set; }
- void setCameraZoomOut( Bool set ) { m_cameraZoomingOut = set; }
- Bool isCameraRotatingLeft() const { return m_cameraRotatingLeft; }
- Bool isCameraRotatingRight() const { return m_cameraRotatingRight; }
- Bool isCameraZoomingIn() const { return m_cameraZoomingIn; }
- Bool isCameraZoomingOut() const { return m_cameraZoomingOut; }
- void resetCamera();
- virtual void addIdleWorker( Object *obj );
- virtual void removeIdleWorker( Object *obj, Int playerNumber );
- virtual void selectNextIdleWorker( void );
- virtual void recreateControlBar( void );
- virtual void disableTooltipsUntil(UnsignedInt frameNum);
- virtual void clearTooltipsDisabled();
- virtual Bool areTooltipsDisabled() const;
- Bool getDrawRMBScrollAnchor() const { return m_drawRMBScrollAnchor; }
- Bool getMoveRMBScrollAnchor() const { return m_moveRMBScrollAnchor; }
- void setDrawRMBScrollAnchor(Bool b) { m_drawRMBScrollAnchor = b; }
- void setMoveRMBScrollAnchor(Bool b) { m_moveRMBScrollAnchor = b; }
- private:
- virtual Int getIdleWorkerCount( void );
- virtual Object *findIdleWorker( Object *obj);
- virtual void showIdleWorkerLayout( void );
- virtual void hideIdleWorkerLayout( void );
- virtual void updateIdleWorker( void );
- virtual void resetIdleWorker( void );
- public:
- void registerWindowLayout(WindowLayout *layout); // register a layout for updates
- void unregisterWindowLayout(WindowLayout *layout); // stop updates for this layout
- public:
- // World 2D animation methods
- void addWorldAnimation( Anim2DTemplate *animTemplate,
- const Coord3D *pos,
- WorldAnimationOptions options,
- Real durationInSeconds,
- Real zRisePerSecond );
- #if defined(_DEBUG) || defined(_INTERNAL)
- virtual void DEBUG_addFloatingText(const AsciiString& text,const Coord3D * pos, Color color);
- #endif
- protected:
- // snapshot methods
- virtual void crc( Xfer *xfer );
- virtual void xfer( Xfer *xfer );
- virtual void loadPostProcess( void );
- protected:
- // ----------------------------------------------------------------------------------------------
- // Protected Types ------------------------------------------------------------------------------
- // ----------------------------------------------------------------------------------------------
- enum HintType
- {
- MOVE_HINT = 0,
- ATTACK_HINT,
- #ifdef _DEBUG
- DEBUG_HINT,
- #endif
- NUM_HINT_TYPES // keep this one last
- };
- // mouse mode interface
- enum MouseMode
- {
- MOUSEMODE_DEFAULT = 0,
- MOUSEMODE_BUILD_PLACE,
- MOUSEMODE_GUI_COMMAND,
- MOUSEMODE_MAX
- };
- enum { MAX_MOVE_HINTS = 256 };
- struct MoveHintStruct
- {
- Coord3D pos; ///< World coords of destination point
- UnsignedInt sourceID; ///< id of who will move to this point
- UnsignedInt frame; ///< frame the command was issued on
- };
- struct UIMessage
- {
- UnicodeString fullText; ///< the whole text message
- DisplayString *displayString; ///< display string used to render the message
- UnsignedInt timestamp; ///< logic frame message was created on
- Color color; ///< color to render this in
- };
- enum { MAX_UI_MESSAGES = 6 };
- struct MilitarySubtitleData
- {
- UnicodeString subtitle; ///< The complete subtitle to be drawn, each line is separated by L"\n"
- UnsignedInt index; ///< the current index that we are at through the sibtitle
- ICoord2D position; ///< Where on the screen the subtitle should be drawn
- DisplayString *displayStrings[MAX_SUBTITLE_LINES]; ///< We'll only allow MAX_SUBTITLE_LINES worth of display strings
- UnsignedInt currentDisplayString; ///< contains the current display string we're on. (also lets us know the last display string allocated
- UnsignedInt lifetime; ///< the Lifetime of the Military Subtitle in frames
- Bool blockDrawn; ///< True if the block is drawn false if it's blank
- UnsignedInt blockBeginFrame; ///< The frame at which the block started it's current state
- ICoord2D blockPos; ///< where the upper left of the block should begin
- UnsignedInt incrementOnFrame; ///< if we're currently on a frame greater then this, increment our position
- Color color; ///< what color should we display the military subtitles
- };
- typedef std::list<Object *> ObjectList;
- typedef std::list<Object *>::iterator ObjectListIt;
-
- // ----------------------------------------------------------------------------------------------
- // Protected Methods ----------------------------------------------------------------------------
- // ----------------------------------------------------------------------------------------------
- void destroyPlacementIcons( void ); ///< Destroy placement icons
- void handleBuildPlacements( void ); ///< handle updating of placement icons based on mouse pos
- void handleRadiusCursor(); ///< handle updating of "radius cursors" that follow the mouse pos
- void incrementSelectCount( void ) { ++m_selectCount; } ///< Increase by one the running total of "selected" drawables
- void decrementSelectCount( void ) { --m_selectCount; } ///< Decrease by one the running total of "selected" drawables
- virtual View *createView( void ) = 0; ///< Factory for Views
- void evaluateSoloNexus( Drawable *newlyAddedDrawable = NULL );
- /// expire a hint from of the specified type at the hint index
- void expireHint( HintType type, UnsignedInt hintIndex );
- void createControlBar( void ); ///< create the control bar user interface
- void createReplayControl( void ); ///< create the replay control window
- void setMouseCursor(Mouse::MouseCursor c);
-
- void addMessageText( const UnicodeString& formattedMessage, const RGBColor *rgbColor = NULL ); ///< internal workhorse for adding plain text for messages
- void removeMessageAtIndex( Int i ); ///< remove the message at index i
- void updateFloatingText( void ); ///< Update function to move our floating text
- void drawFloatingText( void ); ///< Draw all our floating text
- void clearFloatingText( void ); ///< clear the floating text list
- void clearWorldAnimations( void ); ///< delete all world animations
- void updateAndDrawWorldAnimations( void ); ///< update and draw visible world animations
- SuperweaponInfo* findSWInfo(Int playerIndex, const AsciiString& powerName, ObjectID id, const SpecialPowerTemplate *powerTemplate);
- // ----------------------------------------------------------------------------------------------
- // Protected Data THAT IS SAVED/LOADED ----------------------------------------------------------
- // ----------------------------------------------------------------------------------------------
- Bool m_superweaponHiddenByScript;
- Bool m_inputEnabled; /// sort of
- // ----------------------------------------------------------------------------------------------
- // Protected Data -------------------------------------------------------------------------------
- // ----------------------------------------------------------------------------------------------
- std::list<WindowLayout *> m_windowLayouts;
- AsciiString m_currentlyPlayingMovie; ///< Used to push updates to TheScriptEngine
- DrawableList m_selectedDrawables; ///< A list of all selected drawables.
- DrawableList m_selectedLocalDrawables; ///< A list of all selected drawables owned by the local player
- Bool m_isDragSelecting; ///< If TRUE, an area selection is in progress
- IRegion2D m_dragSelectRegion; ///< if isDragSelecting is TRUE, this contains select region
- Bool m_displayedMaxWarning; ///< keeps the warning from being shown over and over
- MoveHintStruct m_moveHint[ MAX_MOVE_HINTS ];
- Int m_nextMoveHint;
- const CommandButton * m_pendingGUICommand; ///< GUI command that needs additional interaction from the user
- BuildProgress m_buildProgress[ MAX_BUILD_PROGRESS ]; ///< progress for building units
- const ThingTemplate * m_pendingPlaceType; ///< type of built thing we're trying to place
- ObjectID m_pendingPlaceSourceObjectID; ///< source object of the thing constructing the item
- Drawable ** m_placeIcon; ///< array for drawables to appear at the cursor when building in the world
- Bool m_placeAnchorInProgress; ///< is place angle interface for placement active
- ICoord2D m_placeAnchorStart; ///< place angle anchor start
- ICoord2D m_placeAnchorEnd; ///< place angle anchor end
- Int m_selectCount; ///< Number of objects currently "selected"
- Int m_maxSelectCount; ///< Max number of objects to select
- UnsignedInt m_frameSelectionChanged; ///< Frame when the selection last changed.
- // Video playback data
- VideoBuffer* m_videoBuffer; ///< video playback buffer
- VideoStreamInterface* m_videoStream; ///< Video stream;
- // Video playback data
- VideoBuffer* m_cameoVideoBuffer;///< video playback buffer
- VideoStreamInterface* m_cameoVideoStream;///< Video stream;
- // message data
- UIMessage m_uiMessages[ MAX_UI_MESSAGES ];/**< messages to display to the user, the
- array is organized with newer messages at
- index 0, and increasing to older ones */
- // superweapon timer data
- SuperweaponMap m_superweapons[MAX_PLAYER_COUNT];
- Coord2D m_superweaponPosition;
- Real m_superweaponFlashDuration;
-
- // superweapon timer font info
- AsciiString m_superweaponNormalFont;
- Int m_superweaponNormalPointSize;
- Bool m_superweaponNormalBold;
- AsciiString m_superweaponReadyFont;
- Int m_superweaponReadyPointSize;
- Bool m_superweaponReadyBold;
- Int m_superweaponLastFlashFrame; ///< for flashing the text when the weapon is ready
- Color m_superweaponFlashColor;
- Bool m_superweaponUsedFlashColor;
- NamedTimerMap m_namedTimers;
- Coord2D m_namedTimerPosition;
- Real m_namedTimerFlashDuration;
- Int m_namedTimerLastFlashFrame;
- Color m_namedTimerFlashColor;
- Bool m_namedTimerUsedFlashColor;
- Bool m_showNamedTimers;
- AsciiString m_namedTimerNormalFont;
- Int m_namedTimerNormalPointSize;
- Bool m_namedTimerNormalBold;
- Color m_namedTimerNormalColor;
- AsciiString m_namedTimerReadyFont;
- Int m_namedTimerReadyPointSize;
- Bool m_namedTimerReadyBold;
- Color m_namedTimerReadyColor;
- // Drawable caption data
- AsciiString m_drawableCaptionFont;
- Int m_drawableCaptionPointSize;
- Bool m_drawableCaptionBold;
- Color m_drawableCaptionColor;
- UnsignedInt m_tooltipsDisabledUntil;
- // Military Subtitle data
- MilitarySubtitleData * m_militarySubtitle; ///< The pointer to subtitle class, if it's present then draw it.
- Bool m_isScrolling;
- Bool m_isSelecting;
- MouseMode m_mouseMode;
- Int m_mouseModeCursor;
- DrawableID m_mousedOverDrawableID;
- Coord2D m_scrollAmt;
- Bool m_isQuitMenuVisible;
- Bool m_messagesOn;
- Color m_messageColor1;
- Color m_messageColor2;
- ICoord2D m_messagePosition;
- AsciiString m_messageFont;
- Int m_messagePointSize;
- Bool m_messageBold;
- Int m_messageDelayMS;
- RGBAColorInt m_militaryCaptionColor; ///< color for the military-style caption
- ICoord2D m_militaryCaptionPosition; ///< position for the military-style caption
- AsciiString m_militaryCaptionTitleFont;
- Int m_militaryCaptionTitlePointSize;
- Bool m_militaryCaptionTitleBold;
- AsciiString m_militaryCaptionFont;
- Int m_militaryCaptionPointSize;
- Bool m_militaryCaptionBold;
- Bool m_militaryCaptionRandomizeTyping;
- Int m_militaryCaptionDelayMS;
- Int m_militaryCaptionSpeed;
- RadiusDecalTemplate m_radiusCursors[RADIUSCURSOR_COUNT];
- RadiusDecal m_curRadiusCursor;
- RadiusCursorType m_curRcType;
- //Floating Text Data
- FloatingTextList m_floatingTextList; ///< Our list of floating text
- UnsignedInt m_floatingTextTimeOut; ///< Ini value of our floating text timeout
- Real m_floatingTextMoveUpSpeed; ///< INI value of our Move up speed
- Real m_floatingTextMoveVanishRate; ///< INI value of our move vanish rate
- PopupMessageData * m_popupMessageData;
- Color m_popupMessageColor;
-
- Bool m_waypointMode; ///< are we in waypoint plotting mode?
- Bool m_forceAttackMode; ///< are we in force attack mode?
- Bool m_forceMoveToMode; ///< are we in force move mode?
- Bool m_attackMoveToMode; ///< are we in attack move mode?
- Bool m_preferSelection; ///< the shift key has been depressed.
- Bool m_cameraRotatingLeft;
- Bool m_cameraRotatingRight;
- Bool m_cameraZoomingIn;
- Bool m_cameraZoomingOut;
-
- Bool m_drawRMBScrollAnchor;
- Bool m_moveRMBScrollAnchor;
- Bool m_clientQuiet; ///< When the user clicks exit,restart, etc. this is set true
- ///< to skip some client sounds/fx during shutdown
- // World Animation Data
- WorldAnimationList m_worldAnimationList; ///< the list of world animations
- // Idle worker animation
- ObjectList m_idleWorkers[MAX_PLAYER_COUNT];
- GameWindow * m_idleWorkerWin;
- Int m_currentIdleWorkerDisplay;
- DrawableID m_soloNexusSelectedDrawableID; ///< The drawable of the nexus, if only one angry mob is selected, otherwise, null
- // ----------------------------------------------------------------------------------------------
- // STATIC Protected Data -------------------------------------------------------------------------------
- // ----------------------------------------------------------------------------------------------
- static const FieldParse s_fieldParseTable[];
- };
- // the singleton
- extern InGameUI *TheInGameUI;
- #endif // _IN_GAME_UI_H_
|