Skip to content

Commit

Permalink
AGSSpriteFont: Instantiate Clifftop Games renderer variants for Kathy…
Browse files Browse the repository at this point in the history
… Rain and WOAM
  • Loading branch information
criezy committed Jul 17, 2022
1 parent c147271 commit 885a3d7
Showing 1 changed file with 50 additions and 13 deletions.
63 changes: 50 additions & 13 deletions Plugins/AGSSpriteFont/AGSSpriteFont/AGSSpriteFont.cpp
Expand Up @@ -21,6 +21,7 @@
#include <windows.h>
#include <WinBase.h>
#endif
#include <ctype.h>

#define THIS_IS_THE_PLUGIN
#include "plugin/agsplugin.h"
Expand Down Expand Up @@ -93,11 +94,54 @@ IAGSEngine *engine = nullptr;
SpriteFontRenderer *fontRenderer = nullptr;
VariableWidthSpriteFontRenderer *vWidthRenderer = nullptr;


bool IsEqualCaseInsensitive(char const *a, char const *b)
{
for (; *a && *b; a++, b++)
{
if (tolower((unsigned char)*a) != tolower((unsigned char)*b))
return false;
}
if (*a || *b)
return false;
return true;
}

void EnsureRenderersExist()
{
if (fontRenderer)
return;

bool isClifftopGames = false;

const char *(*sfGetGameName)();
sfGetGameName = ((const char *(*)()) engine->GetScriptFunctionAddress("Game::get_Name"));
if (sfGetGameName)
{
const char *gameName = sfGetGameName();
isClifftopGames = gameName &&
(IsEqualCaseInsensitive(gameName, "kathy rain") || IsEqualCaseInsensitive(gameName, "whispers of a machine"));
}

if (isClifftopGames)
{
engine->PrintDebugConsole("AGSSpriteFont: Init Clifftop Games fixed width renderer");
fontRenderer = new SpriteFontRendererClifftopGames(engine);
engine->PrintDebugConsole("AGSSpriteFont: Init Clifftop Games variable width renderer");
vWidthRenderer = new VariableWidthSpriteFontRendererClifftopGames(engine);
}
else
{
engine->PrintDebugConsole("AGSSpriteFont: Init fixed width renderer");
fontRenderer = new SpriteFontRenderer(engine);
engine->PrintDebugConsole("AGSSpriteFont: Init variable width renderer");
vWidthRenderer = new VariableWidthSpriteFontRenderer(engine);
}
}

void SetSpriteFont(int fontNum, int sprite, int rows, int columns, int charWidth, int charHeight, int charMin, int charMax, bool use32bit)
{
engine->PrintDebugConsole("AGSSpriteFont: SetSpriteFont");
EnsureRenderersExist();
fontRenderer->SetSpriteFont(fontNum, sprite, rows, columns, charWidth, charHeight, charMin, charMax, use32bit);
engine->ReplaceFontRenderer(fontNum, fontRenderer);

Expand All @@ -106,25 +150,29 @@ void SetSpriteFont(int fontNum, int sprite, int rows, int columns, int charWidth
void SetVariableSpriteFont(int fontNum, int sprite)
{
engine->PrintDebugConsole("AGSSpriteFont: SetVariableFont");
EnsureRenderersExist();
vWidthRenderer->SetSprite(fontNum, sprite);
engine->ReplaceFontRenderer(fontNum, vWidthRenderer);
}

void SetGlyph(int fontNum, int charNum, int x, int y, int width, int height)
{
engine->PrintDebugConsole("AGSSpriteFont: SetGlyph");
EnsureRenderersExist();
vWidthRenderer->SetGlyph(fontNum, charNum, x,y,width,height);
}

void SetSpacing(int fontNum, int spacing)
{
engine->PrintDebugConsole("AGSSpriteFont: SetSpacing");
EnsureRenderersExist();
vWidthRenderer->SetSpacing(fontNum, spacing);
}

void SetLineHeightAdjust(int fontNum, int lineHeight, int spacingHeight, int spacingOverride)
{
engine->PrintDebugConsole("AGSSpriteFont: SetLineHeightAdjust");
EnsureRenderersExist();
vWidthRenderer->SetLineHeightAdjust(fontNum, lineHeight, spacingHeight, spacingOverride);
}

Expand Down Expand Up @@ -227,18 +275,7 @@ namespace agsspritefont {
void AGS_EngineStartup(IAGSEngine *lpEngine)
{
engine = lpEngine;
// TODO: find a way de know which renderers to instantiate
#if 1
engine->PrintDebugConsole("AGSSpriteFont: Init fixed width renderer");
fontRenderer = new SpriteFontRenderer(engine);
engine->PrintDebugConsole("AGSSpriteFont: Init vari width renderer");
vWidthRenderer = new VariableWidthSpriteFontRenderer(engine);
#else
engine->PrintDebugConsole("AGSSpriteFont: Init fixed width renderer");
fontRenderer = new SpriteFontRendererClifftopGames(engine);
engine->PrintDebugConsole("AGSSpriteFont: Init vari width renderer");
vWidthRenderer = new VariableWidthSpriteFontRendererClifftopGames(engine);
#endif

// Make sure it's got the version with the features we need
if (engine->version < MIN_ENGINE_VERSION)
engine->AbortGame("Plugin needs engine version " STRINGIFY(MIN_ENGINE_VERSION) " or newer.");
Expand Down

0 comments on commit 885a3d7

Please sign in to comment.