2019-05-22 18:28:53 +00:00
|
|
|
#pragma once
|
|
|
|
|
2021-01-23 22:13:40 +00:00
|
|
|
#include "Sprite2d.h"
|
|
|
|
|
2020-10-11 07:33:02 +00:00
|
|
|
void AsciiToUnicode(const char *src, wchar *dst);
|
|
|
|
void UnicodeStrcpy(wchar *dst, const wchar *src);
|
|
|
|
void UnicodeStrcat(wchar *dst, wchar *append);
|
|
|
|
int UnicodeStrlen(const wchar *str);
|
2020-10-11 07:39:04 +00:00
|
|
|
void UnicodeMakeUpperCase(wchar *dst, const wchar *src);
|
2020-10-11 07:33:02 +00:00
|
|
|
|
2019-05-22 18:28:53 +00:00
|
|
|
struct CFontDetails
|
|
|
|
{
|
|
|
|
CRGBA color;
|
|
|
|
float scaleX;
|
|
|
|
float scaleY;
|
|
|
|
float slant;
|
|
|
|
float slantRefX;
|
|
|
|
float slantRefY;
|
2021-01-18 12:55:48 +00:00
|
|
|
bool8 justify;
|
|
|
|
bool8 centre;
|
|
|
|
bool8 rightJustify;
|
|
|
|
bool8 background;
|
|
|
|
bool8 backgroundOnlyText;
|
|
|
|
bool8 proportional;
|
|
|
|
bool8 bIsShadow;
|
|
|
|
bool8 bFlash;
|
|
|
|
bool8 bBold;
|
2019-05-22 18:28:53 +00:00
|
|
|
float alphaFade;
|
|
|
|
CRGBA backgroundColor;
|
|
|
|
float wrapX;
|
|
|
|
float centreSize;
|
|
|
|
float rightJustifyWrap;
|
|
|
|
int16 style;
|
2021-01-18 12:55:48 +00:00
|
|
|
bool8 bFontHalfTexture;
|
2020-06-07 01:11:10 +00:00
|
|
|
uint32 bank;
|
2019-05-22 18:28:53 +00:00
|
|
|
int16 dropShadowPosition;
|
|
|
|
CRGBA dropColor;
|
2021-01-18 12:55:48 +00:00
|
|
|
bool8 bFlashState;
|
2020-06-07 01:11:10 +00:00
|
|
|
int nFlashTimer;
|
2021-01-18 12:55:48 +00:00
|
|
|
bool8 anonymous_23;
|
2020-06-07 01:11:10 +00:00
|
|
|
uint32 anonymous_25;
|
2021-01-16 14:55:26 +00:00
|
|
|
CRGBA outlineColor;
|
2021-01-19 01:24:02 +00:00
|
|
|
int bOutlineOn;
|
|
|
|
int line;
|
2020-06-07 01:11:10 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct CFontRenderState
|
|
|
|
{
|
|
|
|
uint32 anonymous_0;
|
|
|
|
float fTextPosX;
|
|
|
|
float fTextPosY;
|
2020-06-07 07:36:37 +00:00
|
|
|
float scaleX;
|
|
|
|
float scaleY;
|
2020-06-07 01:11:10 +00:00
|
|
|
CRGBA color;
|
|
|
|
float fExtraSpace;
|
2020-06-07 07:36:37 +00:00
|
|
|
float slant;
|
|
|
|
float slantRefX;
|
|
|
|
float slantRefY;
|
2021-01-16 14:06:11 +00:00
|
|
|
bool8 bIsShadow;
|
|
|
|
bool8 bFontHalfTexture;
|
|
|
|
bool8 proportional;
|
|
|
|
bool8 anonymous_14;
|
2020-06-07 07:36:37 +00:00
|
|
|
int16 style;
|
2021-01-20 16:11:10 +00:00
|
|
|
int bOutlineOn;
|
|
|
|
int line;
|
|
|
|
bool8 rightJustify;
|
2019-05-22 18:28:53 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class CSprite2d;
|
|
|
|
|
2019-05-30 22:32:50 +00:00
|
|
|
enum {
|
2019-05-30 22:37:14 +00:00
|
|
|
FONT_BANK,
|
2020-06-07 01:20:02 +00:00
|
|
|
FONT_STANDARD,
|
2019-05-30 22:37:14 +00:00
|
|
|
FONT_HEADING,
|
2021-01-16 14:55:26 +00:00
|
|
|
MAX_FONTS
|
2019-05-30 22:32:50 +00:00
|
|
|
};
|
|
|
|
|
2019-06-25 00:34:29 +00:00
|
|
|
enum {
|
|
|
|
ALIGN_LEFT,
|
|
|
|
ALIGN_CENTER,
|
|
|
|
ALIGN_RIGHT,
|
|
|
|
};
|
|
|
|
|
2020-03-29 06:35:13 +00:00
|
|
|
#ifdef MORE_LANGUAGES
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
FONT_LANGSET_EFIGS,
|
2020-03-31 05:38:22 +00:00
|
|
|
FONT_LANGSET_RUSSIAN,
|
2020-04-19 19:32:59 +00:00
|
|
|
FONT_LANGSET_POLISH,
|
2020-04-26 20:49:24 +00:00
|
|
|
FONT_LANGSET_JAPANESE,
|
2020-04-19 19:32:59 +00:00
|
|
|
LANGSET_MAX
|
2020-03-29 06:35:13 +00:00
|
|
|
};
|
|
|
|
|
2020-04-26 20:49:24 +00:00
|
|
|
#define FONT_LOCALE(style) (CFont::IsJapanese() ? FONT_JAPANESE : style)
|
|
|
|
#else
|
|
|
|
#define FONT_LOCALE(style) (style)
|
|
|
|
#endif
|
2020-03-31 05:38:22 +00:00
|
|
|
|
2020-11-05 15:05:16 +00:00
|
|
|
#ifdef BUTTON_ICONS
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
BUTTON_NONE = -1,
|
|
|
|
BUTTON_UP,
|
|
|
|
BUTTON_DOWN,
|
|
|
|
BUTTON_LEFT,
|
|
|
|
BUTTON_RIGHT,
|
|
|
|
BUTTON_CROSS,
|
|
|
|
BUTTON_CIRCLE,
|
|
|
|
BUTTON_SQUARE,
|
|
|
|
BUTTON_TRIANGLE,
|
|
|
|
BUTTON_L1,
|
|
|
|
BUTTON_L2,
|
|
|
|
BUTTON_L3,
|
|
|
|
BUTTON_R1,
|
|
|
|
BUTTON_R2,
|
|
|
|
BUTTON_R3,
|
2021-02-10 06:57:51 +00:00
|
|
|
BUTTON_RSTICK_UP,
|
|
|
|
BUTTON_RSTICK_DOWN,
|
2021-01-02 10:50:28 +00:00
|
|
|
BUTTON_RSTICK_LEFT,
|
|
|
|
BUTTON_RSTICK_RIGHT,
|
2020-11-05 15:05:16 +00:00
|
|
|
MAX_BUTTON_ICONS
|
|
|
|
};
|
|
|
|
#endif // BUTTON_ICONS
|
|
|
|
|
|
|
|
|
2019-05-22 18:28:53 +00:00
|
|
|
class CFont
|
|
|
|
{
|
2020-03-29 06:35:13 +00:00
|
|
|
#ifdef MORE_LANGUAGES
|
2020-04-19 19:32:59 +00:00
|
|
|
static int16 Size[LANGSET_MAX][MAX_FONTS][193];
|
2020-03-29 06:35:13 +00:00
|
|
|
static uint8 LanguageSet;
|
|
|
|
static int32 Slot;
|
|
|
|
#else
|
2021-01-16 14:55:26 +00:00
|
|
|
static int16 Size[MAX_FONTS][419];
|
2020-03-29 06:35:13 +00:00
|
|
|
#endif
|
2021-01-18 13:01:17 +00:00
|
|
|
static bool16 NewLine;
|
2019-05-22 18:28:53 +00:00
|
|
|
public:
|
2020-05-23 23:59:30 +00:00
|
|
|
static CSprite2d Sprite[MAX_FONTS];
|
2020-04-17 05:54:14 +00:00
|
|
|
static CFontDetails Details;
|
2020-06-07 01:11:10 +00:00
|
|
|
static CFontRenderState RenderState;
|
2020-01-07 14:23:09 +00:00
|
|
|
|
2020-11-05 15:05:16 +00:00
|
|
|
#ifdef BUTTON_ICONS
|
2020-11-07 18:54:38 +00:00
|
|
|
static int32 ButtonsSlot;
|
2020-11-05 15:05:16 +00:00
|
|
|
static CSprite2d ButtonSprite[MAX_BUTTON_ICONS];
|
|
|
|
static int PS2Symbol;
|
2021-02-10 06:57:51 +00:00
|
|
|
|
|
|
|
static void LoadButtons(const char *txdPath);
|
2020-11-05 15:05:16 +00:00
|
|
|
static void DrawButton(float x, float y);
|
|
|
|
#endif // BUTTON_ICONS
|
|
|
|
|
|
|
|
|
2019-05-22 18:28:53 +00:00
|
|
|
static void Initialise(void);
|
|
|
|
static void Shutdown(void);
|
|
|
|
static void InitPerFrame(void);
|
2020-04-02 06:51:35 +00:00
|
|
|
static void PrintChar(float x, float y, wchar c);
|
|
|
|
static void PrintString(float x, float y, wchar *s);
|
2020-11-18 23:09:04 +00:00
|
|
|
#ifdef XBOX_SUBTITLES
|
|
|
|
static void PrintOutlinedString(float x, float y, wchar *str, float outlineStrength, bool fromBottom, CRGBA outlineColor);
|
|
|
|
#endif
|
2020-04-02 06:51:35 +00:00
|
|
|
static int GetNumberLines(float xstart, float ystart, wchar *s);
|
|
|
|
static void GetTextRect(CRect *rect, float xstart, float ystart, wchar *s);
|
2020-03-31 05:38:22 +00:00
|
|
|
#ifdef MORE_LANGUAGES
|
|
|
|
static bool PrintString(float x, float y, wchar *start, wchar* &end, float spwidth, float japX);
|
|
|
|
#else
|
2020-06-07 07:36:37 +00:00
|
|
|
static void PrintString(float x, float y, uint32, wchar *start, wchar *end, float spwidth);
|
2020-03-31 05:38:22 +00:00
|
|
|
#endif
|
2020-06-07 07:36:37 +00:00
|
|
|
static void PrintStringFromBottom(float x, float y, wchar *str);
|
2021-01-20 16:11:10 +00:00
|
|
|
static float GetCharacterWidth(wchar c, bool forceProportional = false);
|
2020-04-02 06:51:35 +00:00
|
|
|
static float GetCharacterSize(wchar c);
|
|
|
|
static float GetStringWidth(wchar *s, bool spaces = false);
|
2020-04-26 20:49:24 +00:00
|
|
|
#ifdef MORE_LANGUAGES
|
|
|
|
static float GetStringWidth_Jap(wchar* s);
|
|
|
|
#endif
|
2020-03-31 05:38:22 +00:00
|
|
|
static uint16 *GetNextSpace(wchar *s);
|
|
|
|
#ifdef MORE_LANGUAGES
|
2020-06-07 02:12:01 +00:00
|
|
|
static uint16 *ParseToken(wchar *s, bool japShit = false);
|
2020-03-31 05:38:22 +00:00
|
|
|
#else
|
2020-06-07 02:12:01 +00:00
|
|
|
static uint16 *ParseToken(wchar *s);
|
2021-01-16 14:06:11 +00:00
|
|
|
static uint16 *ParseToken(wchar *s, CRGBA &color, bool &flash, bool &bold);
|
2020-03-31 05:38:22 +00:00
|
|
|
#endif
|
2019-05-22 18:28:53 +00:00
|
|
|
static void DrawFonts(void);
|
2020-06-07 01:11:10 +00:00
|
|
|
static void RenderFontBuffer(void);
|
2020-03-31 05:38:22 +00:00
|
|
|
static uint16 character_code(uint8 c);
|
2019-05-22 18:28:53 +00:00
|
|
|
|
2020-03-31 05:38:22 +00:00
|
|
|
static void SetScale(float x, float y);
|
2021-01-18 12:55:48 +00:00
|
|
|
static void SetSlantRefPoint(float x, float y);
|
|
|
|
static void SetSlant(float s);
|
|
|
|
static void SetJustifyOn(void);
|
|
|
|
static void SetJustifyOff(void);
|
|
|
|
static void SetRightJustifyOn(void);
|
|
|
|
static void SetRightJustifyOff(void);
|
|
|
|
static void SetCentreOn(void);
|
|
|
|
static void SetCentreOff(void);
|
|
|
|
static void SetWrapx(float x);
|
|
|
|
static void SetCentreSize(float s);
|
|
|
|
static void SetBackgroundOn(void);
|
|
|
|
static void SetBackgroundOff(void);
|
|
|
|
static void SetBackGroundOnlyTextOn(void);
|
|
|
|
static void SetBackGroundOnlyTextOff(void);
|
2021-01-20 16:11:10 +00:00
|
|
|
static void SetFlashOff(void);
|
2021-01-18 12:55:48 +00:00
|
|
|
static void SetPropOn(void);
|
|
|
|
static void SetPropOff(void);
|
2020-06-07 07:36:37 +00:00
|
|
|
static void SetFontStyle(int16 style);
|
2021-01-18 12:55:48 +00:00
|
|
|
static void SetRightJustifyWrap(float wrap);
|
|
|
|
static void SetAlphaFade(float fade);
|
|
|
|
static void SetDropShadowPosition(int16 pos);
|
2020-04-26 20:49:24 +00:00
|
|
|
static void SetBackgroundColor(CRGBA col);
|
|
|
|
static void SetColor(CRGBA col);
|
|
|
|
static void SetDropColor(CRGBA col);
|
2021-01-16 14:55:26 +00:00
|
|
|
|
|
|
|
static void SetOutlineColor(CRGBA col);
|
2021-01-18 12:55:48 +00:00
|
|
|
static void SetOutlineOn(int on);
|
|
|
|
static void SetNewLineAdd(int line);
|
2021-01-16 14:55:26 +00:00
|
|
|
|
|
|
|
static int16 FindNewCharacter(int16 c);
|
2020-11-29 16:19:50 +00:00
|
|
|
static void FilterOutTokensFromString(wchar*);
|
2021-01-20 16:11:10 +00:00
|
|
|
static bool16 CheckNewLine(wchar *s);
|
2020-03-31 05:38:22 +00:00
|
|
|
#ifdef MORE_LANGUAGES
|
2020-03-29 06:35:13 +00:00
|
|
|
static void ReloadFonts(uint8 set);
|
2020-04-15 21:24:49 +00:00
|
|
|
|
|
|
|
// japanese stuff
|
|
|
|
static bool IsAnsiCharacter(wchar* s);
|
2020-04-26 20:49:24 +00:00
|
|
|
static bool IsJapanesePunctuation(wchar* str);
|
2020-04-15 21:24:49 +00:00
|
|
|
static bool IsJapanese() { return LanguageSet == FONT_LANGSET_JAPANESE; }
|
|
|
|
static bool IsJapaneseFont() { return IsJapanese() && (Details.style == FONT_JAPANESE || Details.style == FONT_PAGER); }
|
2020-03-31 05:38:22 +00:00
|
|
|
#endif
|
2019-05-22 18:28:53 +00:00
|
|
|
};
|