convert to LF line-endings
This commit is contained in:
@@ -1,383 +1,383 @@
|
|||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_image.h>
|
#include <SDL2/SDL_image.h>
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <memory.h>
|
#include <memory.h>
|
||||||
|
|
||||||
#define CHARWIDTH 8
|
#define CHARWIDTH 8
|
||||||
#define CHARHEIGHT 16
|
#define CHARHEIGHT 16
|
||||||
|
|
||||||
enum class EColour : unsigned char
|
enum class EColour : unsigned char
|
||||||
{
|
{
|
||||||
BLACK,
|
BLACK,
|
||||||
BLUE,
|
BLUE,
|
||||||
GREEN,
|
GREEN,
|
||||||
CYAN,
|
CYAN,
|
||||||
RED,
|
RED,
|
||||||
MEGENTA,
|
MEGENTA,
|
||||||
BROWN,
|
BROWN,
|
||||||
LTGREY,
|
LTGREY,
|
||||||
DKGREY,
|
DKGREY,
|
||||||
LTBLUE,
|
LTBLUE,
|
||||||
LTGREEN,
|
LTGREEN,
|
||||||
LTCYAN,
|
LTCYAN,
|
||||||
LTRED,
|
LTRED,
|
||||||
LTMEGENTA,
|
LTMEGENTA,
|
||||||
YELLOW,
|
YELLOW,
|
||||||
WHITE
|
WHITE
|
||||||
};
|
};
|
||||||
|
|
||||||
SDL_Colour g_aColourTable[] =
|
SDL_Colour g_aColourTable[] =
|
||||||
{
|
{
|
||||||
{ 0x00, 0x00, 0x00, 0xFF }, // BLACK
|
{ 0x00, 0x00, 0x00, 0xFF }, // BLACK
|
||||||
{ 0x00, 0x00, 0xAA, 0xFF }, // BLUE
|
{ 0x00, 0x00, 0xAA, 0xFF }, // BLUE
|
||||||
{ 0x00, 0xAA, 0x00, 0xFF }, // GREEN
|
{ 0x00, 0xAA, 0x00, 0xFF }, // GREEN
|
||||||
{ 0x00, 0xAA, 0xAA, 0xFF }, // CYAN
|
{ 0x00, 0xAA, 0xAA, 0xFF }, // CYAN
|
||||||
{ 0xAA, 0x00, 0x00, 0xFF }, // RED
|
{ 0xAA, 0x00, 0x00, 0xFF }, // RED
|
||||||
{ 0xAA, 0x00, 0xAA, 0xFF }, // MEGENTA
|
{ 0xAA, 0x00, 0xAA, 0xFF }, // MEGENTA
|
||||||
{ 0xAA, 0x55, 0x00, 0xFF }, // BROWN
|
{ 0xAA, 0x55, 0x00, 0xFF }, // BROWN
|
||||||
{ 0xAA, 0xAA, 0xAA, 0xFF }, // LTGREY
|
{ 0xAA, 0xAA, 0xAA, 0xFF }, // LTGREY
|
||||||
{ 0x55, 0x55, 0x55, 0xFF }, // DKGREY
|
{ 0x55, 0x55, 0x55, 0xFF }, // DKGREY
|
||||||
{ 0x55, 0x55, 0xFF, 0xFF }, // BLUE
|
{ 0x55, 0x55, 0xFF, 0xFF }, // BLUE
|
||||||
{ 0x55, 0xFF, 0x55, 0xFF }, // GREEN
|
{ 0x55, 0xFF, 0x55, 0xFF }, // GREEN
|
||||||
{ 0x55, 0xFF, 0xFF, 0xFF }, // CYAN
|
{ 0x55, 0xFF, 0xFF, 0xFF }, // CYAN
|
||||||
{ 0xFF, 0x55, 0x55, 0xFF }, // RED
|
{ 0xFF, 0x55, 0x55, 0xFF }, // RED
|
||||||
{ 0xFF, 0x55, 0xFF, 0xFF }, // MEGENTA
|
{ 0xFF, 0x55, 0xFF, 0xFF }, // MEGENTA
|
||||||
{ 0xFF, 0xFF, 0x55, 0xFF }, // YELLOW
|
{ 0xFF, 0xFF, 0x55, 0xFF }, // YELLOW
|
||||||
{ 0xFF, 0xFF, 0xFF, 0xFF } // WHITE
|
{ 0xFF, 0xFF, 0xFF, 0xFF } // WHITE
|
||||||
};
|
};
|
||||||
|
|
||||||
struct SChar
|
struct SChar
|
||||||
{
|
{
|
||||||
unsigned char character;
|
unsigned char character;
|
||||||
EColour bgColour;
|
EColour bgColour;
|
||||||
EColour fgColour;
|
EColour fgColour;
|
||||||
bool blinking;
|
bool blinking;
|
||||||
};
|
};
|
||||||
|
|
||||||
inline int clampi ( int a_iVal, int a_iMin, int a_iMax )
|
inline int clampi ( int a_iVal, int a_iMin, int a_iMax )
|
||||||
{
|
{
|
||||||
return ( a_iVal < a_iMin ) ? a_iMin : ( a_iVal > a_iMax ) ? a_iMax : a_iVal;
|
return ( a_iVal < a_iMin ) ? a_iMin : ( a_iVal > a_iMax ) ? a_iMax : a_iVal;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Uint32 TimerCallback ( Uint32 a_uiInterval, void* a_pParam )
|
static Uint32 TimerCallback ( Uint32 a_uiInterval, void* a_pParam )
|
||||||
{
|
{
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
SDL_UserEvent userEvent;
|
SDL_UserEvent userEvent;
|
||||||
|
|
||||||
userEvent.type = SDL_USEREVENT;
|
userEvent.type = SDL_USEREVENT;
|
||||||
userEvent.code = 0;
|
userEvent.code = 0;
|
||||||
userEvent.data1 = nullptr;
|
userEvent.data1 = nullptr;
|
||||||
userEvent.data2 = nullptr;
|
userEvent.data2 = nullptr;
|
||||||
|
|
||||||
event.type = SDL_USEREVENT;
|
event.type = SDL_USEREVENT;
|
||||||
event.user = userEvent;
|
event.user = userEvent;
|
||||||
|
|
||||||
SDL_PushEvent ( &event );
|
SDL_PushEvent ( &event );
|
||||||
|
|
||||||
return a_uiInterval;
|
return a_uiInterval;
|
||||||
}
|
}
|
||||||
|
|
||||||
int main ( int argc, char** argv )
|
int main ( int argc, char** argv )
|
||||||
{
|
{
|
||||||
if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 )
|
if ( SDL_Init ( SDL_INIT_VIDEO ) < 0 )
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !( IMG_Init ( IMG_INIT_PNG ) & IMG_INIT_PNG ) )
|
if ( !( IMG_Init ( IMG_INIT_PNG ) & IMG_INIT_PNG ) )
|
||||||
{
|
{
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Window* pWindow = nullptr;
|
SDL_Window* pWindow = nullptr;
|
||||||
SDL_Renderer* pRenderer = nullptr;
|
SDL_Renderer* pRenderer = nullptr;
|
||||||
if ( SDL_CreateWindowAndRenderer ( 640, 400, 0, &pWindow, &pRenderer ) < 0 )
|
if ( SDL_CreateWindowAndRenderer ( 640, 400, 0, &pWindow, &pRenderer ) < 0 )
|
||||||
{
|
{
|
||||||
IMG_Quit ();
|
IMG_Quit ();
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_SetWindowTitle ( pWindow, "EnDOOMed" );
|
SDL_SetWindowTitle ( pWindow, "EnDOOMed" );
|
||||||
|
|
||||||
SDL_Texture* pCodepage = IMG_LoadTexture ( pRenderer, "codepage.png" );
|
SDL_Texture* pCodepage = IMG_LoadTexture ( pRenderer, "codepage.png" );
|
||||||
if ( pCodepage == nullptr )
|
if ( pCodepage == nullptr )
|
||||||
{
|
{
|
||||||
SDL_DestroyRenderer ( pRenderer );
|
SDL_DestroyRenderer ( pRenderer );
|
||||||
SDL_DestroyWindow ( pWindow );
|
SDL_DestroyWindow ( pWindow );
|
||||||
IMG_Quit ();
|
IMG_Quit ();
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
SChar aDisplay[2000];
|
SChar aDisplay[2000];
|
||||||
memset ( aDisplay, 0, sizeof(aDisplay) );
|
memset ( aDisplay, 0, sizeof(aDisplay) );
|
||||||
|
|
||||||
FILE* pFile = fopen ( "ENDOOM.bin", "rb" );
|
FILE* pFile = fopen ( "ENDOOM.bin", "rb" );
|
||||||
if ( pFile == nullptr )
|
if ( pFile == nullptr )
|
||||||
{
|
{
|
||||||
SDL_DestroyTexture ( pCodepage );
|
SDL_DestroyTexture ( pCodepage );
|
||||||
SDL_DestroyRenderer ( pRenderer );
|
SDL_DestroyRenderer ( pRenderer );
|
||||||
SDL_DestroyWindow ( pWindow );
|
SDL_DestroyWindow ( pWindow );
|
||||||
IMG_Quit ();
|
IMG_Quit ();
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for ( int i = 0; i < 2000; ++i )
|
for ( int i = 0; i < 2000; ++i )
|
||||||
{
|
{
|
||||||
SChar& currentCharacter = aDisplay[i];
|
SChar& currentCharacter = aDisplay[i];
|
||||||
|
|
||||||
unsigned char ucSpecial;
|
unsigned char ucSpecial;
|
||||||
fread ( ¤tCharacter.character, sizeof(unsigned char), 1, pFile );
|
fread ( ¤tCharacter.character, sizeof(unsigned char), 1, pFile );
|
||||||
fread ( &ucSpecial, sizeof(unsigned char), 1, pFile );
|
fread ( &ucSpecial, sizeof(unsigned char), 1, pFile );
|
||||||
|
|
||||||
currentCharacter.bgColour = EColour(( ucSpecial & 112 ) >> 4);
|
currentCharacter.bgColour = EColour(( ucSpecial & 112 ) >> 4);
|
||||||
currentCharacter.fgColour = EColour(ucSpecial & 15);
|
currentCharacter.fgColour = EColour(ucSpecial & 15);
|
||||||
currentCharacter.blinking = ( ucSpecial & 128 > 0 ) ? true : false;
|
currentCharacter.blinking = ( ucSpecial & 128 > 0 ) ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_AddTimer ( 400, TimerCallback, nullptr );
|
SDL_AddTimer ( 400, TimerCallback, nullptr );
|
||||||
|
|
||||||
SChar leftBrush;
|
SChar leftBrush;
|
||||||
leftBrush.character = 219;
|
leftBrush.character = 219;
|
||||||
leftBrush.bgColour = EColour::BLACK;
|
leftBrush.bgColour = EColour::BLACK;
|
||||||
leftBrush.fgColour = EColour::LTGREY;
|
leftBrush.fgColour = EColour::LTGREY;
|
||||||
leftBrush.blinking = false;
|
leftBrush.blinking = false;
|
||||||
|
|
||||||
SChar rightBrush;
|
SChar rightBrush;
|
||||||
rightBrush.character = ' ';
|
rightBrush.character = ' ';
|
||||||
rightBrush.bgColour = EColour::BLACK;
|
rightBrush.bgColour = EColour::BLACK;
|
||||||
rightBrush.fgColour = EColour::LTGREY;
|
rightBrush.fgColour = EColour::LTGREY;
|
||||||
rightBrush.blinking = false;
|
rightBrush.blinking = false;
|
||||||
|
|
||||||
bool bMouseLeft = false, bMouseRight = false;
|
bool bMouseLeft = false, bMouseRight = false;
|
||||||
int iMousePrevX = 0, iMousePrevY = 0;
|
int iMousePrevX = 0, iMousePrevY = 0;
|
||||||
int iMouseX = 0, iMouseY = 0;
|
int iMouseX = 0, iMouseY = 0;
|
||||||
bool bMouseInWindow = false;
|
bool bMouseInWindow = false;
|
||||||
|
|
||||||
bool bValidRender = false;
|
bool bValidRender = false;
|
||||||
bool bBlinkState = true;
|
bool bBlinkState = true;
|
||||||
bool bRunning = true;
|
bool bRunning = true;
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while ( bRunning )
|
while ( bRunning )
|
||||||
{
|
{
|
||||||
iMousePrevX = iMouseX;
|
iMousePrevX = iMouseX;
|
||||||
iMousePrevY = iMouseY;
|
iMousePrevY = iMouseY;
|
||||||
|
|
||||||
SDL_PumpEvents ();
|
SDL_PumpEvents ();
|
||||||
if ( SDL_WaitEvent ( &event ) )
|
if ( SDL_WaitEvent ( &event ) )
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
switch ( event.type )
|
switch ( event.type )
|
||||||
{
|
{
|
||||||
case ( SDL_QUIT ):
|
case ( SDL_QUIT ):
|
||||||
{
|
{
|
||||||
bRunning = false;
|
bRunning = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ( SDL_USEREVENT ):
|
case ( SDL_USEREVENT ):
|
||||||
{
|
{
|
||||||
bBlinkState = !bBlinkState;
|
bBlinkState = !bBlinkState;
|
||||||
bValidRender = false;
|
bValidRender = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ( SDL_MOUSEBUTTONDOWN ):
|
case ( SDL_MOUSEBUTTONDOWN ):
|
||||||
{
|
{
|
||||||
if ( event.button.button == SDL_BUTTON_LEFT )
|
if ( event.button.button == SDL_BUTTON_LEFT )
|
||||||
{
|
{
|
||||||
bMouseLeft = true;
|
bMouseLeft = true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( event.button.button == SDL_BUTTON_RIGHT )
|
if ( event.button.button == SDL_BUTTON_RIGHT )
|
||||||
{
|
{
|
||||||
bMouseRight = true;
|
bMouseRight = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ( SDL_MOUSEBUTTONUP ):
|
case ( SDL_MOUSEBUTTONUP ):
|
||||||
{
|
{
|
||||||
if ( event.button.button == SDL_BUTTON_LEFT )
|
if ( event.button.button == SDL_BUTTON_LEFT )
|
||||||
{
|
{
|
||||||
bMouseLeft = false;
|
bMouseLeft = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( event.button.button == SDL_BUTTON_RIGHT )
|
if ( event.button.button == SDL_BUTTON_RIGHT )
|
||||||
{
|
{
|
||||||
bMouseRight = false;
|
bMouseRight = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ( SDL_MOUSEMOTION ):
|
case ( SDL_MOUSEMOTION ):
|
||||||
{
|
{
|
||||||
iMouseX = event.motion.x;
|
iMouseX = event.motion.x;
|
||||||
iMouseY = event.motion.y;
|
iMouseY = event.motion.y;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case ( SDL_WINDOWEVENT ):
|
case ( SDL_WINDOWEVENT ):
|
||||||
{
|
{
|
||||||
switch ( event.window.event )
|
switch ( event.window.event )
|
||||||
{
|
{
|
||||||
case ( SDL_WINDOWEVENT_LEAVE ):
|
case ( SDL_WINDOWEVENT_LEAVE ):
|
||||||
{
|
{
|
||||||
bMouseInWindow = false;
|
bMouseInWindow = false;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
case ( SDL_WINDOWEVENT_ENTER ):
|
case ( SDL_WINDOWEVENT_ENTER ):
|
||||||
{
|
{
|
||||||
bMouseInWindow = true;
|
bMouseInWindow = true;
|
||||||
break;
|
break;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while ( SDL_PollEvent ( &event ) > 0 );
|
while ( SDL_PollEvent ( &event ) > 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( bMouseInWindow && ( bMouseLeft || bMouseRight ) )
|
if ( bMouseInWindow && ( bMouseLeft || bMouseRight ) )
|
||||||
{
|
{
|
||||||
int iFromX = clampi ( iMouseX / CHARWIDTH, 0, 79 );
|
int iFromX = clampi ( iMouseX / CHARWIDTH, 0, 79 );
|
||||||
int iFromY = clampi ( iMouseY / CHARHEIGHT, 0, 24 );
|
int iFromY = clampi ( iMouseY / CHARHEIGHT, 0, 24 );
|
||||||
int iToX = clampi ( iMousePrevX / CHARWIDTH, 0, 79 );
|
int iToX = clampi ( iMousePrevX / CHARWIDTH, 0, 79 );
|
||||||
int iToY = clampi ( iMousePrevY / CHARHEIGHT, 0, 24 );
|
int iToY = clampi ( iMousePrevY / CHARHEIGHT, 0, 24 );
|
||||||
|
|
||||||
SChar* srcChar = nullptr;
|
SChar* srcChar = nullptr;
|
||||||
if ( bMouseLeft )
|
if ( bMouseLeft )
|
||||||
{
|
{
|
||||||
srcChar = &leftBrush;
|
srcChar = &leftBrush;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if ( bMouseRight )
|
if ( bMouseRight )
|
||||||
{
|
{
|
||||||
srcChar = &rightBrush;
|
srcChar = &rightBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( iToX == iFromX && iToY == iFromY )
|
if ( iToX == iFromX && iToY == iFromY )
|
||||||
{
|
{
|
||||||
SChar& dstChar = aDisplay[iToX + iToY * 80];
|
SChar& dstChar = aDisplay[iToX + iToY * 80];
|
||||||
dstChar.blinking = srcChar->blinking;
|
dstChar.blinking = srcChar->blinking;
|
||||||
dstChar.bgColour = srcChar->bgColour;
|
dstChar.bgColour = srcChar->bgColour;
|
||||||
dstChar.fgColour = srcChar->fgColour;
|
dstChar.fgColour = srcChar->fgColour;
|
||||||
dstChar.character = srcChar->character;
|
dstChar.character = srcChar->character;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int iTemp;
|
int iTemp;
|
||||||
bool bSteep = labs ( iToY - iFromY ) > labs ( iToX - iFromX );
|
bool bSteep = labs ( iToY - iFromY ) > labs ( iToX - iFromX );
|
||||||
if ( bSteep )
|
if ( bSteep )
|
||||||
{
|
{
|
||||||
iTemp = iFromY;
|
iTemp = iFromY;
|
||||||
iFromY = iFromX;
|
iFromY = iFromX;
|
||||||
iFromX = iTemp;
|
iFromX = iTemp;
|
||||||
|
|
||||||
iTemp = iToY;
|
iTemp = iToY;
|
||||||
iToY = iToX;
|
iToY = iToX;
|
||||||
iToX = iTemp;
|
iToX = iTemp;
|
||||||
}
|
}
|
||||||
if ( iFromX > iToX )
|
if ( iFromX > iToX )
|
||||||
{
|
{
|
||||||
iTemp = iToX;
|
iTemp = iToX;
|
||||||
iToX = iFromX;
|
iToX = iFromX;
|
||||||
iFromX = iTemp;
|
iFromX = iTemp;
|
||||||
|
|
||||||
iTemp = iToY;
|
iTemp = iToY;
|
||||||
iToY = iFromY;
|
iToY = iFromY;
|
||||||
iFromY = iTemp;
|
iFromY = iTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
int iDeltaX = iToX - iFromX;
|
int iDeltaX = iToX - iFromX;
|
||||||
int iDeltaY = labs ( iToY - iFromY );
|
int iDeltaY = labs ( iToY - iFromY );
|
||||||
int iError = iDeltaX / 2;
|
int iError = iDeltaX / 2;
|
||||||
int iY = iFromY;
|
int iY = iFromY;
|
||||||
int iYStep = ( iFromY < iToY ) ? 1 : -1;
|
int iYStep = ( iFromY < iToY ) ? 1 : -1;
|
||||||
for ( int iX = iFromX; iX <= iToX; ++iX )
|
for ( int iX = iFromX; iX <= iToX; ++iX )
|
||||||
{
|
{
|
||||||
if ( bSteep )
|
if ( bSteep )
|
||||||
{
|
{
|
||||||
SChar& dstChar = aDisplay[iY + iX * 80];
|
SChar& dstChar = aDisplay[iY + iX * 80];
|
||||||
dstChar.blinking = srcChar->blinking;
|
dstChar.blinking = srcChar->blinking;
|
||||||
dstChar.bgColour = srcChar->bgColour;
|
dstChar.bgColour = srcChar->bgColour;
|
||||||
dstChar.fgColour = srcChar->fgColour;
|
dstChar.fgColour = srcChar->fgColour;
|
||||||
dstChar.character = srcChar->character;
|
dstChar.character = srcChar->character;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SChar& dstChar = aDisplay[iX + iY * 80];
|
SChar& dstChar = aDisplay[iX + iY * 80];
|
||||||
dstChar.blinking = srcChar->blinking;
|
dstChar.blinking = srcChar->blinking;
|
||||||
dstChar.bgColour = srcChar->bgColour;
|
dstChar.bgColour = srcChar->bgColour;
|
||||||
dstChar.fgColour = srcChar->fgColour;
|
dstChar.fgColour = srcChar->fgColour;
|
||||||
dstChar.character = srcChar->character;
|
dstChar.character = srcChar->character;
|
||||||
}
|
}
|
||||||
|
|
||||||
iError -= iDeltaY;
|
iError -= iDeltaY;
|
||||||
if ( iError < 0 )
|
if ( iError < 0 )
|
||||||
{
|
{
|
||||||
iY += iYStep;
|
iY += iYStep;
|
||||||
iError += iDeltaX;
|
iError += iDeltaX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bValidRender = false;
|
bValidRender = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !bValidRender )
|
if ( !bValidRender )
|
||||||
{
|
{
|
||||||
SDL_SetRenderDrawColor ( pRenderer, 48, 48, 48, 255 );
|
SDL_SetRenderDrawColor ( pRenderer, 48, 48, 48, 255 );
|
||||||
SDL_RenderClear ( pRenderer );
|
SDL_RenderClear ( pRenderer );
|
||||||
|
|
||||||
SDL_Rect src, dst;
|
SDL_Rect src, dst;
|
||||||
|
|
||||||
src.w = CHARWIDTH;
|
src.w = CHARWIDTH;
|
||||||
src.h = CHARHEIGHT;
|
src.h = CHARHEIGHT;
|
||||||
dst.w = CHARWIDTH;
|
dst.w = CHARWIDTH;
|
||||||
dst.h = CHARHEIGHT;
|
dst.h = CHARHEIGHT;
|
||||||
|
|
||||||
int iX = 0, iY = 0;
|
int iX = 0, iY = 0;
|
||||||
for ( int i = 0; i < 2000; ++i )
|
for ( int i = 0; i < 2000; ++i )
|
||||||
{
|
{
|
||||||
SChar& currentCharacter = aDisplay[i];
|
SChar& currentCharacter = aDisplay[i];
|
||||||
SDL_Colour& currentBgColour = g_aColourTable[(unsigned char)aDisplay[i].bgColour];
|
SDL_Colour& currentBgColour = g_aColourTable[(unsigned char)aDisplay[i].bgColour];
|
||||||
SDL_Colour& currentFgColour = g_aColourTable[(unsigned char)aDisplay[i].fgColour];
|
SDL_Colour& currentFgColour = g_aColourTable[(unsigned char)aDisplay[i].fgColour];
|
||||||
|
|
||||||
src.x = ( currentCharacter.character % 32 ) * CHARWIDTH;
|
src.x = ( currentCharacter.character % 32 ) * CHARWIDTH;
|
||||||
src.y = ( currentCharacter.character / 32 ) * CHARHEIGHT;
|
src.y = ( currentCharacter.character / 32 ) * CHARHEIGHT;
|
||||||
dst.x = iX * CHARWIDTH;
|
dst.x = iX * CHARWIDTH;
|
||||||
dst.y = iY * CHARHEIGHT;
|
dst.y = iY * CHARHEIGHT;
|
||||||
|
|
||||||
SDL_SetRenderDrawColor ( pRenderer, currentBgColour.r, currentBgColour.g, currentBgColour.b, currentBgColour.a );
|
SDL_SetRenderDrawColor ( pRenderer, currentBgColour.r, currentBgColour.g, currentBgColour.b, currentBgColour.a );
|
||||||
SDL_RenderFillRect ( pRenderer, &dst );
|
SDL_RenderFillRect ( pRenderer, &dst );
|
||||||
SDL_SetRenderDrawColor ( pRenderer, 0, 0, 0, currentFgColour.a );
|
SDL_SetRenderDrawColor ( pRenderer, 0, 0, 0, currentFgColour.a );
|
||||||
|
|
||||||
if ( bBlinkState || !currentCharacter.blinking )
|
if ( bBlinkState || !currentCharacter.blinking )
|
||||||
{
|
{
|
||||||
SDL_SetTextureColorMod ( pCodepage, currentFgColour.r, currentFgColour.g, currentFgColour.b );
|
SDL_SetTextureColorMod ( pCodepage, currentFgColour.r, currentFgColour.g, currentFgColour.b );
|
||||||
SDL_RenderCopy ( pRenderer, pCodepage, &src, &dst );
|
SDL_RenderCopy ( pRenderer, pCodepage, &src, &dst );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( ++iX >= 80 )
|
if ( ++iX >= 80 )
|
||||||
{
|
{
|
||||||
iX = 0;
|
iX = 0;
|
||||||
++iY;
|
++iY;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_RenderPresent ( pRenderer );
|
SDL_RenderPresent ( pRenderer );
|
||||||
bValidRender = true;
|
bValidRender = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose ( pFile );
|
fclose ( pFile );
|
||||||
SDL_DestroyTexture ( pCodepage );
|
SDL_DestroyTexture ( pCodepage );
|
||||||
SDL_DestroyRenderer ( pRenderer );
|
SDL_DestroyRenderer ( pRenderer );
|
||||||
SDL_DestroyWindow ( pWindow );
|
SDL_DestroyWindow ( pWindow );
|
||||||
IMG_Quit ();
|
IMG_Quit ();
|
||||||
SDL_Quit ();
|
SDL_Quit ();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user