浏览代码

Create the SdlApp class to avoid code duplication. Ensure USE_SDL is

tested wherever relevant.
legacy
Sam Hocevar sam 13 年前
父节点
当前提交
e41dd3a949
共有 15 个文件被更改,包括 211 次插入16 次删除
  1. +1
    -1
      configure.ac
  2. +1
    -1
      src/Makefile.am
  3. +6
    -1
      src/audio.cpp
  4. +13
    -7
      src/input.cpp
  5. +5
    -0
      src/lolgl.h
  6. +13
    -2
      src/sample.cpp
  7. +92
    -0
      src/sdlapp.cpp
  8. +36
    -0
      src/sdlapp.h
  9. +20
    -4
      src/tileset.cpp
  10. +2
    -0
      win32/deushax.vcxproj
  11. +6
    -0
      win32/deushax.vcxproj.filters
  12. +2
    -0
      win32/editor.vcxproj
  13. +6
    -0
      win32/editor.vcxproj.filters
  14. +2
    -0
      win32/monsterz.vcxproj
  15. +6
    -0
      win32/monsterz.vcxproj.filters

+ 1
- 1
configure.ac 查看文件

@@ -125,7 +125,7 @@ CPPFLAGS="${save_CPPFLAGS}"
if test "${ac_cv_my_have_sdl}" = "no"; then
AC_MSG_ERROR([[One of SDL, SDL_Image or SDL_Mixer not found]])
else
AC_DEFINE(USE_SDL, 1, Define to 1 to use SDL_image)
AC_DEFINE(USE_SDL, 1, Define to 1 to use SDL)
fi
AM_CONDITIONAL(USE_SDL, test "${ac_cv_my_have_sdl}" = "yes")



+ 1
- 1
src/Makefile.am 查看文件

@@ -11,7 +11,7 @@ liblol_a_SOURCES = \
text.cpp text.h emitter.cpp emitter.h numeric.h hash.cpp hash.h \
worldentity.cpp worldentity.h shader.cpp shader.h \
\
sdlinput.cpp sdlinput.h \
sdlapp.cpp sdlapp.h sdlinput.cpp sdlinput.h \
\
debugfps.cpp debugfps.h debugsphere.cpp debugsphere.h \
debugrecord.cpp debugrecord.h debugstats.cpp debugstats.h


+ 6
- 1
src/audio.cpp 查看文件

@@ -14,7 +14,10 @@

#include <cmath>

#include <SDL_mixer.h>
#if defined USE_SDL
# include <SDL.h>
# include <SDL_mixer.h>
#endif

#include "core.h"

@@ -24,6 +27,8 @@

void Audio::Setup(int channels)
{
#if defined USE_SDL
Mix_OpenAudio(22050, AUDIO_S16, channels, 1024);
#endif
}


+ 13
- 7
src/input.cpp 查看文件

@@ -12,12 +12,14 @@
# include "config.h"
#endif

#include <SDL.h>

#include <cstdio>
#include <cstdlib>
#include <cmath>

#if defined USE_SDL
# include <SDL.h>
#endif

#include "core.h"

/*
@@ -56,18 +58,22 @@ static InputData * const data = &inputdata;
vec2 Input::GetAxis(int axis)
{
float invsqrt2 = sqrtf(0.5f);
vec2 f;
vec2 ret;

#if defined USE_SDL
/* Simulate a joystick using the keyboard. This SDL call is free. */
Uint8 *keystate = SDL_GetKeyState(NULL);
int left = keystate[SDLK_d] - (keystate[SDLK_a] | keystate[SDLK_q]);
int up = (keystate[SDLK_w] | keystate[SDLK_z]) - keystate[SDLK_s] ;
f.x += left;
f.y += up;
ret.x += left;
ret.y += up;
if (left && up)
f = f * invsqrt2;
ret = ret * invsqrt2;
#else
ret = 0;
#endif

return f;
return ret;
}

vec2i Input::GetMousePos()


+ 5
- 0
src/lolgl.h 查看文件

@@ -18,6 +18,11 @@

#define GL_GLEXT_PROTOTYPES

/* Defines for exotic platforms (until they get their config.h) */
#ifdef ANDROID_NDK
# define HAVE_GLES_1X
#endif

/* Only define one GL platform */
#if defined HAVE_GL_1X
# undef HAVE_GLES_1X


+ 13
- 2
src/sample.cpp 查看文件

@@ -13,10 +13,13 @@
#endif

#include <cstdlib>
#include <cstdio>
#include <cmath>

#include <SDL.h>
#include <SDL_mixer.h>
#if defined USE_SDL
# include <SDL.h>
# include <SDL_mixer.h>
#endif

#include "core.h"

@@ -30,7 +33,9 @@ class SampleData

private:
char *name, *path;
#if defined USE_SDL
Mix_Chunk *chunk;
#endif
};

