379 lines
14 KiB
C++
379 lines
14 KiB
C++
/*
|
|
This file is part of Warzone 2100.
|
|
Copyright (C) 1999-2004 Eidos Interactive
|
|
Copyright (C) 2005-2013 Warzone 2100 Project
|
|
|
|
Warzone 2100 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 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
Warzone 2100 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 Warzone 2100; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
/** @file
|
|
* Function definitions for the in game interface code.
|
|
*/
|
|
|
|
#ifndef __INCLUDED_SRC_HCI_H__
|
|
#define __INCLUDED_SRC_HCI_H__
|
|
|
|
#include <list>
|
|
|
|
#include "lib/ivis_opengl/pieclip.h"
|
|
#include "lib/widget/widget.h"
|
|
|
|
#include "message.h"
|
|
|
|
|
|
#define BASE_COORDS_X (640)
|
|
#define BASE_COORDS_Y (480)
|
|
#define E_W (pie_GetVideoBufferWidth() - BASE_COORDS_X)
|
|
#define E_H (pie_GetVideoBufferHeight() - BASE_COORDS_Y)
|
|
#define D_W ((pie_GetVideoBufferWidth() - BASE_COORDS_X)/2)
|
|
#define D_H ((pie_GetVideoBufferHeight() - BASE_COORDS_Y)/2)
|
|
|
|
|
|
#define IDRET_FORM 1 // The reticule form
|
|
#define IDRET_OPTIONS 2 // option button
|
|
#define IDRET_BUILD 3 // build button
|
|
#define IDRET_MANUFACTURE 4 // manufacture button
|
|
#define IDRET_RESEARCH 5 // research button
|
|
#define IDRET_INTEL_MAP 6 // intelligence map button
|
|
#define IDRET_DESIGN 7 // design droids button
|
|
#define IDRET_CANCEL 8 // central cancel button
|
|
#define IDRET_COMMAND 9 // command droid button
|
|
#define IDRET_TRANSPORTER 10 // transporter button
|
|
#define IDPOW_POWERBAR_T 102 // power bar - trough
|
|
#define IDTRANTIMER_BUTTON 11012 //transporter button on timer display
|
|
|
|
|
|
/* Object screen IDs */
|
|
|
|
#define IDOBJ_FORM 3000 // The object back form for build/manufacture/research
|
|
#define IDOBJ_CLOSE 3001 // The form for the close button
|
|
#define IDOBJ_OBJSTART 3002 // The first ID for droids/factories/research
|
|
#define IDOBJ_OBJEND 3099 // The last ID for droids/factories/research
|
|
#define IDOBJ_STATSTART 3100 // The first ID for stats
|
|
#define IDOBJ_STATEND 3199 // The last ID for stats
|
|
#define IDOBJ_PROGBARSTART 3200 // The first ID for stats progress bars.
|
|
#define IDOBJ_PROGBAREND 3299 // The last ID for stats progress bars.
|
|
#define IDOBJ_POWERBARSTART 3300 // The first ID for power bars.
|
|
#define IDOBJ_POWERBAREND 3399 // The first ID for power bars.
|
|
#define IDOBJ_COUNTSTART 3400 // The first ID for progress number labels.
|
|
#define IDOBJ_COUNTEND 3499 // The last ID for progress number labels.
|
|
#define IDOBJ_TABFORM 3500 // The object tab form for build/manufacture/research
|
|
#define IDOBJ_FACTORYSTART 3600 // The first ID for factory number labels
|
|
#define IDOBJ_FACTORYEND 3699 // The last ID for factory number labels
|
|
#define IDOBJ_CMDEXPSTART 3700 // The first ID for factory number labels
|
|
#define IDOBJ_CMDEXPEND 3749 // The last ID for factory number labels
|
|
#define IDOBJ_CMDFACSTART 3750 // The first ID for factory number labels
|
|
#define IDOBJ_CMDFACEND 3799 // The last ID for factory number labels
|
|
#define IDOBJ_CMDVTOLFACSTART 3800 // The first ID for VTOL factory number labels
|
|
#define IDOBJ_CMDVTOLFACEND 3849 // The last ID for VTOL factory number labels
|
|
#define IDOBJ_ALLYRESEARCHSTART 2637000 // The first ID for ally research labels
|
|
#define IDOBJ_ALLYRESEARCHEND 2637099 // The last ID for ally research labels
|
|
|
|
|
|
#define IDSTAT_FORM 14000 // The stats form for structure/droid/research type
|
|
#define IDSTAT_CLOSE 14003 // The stats close box
|
|
#define IDSTAT_TABFORM 14004 // The tab form with the stats buttons
|
|
#define IDSTAT_START 14100 // The first stats ID
|
|
#define IDSTAT_END 14999 // The last stats ID enough for 899 things
|
|
#define IDSTAT_TIMEBARSTART 16205000
|
|
#define IDSTAT_TIMEBAREND 16205999
|
|
#define IDSTAT_SLIDER 4400
|
|
#define IDSTAT_LOOP_BUTTON 4403
|
|
#define IDSTAT_LOOP_LABEL 4404
|
|
#define IDSTAT_DP_BUTTON 4405
|
|
#define IDSTAT_OBSOLETE_BUTTON 4406
|
|
#define IDSTAT_RESICONSTART 4500
|
|
#define IDSTAT_RESICONEND 4599
|
|
#define IDSTAT_PRODSTART 4600
|
|
#define IDSTAT_PRODEND 4699
|
|
|
|
#define IDSTAT_ALLYSTART 4800
|
|
#define IDSTAT_ALLYEND 5100
|
|
|
|
// Reticule position.
|
|
#define RET_X 24
|
|
#define RET_Y (324+E_H)
|
|
#define RET_FORMWIDTH 132
|
|
#define RET_FORMHEIGHT 132
|
|
|
|
/* Option positions */
|
|
#define OPT_GAP 5
|
|
|
|
// Object screen position.
|
|
#define BASE_GAP 6
|
|
#define OBJ_BACKX (RET_X + RET_FORMWIDTH + BASE_GAP + D_W) // X coord of object screen back form.
|
|
#define OBJ_BACKY RET_Y // Y coord of object screen back form.
|
|
#define OBJ_BACKWIDTH 320 //316 // Width of object screen back form.
|
|
#define OBJ_BACKHEIGHT 115 // Height of object screen back form.
|
|
|
|
/* Build screen positions */
|
|
#define OBJ_TABX 2 // X coord of object screen tab form.
|
|
#define OBJ_TABY 6 // Y coord of object screen tab form.
|
|
#define OBJ_WIDTH 316 //312//310 // Width of object screen tab form.
|
|
#define OBJ_HEIGHT 112 // Height of object screen tab form.
|
|
#define OBJ_GAP 2 // Gap between buttons.
|
|
#define OBJ_STARTX 2 // Offset of first obj button from left of tab form.
|
|
#define OBJ_STARTY 42 //44 // Offset of first obj button from top of tab form.
|
|
#define OBJ_STATSTARTY 0
|
|
|
|
//slider bar positions
|
|
|
|
#define STAT_SLDX 8 // Slider x.
|
|
#define STAT_SLDY 4 // Slider y.
|
|
|
|
#define STAT_SLDWIDTH 70 // Slider width.
|
|
|
|
// Power bar position.
|
|
#define POW_X OBJ_BACKX + 12
|
|
#define POW_Y (OBJ_BACKY + OBJ_BACKHEIGHT + 6)
|
|
#define POW_BARWIDTH 308
|
|
|
|
/* close button data */
|
|
#define CLOSE_WIDTH 15
|
|
#define CLOSE_HEIGHT 15
|
|
#define CLOSE_SIZE 15
|
|
|
|
// Stat screen position.
|
|
#define STAT_X 23
|
|
#define STAT_Y (45 + E_H)
|
|
#define STAT_WIDTH RET_FORMWIDTH // Width of the tab form.
|
|
#define STAT_HEIGHT 273 // Height of the tab form.
|
|
#define STAT_TABWIDTH 15
|
|
#define STAT_TABFORMX 0 // Offset of the tab form within the main form.
|
|
#define STAT_TABFORMY 18 // Offset of the tab form within the main form.
|
|
|
|
|
|
// 2 16 bit values packed into a DWORD.
|
|
#define PACKDWORD(a,b) ( ( (a)<<16 ) | (b) )
|
|
#define UNPACKDWORD_HI(a) ( (a)>>16 )
|
|
#define UNPACKDWORD_LOW(a) ( (a) & 0xffff)
|
|
|
|
// 3 10 bit values packed into a DWORD.
|
|
#define PACKDWORD_TRI(a,b,c) ( (((a) & 0x3ff) << 20) | (((b) & 0x3ff) << 10) | ((c) & 0x3ff) )
|
|
#define UNPACKDWORD_TRI_A(a) ( ((a)>>20) & 0x3ff )
|
|
#define UNPACKDWORD_TRI_B(a) ( ((a)>>10) & 0x3ff )
|
|
#define UNPACKDWORD_TRI_C(a) ( (a) & 0x3ff)
|
|
|
|
#define POWERPOINTS_DROIDDIV 5
|
|
|
|
#define OBJ_BUTWIDTH 60 // Button width.
|
|
#define OBJ_BUTHEIGHT 46 // Button height.
|
|
|
|
#define OBJ_TEXTX 2
|
|
|
|
#define OBJ_T1TEXTY 2
|
|
#define OBJ_T2TEXTY 14
|
|
#define OBJ_T3TEXTY 26
|
|
#define OBJ_B1TEXTY 8
|
|
|
|
#define STAT_SLD_OX (0) // Stat window slider offset.
|
|
#define STAT_SLD_OY (0)
|
|
#define STAT_SLDSTOPS 10 // Slider number of stops.
|
|
|
|
#define STAT_PROGBARX 3
|
|
#define STAT_PROGBARY 36
|
|
#define STAT_PROGBARWIDTH (OBJ_BUTWIDTH-8)
|
|
#define STAT_PROGBARHEIGHT 4
|
|
#define STAT_TIMEBARX 3
|
|
#define STAT_TIMEBARY (OBJ_BUTHEIGHT-STAT_PROGBARHEIGHT-3)
|
|
#define STAT_POWERBARX 3
|
|
#define STAT_POWERBARY (OBJ_BUTHEIGHT-STAT_PROGBARHEIGHT-6)
|
|
|
|
/* maximum array sizes */
|
|
#define MAXSTRUCTURES 200 //bumped up from 80. NOTE: was used for max # in build menus.
|
|
#define MAXRESEARCH 200 //was 80 topic displayed " "
|
|
#define MAXFEATURES 80
|
|
#define MAXCOMPONENT 200
|
|
#define MAXEXTRASYS 80
|
|
|
|
enum INTMODE
|
|
{
|
|
INT_NORMAL, // Standard mode (just the reticule)
|
|
|
|
INT_OPTION, // Option screen
|
|
INT_EDIT, // Edit mode
|
|
|
|
INT_EDITSTAT, // Stat screen up for placing objects
|
|
INT_OBJECT, // Object screen
|
|
INT_STAT, // Object screen with stat screen
|
|
INT_CMDORDER, // Object screen with command droids and orders screen
|
|
INT_DESIGN, // Design screen
|
|
INT_INTELMAP, // Intelligence Map
|
|
INT_ORDER,
|
|
INT_INGAMEOP, // in game options.
|
|
INT_TRANSPORTER, //Loading/unloading a Transporter
|
|
INT_MISSIONRES, // Results of a mission display.
|
|
INT_MULTIMENU, // multiplayer only, player stats etc...
|
|
INT_CDCHANGE, // CD Change message box
|
|
INT_POPUPMSG, // Adds a popup message to user
|
|
|
|
INT_MAXMODE, //leave as last so we can start the objMode at this value
|
|
};
|
|
|
|
extern INTMODE intMode;
|
|
|
|
/* The widget screen */
|
|
extern W_SCREEN *psWScreen;
|
|
|
|
// The last widget ID from widgRunScreen
|
|
extern UDWORD intLastWidget;
|
|
|
|
/* The button ID of the objects stat when the stat screen is displayed */
|
|
extern UDWORD objStatID;
|
|
|
|
/* The current template for the design screen to start with*/
|
|
extern std::vector<DROID_TEMPLATE *> apsTemplateList; ///< Either a list of templates a factory can build or a list of designable templates, for UI use only.
|
|
extern std::list<DROID_TEMPLATE> localTemplates; ///< Unsychnronised list, for UI use only.
|
|
|
|
/* pointer to hold the imd to use for a new template in the design screen */
|
|
extern iIMDShape *pNewDesignIMD;
|
|
|
|
/* Initialise the in game interface */
|
|
extern bool intInitialise(void);
|
|
|
|
// Check of coordinate is in the build menu
|
|
extern bool CoordInBuild(int x, int y);
|
|
|
|
/* Shut down the in game interface */
|
|
extern void interfaceShutDown(void);
|
|
|
|
/* Return codes for the widget interface */
|
|
enum INT_RETVAL
|
|
{
|
|
INT_NONE, // no key clicks have been intercepted
|
|
INT_INTERCEPT, // key clicks have been intercepted
|
|
INT_QUIT, // The game should quit
|
|
};
|
|
|
|
/* Run the widgets for the in game interface */
|
|
extern INT_RETVAL intRunWidgets(void);
|
|
|
|
/* Display the widgets for the in game interface */
|
|
extern void intDisplayWidgets(void);
|
|
|
|
/* Add the reticule widgets to the widget screen */
|
|
bool intAddReticule();
|
|
bool intAddPower();
|
|
void intRemoveReticule();
|
|
void setReticuleStats(int ButId, QString tip, QString filename, QString filenameDown);
|
|
|
|
/* Set the map view point to the world coordinates x,y */
|
|
extern void intSetMapPos(UDWORD x, UDWORD y);
|
|
|
|
/* Set the map view point to the world coordinates x,y */
|
|
extern void intSetMapPos(UDWORD x, UDWORD y);
|
|
|
|
/* Tell the interface when an object is created
|
|
* - it may have to be added to a screen
|
|
*/
|
|
extern void intNewObj(BASE_OBJECT *psObj);
|
|
|
|
/* Tell the interface a construction droid has finished building */
|
|
extern void intBuildFinished(DROID *psDroid);
|
|
/* Tell the interface a construction droid has started building*/
|
|
extern void intBuildStarted(DROID *psDroid);
|
|
/* Tell the interface a research facility has completed a topic */
|
|
extern void intResearchFinished(STRUCTURE *psBuilding);
|
|
void intAlliedResearchChanged();
|
|
/* Tell the interface a factory has completed building ALL droids */
|
|
extern void intManufactureFinished(STRUCTURE *psBuilding);
|
|
extern void intUpdateManufacture(STRUCTURE *psBuilding);
|
|
|
|
/* Sync the interface to an object */
|
|
extern void intObjectSelected(BASE_OBJECT *psObj);
|
|
|
|
// add the construction interface if a constructor droid is selected
|
|
extern void intConstructorSelected(DROID *psDroid);
|
|
extern bool intBuildSelectMode(void);
|
|
extern bool intDemolishSelectMode(void);
|
|
extern bool intBuildMode(void);
|
|
|
|
// add the construction interface if a constructor droid is selected
|
|
void intCommanderSelected(DROID *psDroid);
|
|
|
|
//sets up the Intelligence Screen as far as the interface is concerned
|
|
extern void addIntelScreen(void);
|
|
|
|
/* Reset the widget screen to just the reticule */
|
|
extern void intResetScreen(bool NoAnim);
|
|
|
|
/* Refresh icons on the interface, without disturbing the layout. i.e. smartreset*/
|
|
extern void intRefreshScreen(void);
|
|
|
|
/* Add the options widgets to the widget screen */
|
|
extern bool intAddOptions(void);
|
|
|
|
/* Remove the stats widgets from the widget screen */
|
|
extern void intRemoveStats(void);
|
|
|
|
/* Remove the stats widgets from the widget screen */
|
|
extern void intRemoveStatsNoAnim(void);
|
|
|
|
/*sets which list of structures to use for the interface*/
|
|
extern STRUCTURE *interfaceStructList(void);
|
|
|
|
//sets up the Transporter Screen as far as the interface is concerned
|
|
extern void addTransporterInterface(DROID *psSelected, bool onMission);
|
|
|
|
/*causes a reticule button to start flashing*/
|
|
extern void flashReticuleButton(UDWORD buttonID);
|
|
|
|
// stop a reticule button flashing
|
|
extern void stopReticuleButtonFlash(UDWORD buttonID);
|
|
|
|
//toggles the Power Bar display on and off
|
|
void togglePowerBar();
|
|
void intShowPowerBar();
|
|
void intHidePowerBar();
|
|
|
|
//hides the power bar from the display - regardless of what player requested!
|
|
extern void forceHidePowerBar(void);
|
|
|
|
/* Add the Proximity message buttons */
|
|
extern bool intAddProximityButton(PROXIMITY_DISPLAY *psProxDisp, UDWORD inc);
|
|
|
|
/*Remove a Proximity Button - when the message is deleted*/
|
|
extern void intRemoveProximityButton(PROXIMITY_DISPLAY *psProxDisp);
|
|
|
|
/* Allows us to fool the widgets with a keypress */
|
|
void setKeyButtonMapping(UDWORD val);
|
|
|
|
STRUCTURE *intFindAStructure(void);
|
|
STRUCTURE *intGotoNextStructureType(UDWORD structType, bool JumpTo, bool CancelDrive);
|
|
DROID *intGotoNextDroidType(DROID *CurrDroid, DROID_TYPE droidType, bool AllowGroup);
|
|
|
|
/// Returns the number of researches that selectedPlayer is not already researching, or 0 if there are no free laboratories.
|
|
int intGetResearchState();
|
|
|
|
/// Flashes the button if the research button should flash, and more researches are available to research than before.
|
|
/// Stops the button from flashing, if the research button shouldn't flash, and prevState is non-zero.
|
|
void intNotifyResearchButton(int prevState);
|
|
|
|
// see if a reticule button is enabled
|
|
extern bool intCheckReticuleButEnabled(UDWORD id);
|
|
|
|
//access function for selected object in the interface
|
|
extern BASE_OBJECT *getCurrentSelected(void);
|
|
|
|
//initialise all the previous obj - particularly useful for when go Off world!
|
|
extern void intResetPreviousObj(void);
|
|
|
|
extern bool intIsRefreshing(void);
|
|
|
|
extern void intDemolishCancel(void);
|
|
|
|
StateButton *makeObsoleteButton(WIDGET *parent); ///< Makes a button to toggle showing obsolete items.
|
|
|
|
#endif // __INCLUDED_SRC_HCI_H__
|