Split SDL2 code from Main.cpp

This commit is contained in:
Clownacy 2020-03-31 16:07:34 +01:00
parent 51562f6fd8
commit 3a5a5044b1
5 changed files with 286 additions and 238 deletions

View file

@ -163,8 +163,10 @@ add_executable(CSE2 WIN32
"src/ValueView.cpp" "src/ValueView.cpp"
"src/ValueView.h" "src/ValueView.h"
"src/WindowsWrapper.h" "src/WindowsWrapper.h"
"src/Backends/Rendering.h" "src/Backends/Platform/SDL2.cpp"
"src/Backends/Audio.h" "src/Backends/Audio.h"
"src/Backends/Platform.h"
"src/Backends/Rendering.h"
) )
set(RESOURCES set(RESOURCES

11
src/Backends/Platform.h Normal file
View file

@ -0,0 +1,11 @@
#pragma once
#include "../WindowsWrapper.h"
extern BOOL bActive;
void PlatformBackend_Init(void);
void PlatformBackend_GetBasePath(char *string_buffer);
BOOL PlatformBackend_SystemTask(void);

View file

@ -0,0 +1,254 @@
#include "../Platform.h"
#include "SDL.h"
#include "../Rendering.h"
#include "../../WindowsWrapper.h"
#include "../../KeyControl.h"
#include "../../Main.h"
#include "../../Organya.h"
#include "../../Profile.h"
BOOL bActive = TRUE;
void PlatformBackend_Init(void)
{
SDL_Init(SDL_INIT_EVENTS);
#ifdef _WIN32 // On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does)
SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON, "101");
SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL, "102");
#endif
SDL_InitSubSystem(SDL_INIT_VIDEO);
}
void PlatformBackend_GetBasePath(char *string_buffer)
{
char *base_path = SDL_GetBasePath();
size_t base_path_length = strlen(base_path);
base_path[base_path_length - 1] = '\0';
strcpy(string_buffer, base_path);
SDL_free(base_path);
}
BOOL PlatformBackend_SystemTask(void)
{
while (SDL_PollEvent(NULL) || !bActive)
{
SDL_Event event;
if (!SDL_WaitEvent(&event))
return FALSE;
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
gKey |= KEY_ESCAPE;
break;
case SDLK_w:
gKey |= KEY_MAP;
break;
case SDLK_LEFT:
gKey |= KEY_LEFT;
break;
case SDLK_RIGHT:
gKey |= KEY_RIGHT;
break;
case SDLK_UP:
gKey |= KEY_UP;
break;
case SDLK_DOWN:
gKey |= KEY_DOWN;
break;
case SDLK_x:
gKey |= KEY_X;
break;
case SDLK_z:
gKey |= KEY_Z;
break;
case SDLK_s:
gKey |= KEY_ARMS;
break;
case SDLK_a:
gKey |= KEY_ARMSREV;
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
gKey |= KEY_SHIFT;
break;
case SDLK_F1:
gKey |= KEY_F1;
break;
case SDLK_F2:
gKey |= KEY_F2;
break;
case SDLK_q:
gKey |= KEY_ITEM;
break;
case SDLK_COMMA:
gKey |= KEY_ALT_LEFT;
break;
case SDLK_PERIOD:
gKey |= KEY_ALT_DOWN;
break;
case SDLK_SLASH:
gKey |= KEY_ALT_RIGHT;
break;
case SDLK_l:
gKey |= KEY_L;
break;
case SDLK_PLUS:
gKey |= KEY_PLUS;
break;
case SDLK_F5:
gbUseJoystick = FALSE;
break;
}
break;
case SDL_KEYUP:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
gKey &= ~KEY_ESCAPE;
break;
case SDLK_w:
gKey &= ~KEY_MAP;
break;
case SDLK_LEFT:
gKey &= ~KEY_LEFT;
break;
case SDLK_RIGHT:
gKey &= ~KEY_RIGHT;
break;
case SDLK_UP:
gKey &= ~KEY_UP;
break;
case SDLK_DOWN:
gKey &= ~KEY_DOWN;
break;
case SDLK_x:
gKey &= ~KEY_X;
break;
case SDLK_z:
gKey &= ~KEY_Z;
break;
case SDLK_s:
gKey &= ~KEY_ARMS;
break;
case SDLK_a:
gKey &= ~KEY_ARMSREV;
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
gKey &= ~KEY_SHIFT;
break;
case SDLK_F1:
gKey &= ~KEY_F1;
break;
case SDLK_F2:
gKey &= ~KEY_F2;
break;
case SDLK_q:
gKey &= ~KEY_ITEM;
break;
case SDLK_COMMA:
gKey &= ~KEY_ALT_LEFT;
break;
case SDLK_PERIOD:
gKey &= ~KEY_ALT_DOWN;
break;
case SDLK_SLASH:
gKey &= ~KEY_ALT_RIGHT;
break;
case SDLK_l:
gKey &= ~KEY_L;
break;
case SDLK_PLUS:
gKey &= ~KEY_PLUS;
break;
}
break;
case SDL_DROPFILE:
LoadProfile(event.drop.file);
SDL_free(event.drop.file);
break;
case SDL_WINDOWEVENT:
switch (event.window.event)
{
case SDL_WINDOWEVENT_FOCUS_LOST:
InactiveWindow();
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
ActiveWindow();
break;
case SDL_WINDOWEVENT_RESIZED:
case SDL_WINDOWEVENT_SIZE_CHANGED:
Backend_HandleWindowResize();
break;
}
break;
case SDL_QUIT:
StopOrganyaMusic();
return FALSE;
case SDL_RENDER_TARGETS_RESET:
Backend_HandleRenderTargetLoss();
break;
}
}
return TRUE;
}