/*
@@ -44,6 +49,7 @@ Sample::Sample(char const *path)
data->path = data->name + 9;
sprintf(data->name, "<sample> %s", path);

#if defined USE_SDL
data->chunk = Mix_LoadWAV(path);
if (!data->chunk)
{
@@ -53,11 +59,14 @@ Sample::Sample(char const *path)
SDL_Quit();
exit(1);
}
#endif
}

Sample::~Sample()
{
#if defined USE_SDL
Mix_FreeChunk(data->chunk);
#endif
free(data->name);
delete data;
}
@@ -74,6 +83,8 @@ char const *Sample::GetName()

void Sample::Play()
{
#if defined USE_SDL
Mix_PlayChannel(-1, data->chunk, 0);
#endif
}


+ 92
- 0
src/sdlapp.cpp 查看文件

@@ -0,0 +1,92 @@
//
// Lol Engine
//
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/projects/COPYING.WTFPL for more details.
//

#if defined HAVE_CONFIG_H
# include "config.h"
#endif

#if defined USE_SDL
# include <SDL.h>
#endif

#include "core.h"
#include "sdlapp.h"

/*
* SDL App implementation class
*/

class SdlAppData
{
friend class SdlApp;

private:
int unused;
};

/*
* Public SdlApp class
*/

SdlApp::SdlApp(char const *title, vec2i res, float fps) :
data(new SdlAppData())
{
#if defined USE_SDL
/* Initialise SDL */
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
{
fprintf(stderr, "Cannot initialise SDL: %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_Surface *video = SDL_SetVideoMode(res.x, res.y, 0, SDL_OPENGL);
if (!video)
{
fprintf(stderr, "Cannot create OpenGL screen: %s\n", SDL_GetError());
SDL_Quit();
exit(EXIT_FAILURE);
}

SDL_WM_SetCaption(title, NULL);
SDL_ShowCursor(0);

/* Initialise everything */
Ticker::Setup(fps);
Video::Setup(video->w, video->h);
Audio::Setup(2);
#endif
}

void SdlApp::Run()
{
while (!Ticker::Finished())
{
/* Tick the game */
Ticker::TickGame();

/* Tick the renderer, show the frame and clamp to desired framerate. */
Ticker::TickDraw();
#if defined USE_SDL
SDL_GL_SwapBuffers();
#endif
Ticker::ClampFps();
}
}

SdlApp::~SdlApp()
{
#if defined USE_SDL
SDL_Quit();
#endif
free(data);
}


+ 36
- 0
src/sdlapp.h 查看文件

@@ -0,0 +1,36 @@
//
// Lol Engine
//
// Copyright: (c) 2010-2011 Sam Hocevar <sam@hocevar.net>
// This program is free software; you can redistribute it and/or
// modify it under the terms of the Do What The Fuck You Want To
// Public License, Version 2, as published by Sam Hocevar. See
// http://sam.zoy.org/projects/COPYING.WTFPL for more details.
//

//
// The SdlApp class
// ----------------
//

#if !defined __DH_SDLAPP_H__
#define __DH_SDLAPP_H__

#include "matrix.h"

class SdlAppData;

class SdlApp
{
public:
SdlApp(char const *title, vec2i res, float fps);
virtual ~SdlApp();

void Run();

private:
SdlAppData *data;
};

#endif // __DH_SDLAPP_H__


+ 20
- 4
src/tileset.cpp 查看文件

@@ -13,6 +13,7 @@
#endif

#include <cstdlib>
#include <cstdio>
#include <cmath>

#ifdef WIN32
@@ -20,8 +21,10 @@
# include <windows.h>
#endif

#include <SDL.h>
#include <SDL_image.h>
#if defined USE_SDL
# include <SDL.h>
# include <SDL_image.h>
#endif

#include "core.h"
#include "lolgl.h"
@@ -40,7 +43,9 @@ private:
vec2i size, count;
float dilate, tx, ty;

#if defined USE_SDL
SDL_Surface *img;
#endif
GLuint texture;
};

@@ -56,9 +61,12 @@ TileSet::TileSet(char const *path, vec2i size, vec2i count, float dilate)
sprintf(data->name, "<tileset> %s", path);

data->tiles = NULL;
#if defined USE_SDL
data->img = NULL;
#endif
data->texture = 0;

#if defined USE_SDL
for (char const *name = path; *name; name++)
if ((data->img = IMG_Load(name)))
break;
@@ -86,10 +94,12 @@ TileSet::TileSet(char const *path, vec2i size, vec2i count, float dilate)
data->size = size;
}

data->dilate = dilate;
data->ntiles = data->count.i * data->count.j;
data->tx = (float)data->size.x / PotUp(data->img->w);
data->ty = (float)data->size.y / PotUp(data->img->h);
#endif

data->dilate = dilate;
data->ntiles = data->count.i * data->count.j;

drawgroup = DRAWGROUP_BEFORE;
}
@@ -105,6 +115,7 @@ void TileSet::TickDraw(float deltams)
{
Entity::TickDraw(deltams);

#if defined USE_SDL
if (IsDestroying())
{
if (data->img)
@@ -145,6 +156,7 @@ void TileSet::TickDraw(float deltams)
SDL_FreeSurface(data->img);
data->img = NULL;
}
#endif
}

