Split SDL2 code from Main.cpp
This commit is contained in:
parent
51562f6fd8
commit
3a5a5044b1
5 changed files with 286 additions and 238 deletions
|
@ -163,8 +163,10 @@ add_executable(CSE2 WIN32
|
|||
"src/ValueView.cpp"
|
||||
"src/ValueView.h"
|
||||
"src/WindowsWrapper.h"
|
||||
"src/Backends/Rendering.h"
|
||||
"src/Backends/Platform/SDL2.cpp"
|
||||
"src/Backends/Audio.h"
|
||||
"src/Backends/Platform.h"
|
||||
"src/Backends/Rendering.h"
|
||||
)
|
||||
|
||||
set(RESOURCES
|
||||
|
|
11
src/Backends/Platform.h
Normal file
11
src/Backends/Platform.h
Normal 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);
|
254
src/Backends/Platform/SDL2.cpp
Normal file
254
src/Backends/Platform/SDL2.cpp
Normal 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;
|
||||
}
|
248
src/Main.cpp
248
src/Main.cpp
|
@ -5,10 +5,9 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "SDL.h"
|
||||
|
||||
#include "WindowsWrapper.h"
|
||||
|
||||
#include "Backends/Platform.h"
|
||||
#include "Backends/Rendering.h"
|
||||
#include "CommonDefines.h"
|
||||
#include "Config.h"
|
||||
|
@ -33,7 +32,6 @@ BOOL gbUseJoystick = FALSE;
|
|||
|
||||
int gJoystickButtonTable[8];
|
||||
|
||||
static BOOL bActive = TRUE;
|
||||
static BOOL bFps = FALSE;
|
||||
|
||||
static int windowWidth;
|
||||
|
@ -90,14 +88,10 @@ int main(int argc, char *argv[])
|
|||
|
||||
int i;
|
||||
|
||||
SDL_Init(SDL_INIT_EVENTS);
|
||||
PlatformBackend_Init();
|
||||
|
||||
// Get executable's path
|
||||
char *base_path = SDL_GetBasePath();
|
||||
size_t base_path_length = strlen(base_path);
|
||||
base_path[base_path_length - 1] = '\0';
|
||||
strcpy(gModulePath, base_path);
|
||||
SDL_free(base_path);
|
||||
PlatformBackend_GetBasePath(gModulePath);
|
||||
|
||||
// Get path of the data folder
|
||||
strcpy(gDataPath, gModulePath);
|
||||
|
@ -194,13 +188,6 @@ int main(int argc, char *argv[])
|
|||
|
||||
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)
|
||||
{
|
||||
case 1:
|
||||
|
@ -255,14 +242,14 @@ int main(int argc, char *argv[])
|
|||
|
||||
bFullscreen = TRUE;
|
||||
|
||||
SDL_ShowCursor(SDL_DISABLE);
|
||||
//SDL_ShowCursor(SDL_DISABLE);
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef DEBUG_SAVE
|
||||
SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
|
||||
//SDL_EventState(SDL_DROPFILE, SDL_ENABLE);
|
||||
#endif
|
||||
|
||||
/*
|
||||
// Set up the cursor
|
||||
size_t 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_Cursor *cursor = SDL_CreateColorCursor(cursor_surface, 0, 0);
|
||||
SDL_SetCursor(cursor);
|
||||
|
||||
*/
|
||||
if (IsKeyFile("fps"))
|
||||
bFps = TRUE;
|
||||
|
||||
|
@ -291,8 +278,8 @@ int main(int argc, char *argv[])
|
|||
// Draw to screen
|
||||
if (!Flip_SystemTask())
|
||||
{
|
||||
SDL_FreeCursor(cursor);
|
||||
SDL_FreeSurface(cursor_surface);
|
||||
// SDL_FreeCursor(cursor);
|
||||
// SDL_FreeSurface(cursor_surface);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -317,10 +304,10 @@ int main(int argc, char *argv[])
|
|||
EndTextObject();
|
||||
EndDirectSound();
|
||||
EndDirectDraw();
|
||||
|
||||
/*
|
||||
SDL_FreeCursor(cursor);
|
||||
SDL_FreeSurface(cursor_surface);
|
||||
|
||||
*/
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -353,220 +340,9 @@ void JoystickProc(void);
|
|||
|
||||
BOOL SystemTask(void)
|
||||
{
|
||||
while (SDL_PollEvent(NULL) || !bActive)
|
||||
{
|
||||
SDL_Event event;
|
||||
|
||||
if (!SDL_WaitEvent(&event))
|
||||
if (!PlatformBackend_SystemTask())
|
||||
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
|
||||
if (gbUseJoystick)
|
||||
JoystickProc();
|
||||
|
|
|
@ -7,7 +7,12 @@ extern char gDataPath[MAX_PATH];
|
|||
|
||||
extern BOOL bFullscreen;
|
||||
|
||||
extern BOOL gbUseJoystick;
|
||||
|
||||
void PutFramePerSecound(void);
|
||||
unsigned long GetFramePerSecound(void);
|
||||
|
||||
void InactiveWindow(void);
|
||||
void ActiveWindow(void);
|
||||
|
||||
BOOL SystemTask(void);
|
||||
|
|
Loading…
Add table
Reference in a new issue