View file

@ -5,10 +5,9 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "SDL.h"
#include "WindowsWrapper.h" #include "WindowsWrapper.h"
#include "Backends/Platform.h"
#include "Backends/Rendering.h" #include "Backends/Rendering.h"
#include "CommonDefines.h" #include "CommonDefines.h"
#include "Config.h" #include "Config.h"
@ -33,7 +32,6 @@ BOOL gbUseJoystick = FALSE;
int gJoystickButtonTable[8]; int gJoystickButtonTable[8];
static BOOL bActive = TRUE;
static BOOL bFps = FALSE; static BOOL bFps = FALSE;
static int windowWidth; static int windowWidth;
@ -90,14 +88,10 @@ int main(int argc, char *argv[])
int i; int i;
SDL_Init(SDL_INIT_EVENTS); PlatformBackend_Init();
// Get executable's path // Get executable's path
char *base_path = SDL_GetBasePath(); PlatformBackend_GetBasePath(gModulePath);
size_t base_path_length = strlen(base_path);
base_path[base_path_length - 1] = '\0';
strcpy(gModulePath, base_path);
SDL_free(base_path);
// Get path of the data folder // Get path of the data folder
strcpy(gDataPath, gModulePath); strcpy(gDataPath, gModulePath);
@ -194,13 +188,6 @@ int main(int argc, char *argv[])
RECT unused_rect = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT}; RECT unused_rect = {0, 0, WINDOW_WIDTH, WINDOW_HEIGHT};
#ifdef _WIN32 // On Windows, we use native icons instead (so we can give the taskbar and window separate icons, like the original EXE does)
SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON, "101");
SDL_SetHint(SDL_HINT_WINDOWS_INTRESOURCE_ICON_SMALL, "102");
#endif
SDL_InitSubSystem(SDL_INIT_VIDEO);
switch (conf.display_mode) switch (conf.display_mode)
{ {
case 1: case 1:
@ -255,14 +242,14 @@ int main(int argc, char *argv[])
bFullscreen = TRUE; bFullscreen = TRUE;
SDL_ShowCursor(SDL_DISABLE); //SDL_ShowCursor(SDL_DISABLE);
break; break;
} }
#ifdef DEBUG_SAVE #ifdef DEBUG_SAVE
SDL_EventState(SDL_DROPFILE, SDL_ENABLE); //SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
#endif #endif
/*
// Set up the cursor // Set up the cursor
size_t resource_size; size_t resource_size;
const unsigned char *resource_data = FindResource("CURSOR_NORMAL", "CURSOR", &resource_size); const unsigned char *resource_data = FindResource("CURSOR_NORMAL", "CURSOR", &resource_size);
@ -271,7 +258,7 @@ int main(int argc, char *argv[])
SDL_SetColorKey(cursor_surface, SDL_TRUE, SDL_MapRGB(cursor_surface->format, 0xFF, 0, 0xFF)); SDL_SetColorKey(cursor_surface, SDL_TRUE, SDL_MapRGB(cursor_surface->format, 0xFF, 0, 0xFF));
SDL_Cursor *cursor = SDL_CreateColorCursor(cursor_surface, 0, 0); SDL_Cursor *cursor = SDL_CreateColorCursor(cursor_surface, 0, 0);
SDL_SetCursor(cursor); SDL_SetCursor(cursor);
*/
if (IsKeyFile("fps")) if (IsKeyFile("fps"))
bFps = TRUE; bFps = TRUE;
@ -291,8 +278,8 @@ int main(int argc, char *argv[])
// Draw to screen // Draw to screen
if (!Flip_SystemTask()) if (!Flip_SystemTask())
{ {
SDL_FreeCursor(cursor); // SDL_FreeCursor(cursor);
SDL_FreeSurface(cursor_surface); // SDL_FreeSurface(cursor_surface);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
@ -317,10 +304,10 @@ int main(int argc, char *argv[])
EndTextObject(); EndTextObject();
EndDirectSound(); EndDirectSound();
EndDirectDraw(); EndDirectDraw();
/*
SDL_FreeCursor(cursor); SDL_FreeCursor(cursor);
SDL_FreeSurface(cursor_surface); SDL_FreeSurface(cursor_surface);
*/
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
@ -353,220 +340,9 @@ void JoystickProc(void);
BOOL SystemTask(void) BOOL SystemTask(void)
{ {
while (SDL_PollEvent(NULL) || !bActive) if (!PlatformBackend_SystemTask())
{
SDL_Event event;
if (!SDL_WaitEvent(&event))
return FALSE; return FALSE;
switch (event.type)
{
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
gKey |= KEY_ESCAPE;
break;
case SDLK_w:
gKey |= KEY_MAP;
break;
case SDLK_LEFT:
gKey |= KEY_LEFT;
break;
case SDLK_RIGHT:
gKey |= KEY_RIGHT;
break;
case SDLK_UP:
gKey |= KEY_UP;
break;
case SDLK_DOWN:
gKey |= KEY_DOWN;
break;
case SDLK_x:
gKey |= KEY_X;
break;
case SDLK_z:
gKey |= KEY_Z;
break;
case SDLK_s:
gKey |= KEY_ARMS;
break;
case SDLK_a:
gKey |= KEY_ARMSREV;
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
gKey |= KEY_SHIFT;
break;
case SDLK_F1:
gKey |= KEY_F1;
break;
case SDLK_F2:
gKey |= KEY_F2;
break;
case SDLK_q:
gKey |= KEY_ITEM;
break;
case SDLK_COMMA:
gKey |= KEY_ALT_LEFT;
break;
case SDLK_PERIOD:
gKey |= KEY_ALT_DOWN;
break;
case SDLK_SLASH:
gKey |= KEY_ALT_RIGHT;
break;
case SDLK_l:
gKey |= KEY_L;
break;
case SDLK_PLUS:
gKey |= KEY_PLUS;
break;
case SDLK_F5:
gbUseJoystick = FALSE;
break;
}
break;
case SDL_KEYUP:
switch (event.key.keysym.sym)
{
case SDLK_ESCAPE:
gKey &= ~KEY_ESCAPE;
break;
case SDLK_w:
gKey &= ~KEY_MAP;
break;
case SDLK_LEFT:
gKey &= ~KEY_LEFT;
break;
case SDLK_RIGHT:
gKey &= ~KEY_RIGHT;
break;
case SDLK_UP:
gKey &= ~KEY_UP;
break;
case SDLK_DOWN:
gKey &= ~KEY_DOWN;
break;
case SDLK_x:
gKey &= ~KEY_X;
break;
case SDLK_z:
gKey &= ~KEY_Z;
break;
case SDLK_s:
gKey &= ~KEY_ARMS;
break;
case SDLK_a:
gKey &= ~KEY_ARMSREV;
break;
case SDLK_LSHIFT:
case SDLK_RSHIFT:
gKey &= ~KEY_SHIFT;
break;
case SDLK_F1:
gKey &= ~KEY_F1;
break;
case SDLK_F2:
gKey &= ~KEY_F2;
break;
case SDLK_q:
gKey &= ~KEY_ITEM;
break;
case SDLK_COMMA:
gKey &= ~KEY_ALT_LEFT;
break;
case SDLK_PERIOD:
gKey &= ~KEY_ALT_DOWN;
break;
case SDLK_SLASH:
gKey &= ~KEY_ALT_RIGHT;
break;
case SDLK_l:
gKey &= ~KEY_L;
break;
case SDLK_PLUS:
gKey &= ~KEY_PLUS;
break;
}
break;
case SDL_DROPFILE:
LoadProfile(event.drop.file);
SDL_free(event.drop.file);
break;
case SDL_WINDOWEVENT:
switch (event.window.event)
{
case SDL_WINDOWEVENT_FOCUS_LOST:
InactiveWindow();
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
ActiveWindow();
break;
case SDL_WINDOWEVENT_RESIZED:
case SDL_WINDOWEVENT_SIZE_CHANGED:
Backend_HandleWindowResize();
break;
}
break;
case SDL_QUIT:
StopOrganyaMusic();
return FALSE;
case SDL_RENDER_TARGETS_RESET:
Backend_HandleRenderTargetLoss();
break;
}
}
// Run joystick code // Run joystick code
if (gbUseJoystick) if (gbUseJoystick)
JoystickProc(); JoystickProc();

View file

@ -7,7 +7,12 @@ extern char gDataPath[MAX_PATH];
extern BOOL bFullscreen; extern BOOL bFullscreen;
extern BOOL gbUseJoystick;
void PutFramePerSecound(void); void PutFramePerSecound(void);
unsigned long GetFramePerSecound(void); unsigned long GetFramePerSecound(void);
void InactiveWindow(void);
void ActiveWindow(void);
BOOL SystemTask(void); BOOL SystemTask(void);