char const *TileSet::GetName()
@@ -164,8 +176,10 @@ vec2i TileSet::GetCount() const

void TileSet::Bind()
{
#if defined USE_SDL
if (!data->img)
glBindTexture(GL_TEXTURE_2D, data->texture);
#endif
}

void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o,
@@ -179,6 +193,7 @@ void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o,
int dy = o ? 0 : data->size.y;
int dz = o ? data->size.y : 0;

#if defined USE_SDL
if (!data->img)
{
float tmp[10];
@@ -220,6 +235,7 @@ void TileSet::BlitTile(uint32_t id, int x, int y, int z, int o,
*texture++ = ty + data->ty;
}
else
#endif
{
memset(vertex, 0, 3 * sizeof(float));
memset(texture, 0, 2 * sizeof(float));


+ 2
- 0
win32/deushax.vcxproj 查看文件

@@ -36,6 +36,7 @@
<ClInclude Include="..\src\sample.h" />
<ClInclude Include="..\src\sampler.h" />
<ClInclude Include="..\src\scene.h" />
<ClInclude Include="..\src\sdlapp.h" />
<ClInclude Include="..\src\sdlinput.h" />
<ClInclude Include="..\src\shader.h" />
<ClInclude Include="..\src\text.h" />
@@ -70,6 +71,7 @@
<ClCompile Include="..\src\sample.cpp" />
<ClCompile Include="..\src\sampler.cpp" />
<ClCompile Include="..\src\scene.cpp" />
<ClCompile Include="..\src\sdlapp.cpp" />
<ClCompile Include="..\src\sdlinput.cpp" />
<ClCompile Include="..\src\shader.cpp" />
<ClCompile Include="..\src\text.cpp" />


+ 6
- 0
win32/deushax.vcxproj.filters 查看文件

@@ -66,6 +66,9 @@
<ClInclude Include="..\src\scene.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlapp.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlinput.h">
<Filter>lolengine</Filter>
</ClInclude>
@@ -157,6 +160,9 @@
<ClCompile Include="..\src\scene.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlapp.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlinput.cpp">
<Filter>lolengine</Filter>
</ClCompile>


+ 2
- 0
win32/editor.vcxproj 查看文件

@@ -36,6 +36,7 @@
<ClInclude Include="..\src\sample.h" />
<ClInclude Include="..\src\sampler.h" />
<ClInclude Include="..\src\scene.h" />
<ClInclude Include="..\src\sdlapp.h" />
<ClInclude Include="..\src\sdlinput.h" />
<ClInclude Include="..\src\shader.h" />
<ClInclude Include="..\src\text.h" />
@@ -70,6 +71,7 @@
<ClCompile Include="..\src\sample.cpp" />
<ClCompile Include="..\src\sampler.cpp" />
<ClCompile Include="..\src\scene.cpp" />
<ClCompile Include="..\src\sdlapp.cpp" />
<ClCompile Include="..\src\sdlinput.cpp" />
<ClCompile Include="..\src\shader.cpp" />
<ClCompile Include="..\src\text.cpp" />


+ 6
- 0
win32/editor.vcxproj.filters 查看文件

@@ -66,6 +66,9 @@
<ClInclude Include="..\src\scene.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlapp.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlinput.h">
<Filter>lolengine</Filter>
</ClInclude>
@@ -157,6 +160,9 @@
<ClCompile Include="..\src\scene.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlapp.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlinput.cpp">
<Filter>lolengine</Filter>
</ClCompile>


+ 2
- 0
win32/monsterz.vcxproj 查看文件

@@ -41,6 +41,7 @@
<ClInclude Include="..\src\sample.h" />
<ClInclude Include="..\src\sampler.h" />
<ClInclude Include="..\src\scene.h" />
<ClInclude Include="..\src\sdlapp.h" />
<ClInclude Include="..\src\sdlinput.h" />
<ClInclude Include="..\src\shader.h" />
<ClInclude Include="..\src\text.h" />
@@ -79,6 +80,7 @@
<ClCompile Include="..\src\sample.cpp" />
<ClCompile Include="..\src\sampler.cpp" />
<ClCompile Include="..\src\scene.cpp" />
<ClCompile Include="..\src\sdlapp.cpp" />
<ClCompile Include="..\src\sdlinput.cpp" />
<ClCompile Include="..\src\shader.cpp" />
<ClCompile Include="..\src\text.cpp" />


+ 6
- 0
win32/monsterz.vcxproj.filters 查看文件

@@ -66,6 +66,9 @@
<ClInclude Include="..\src\scene.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlapp.h">
<Filter>lolengine</Filter>
</ClInclude>
<ClInclude Include="..\src\sdlinput.h">
<Filter>lolengine</Filter>
</ClInclude>
@@ -162,6 +165,9 @@
<ClCompile Include="..\src\scene.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlapp.cpp">
<Filter>lolengine</Filter>
</ClCompile>
<ClCompile Include="..\src\sdlinput.cpp">
<Filter>lolengine</Filter>
</ClCompile>


正在加载...
取消
保存