gzdoom/src/g_shared/sbar.h

259 lines
7.5 KiB
C
Raw Normal View History

/*
** sbar.h
** Base status bar definition
**
**---------------------------------------------------------------------------
** Copyright 1998-2005 Randy Heit
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
*/
#include "dobject.h"
#include "m_fixed.h"
#include "v_collection.h"
#include "v_text.h"
struct patch_t;
class player_s;
extern int SB_state;
enum EHudState
{
HUD_StatusBar,
HUD_Fullscreen,
HUD_None
};
class AWeapon;
class DHUDMessage : public DObject
{
DECLARE_CLASS (DHUDMessage, DObject)
public:
DHUDMessage (const char *text, float x, float y, int hudwidth, int hudheight,
EColorRange textColor, float holdTime);
virtual ~DHUDMessage ();
virtual void Serialize (FArchive &arc);
void Draw (int bottom);
virtual void ResetText (const char *text);
virtual void DrawSetup ();
virtual void DoDraw (int linenum, int x, int y, bool clean, int hudheight);
virtual bool Tick (); // Returns true to indicate time for removal
virtual void ScreenSizeChanged ();
protected:
brokenlines_t *Lines;
int Width, Height, NumLines;
float Left, Top;
bool CenterX;
int HoldTics;
int Tics;
int State;
int HUDWidth, HUDHeight;
EColorRange TextColor;
FFont *Font;
DHUDMessage () : SourceText(NULL) {}
private:
DHUDMessage *Next;
DWORD SBarID;
char *SourceText;
friend class FBaseStatusBar;
};
class DHUDMessageFadeOut : public DHUDMessage
{
DECLARE_CLASS (DHUDMessageFadeOut, DHUDMessage)
public:
DHUDMessageFadeOut (const char *text, float x, float y, int hudwidth, int hudheight,
EColorRange textColor, float holdTime, float fadeOutTime);
virtual void Serialize (FArchive &arc);
virtual void DoDraw (int linenum, int x, int y, bool clean, int hudheight);
virtual bool Tick ();
protected:
int FadeOutTics;
DHUDMessageFadeOut() {}
};
class DHUDMessageFadeInOut : public DHUDMessageFadeOut
{
DECLARE_CLASS (DHUDMessageFadeInOut, DHUDMessageFadeOut)
public:
DHUDMessageFadeInOut (const char *text, float x, float y, int hudwidth, int hudheight,
EColorRange textColor, float holdTime, float fadeInTime, float fadeOutTime);
virtual void Serialize (FArchive &arc);
virtual void DoDraw (int linenum, int x, int y, bool clean, int hudheight);
virtual bool Tick ();
protected:
int FadeInTics;
DHUDMessageFadeInOut() {}
};
class DHUDMessageTypeOnFadeOut : public DHUDMessageFadeOut
{
DECLARE_CLASS (DHUDMessageTypeOnFadeOut, DHUDMessageFadeOut)
public:
DHUDMessageTypeOnFadeOut (const char *text, float x, float y, int hudwidth, int hudheight,
EColorRange textColor, float typeTime, float holdTime, float fadeOutTime);
virtual void Serialize (FArchive &arc);
virtual void DoDraw (int linenum, int x, int y, bool clean, int hudheight);
virtual bool Tick ();
virtual void ScreenSizeChanged ();
protected:
float TypeOnTime;
int CurrLine;
int LineVisible;
int LineLen;
DHUDMessageTypeOnFadeOut() {}
};
class FTexture;
class AAmmo;
class FBaseStatusBar
{
public:
// Popup screens for Strife's status bar
enum
{
POP_NoChange = -1,
POP_None,
POP_Log,
POP_Keys,
POP_Status
};
FBaseStatusBar (int reltop);
virtual ~FBaseStatusBar ();
void SetScaled (bool scale);
void AttachMessage (DHUDMessage *msg, DWORD id=0);
DHUDMessage *DetachMessage (DHUDMessage *msg);
DHUDMessage *DetachMessage (DWORD id);
void DetachAllMessages ();
bool CheckMessage (DHUDMessage *msg);
void ShowPlayerName ();
fixed_t GetDisplacement () { return Displacement; }
int GetPlayer ();
virtual void Serialize (FArchive &arc);
virtual void Tick ();
virtual void Draw (EHudState state);
void DrawTopStuff (EHudState state);
virtual void FlashItem (const TypeInfo *itemtype);
virtual void AttachToPlayer (player_s *player);
virtual void FlashCrosshair ();
virtual void BlendView (float blend[4]);
virtual void SetFace (void *); // Takes a FPlayerSkin as input
virtual void NewGame ();
virtual void ScreenSizeChanged ();
virtual void MultiplayerChanged ();
virtual void SetInteger (int pname, int param);
virtual void ShowPop (int popnum);
virtual void ReceivedWeapon (AWeapon *weapon);
protected:
void DrawPowerups ();
void UpdateRect (int x, int y, int width, int height) const;
void DrawImage (FTexture *image, int x, int y, byte *translation=NULL) const;
void DrawFadedImage (FTexture *image, int x, int y, fixed_t shade) const;
void DrawPartialImage (FTexture *image, int wx, int ww) const;
void DrINumber (signed int val, int x, int y, int imgBase=imgINumbers) const;
void DrBNumber (signed int val, int x, int y, int w=3) const;
void DrSmallNumber (int val, int x, int y) const;
void DrINumberOuter (signed int val, int x, int y, bool center=false, int w=9) const;
void DrBNumberOuter (signed int val, int x, int y, int w=3) const;
void DrBNumberOuterFont (signed int val, int x, int y, int w=3) const;
void DrSmallNumberOuter (int val, int x, int y, bool center) const;
void DrawCrosshair ();
void RefreshBackground () const;
void GetCurrentAmmo (AAmmo *&ammo1, AAmmo *&ammo2, int &ammocount1, int &ammocount2) const;
AInventory *ValidateInvFirst (int numVisible) const;
static void AddBlend (float r, float g, float b, float a, float v_blend[4]);
int ST_X, ST_Y;
int RelTop;
bool Scaled;
bool Centering;
bool FixedOrigin;
fixed_t CrosshairSize;
fixed_t Displacement;
enum
{
imgLAME = 0,
imgNEGATIVE = 1,
imgINumbers = 2,
imgBNEGATIVE = 12,
imgBNumbers = 13,
imgSmNumbers = 23,
NUM_BASESB_IMAGES = 33
};
FImageCollection Images;
player_s *CPlayer;
private:
bool RepositionCoords (int &x, int &y, int xo, int yo, const int w, const int h) const;
void DrawMessages (int bottom) const;
void DrawConsistancy () const;
static byte DamageToAlpha[114];
DHUDMessage *Messages;
};
extern FBaseStatusBar *StatusBar;
FBaseStatusBar *CreateDoomStatusBar ();
FBaseStatusBar *CreateHereticStatusBar ();
FBaseStatusBar *CreateHexenStatusBar ();
FBaseStatusBar *CreateStrifeStatusBar ();