Compiles and starts to run scripts.
This commit is contained in:
parent
9f44dc055c
commit
93481c1f66
3 changed files with 39 additions and 12 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -31,3 +31,4 @@ singe/thirdparty/SDL2_image/external/tiff-4.1.0/autom4te.cache/
|
||||||
thirdparty-build/
|
thirdparty-build/
|
||||||
singe/extensions.h
|
singe/extensions.h
|
||||||
videotest/*.singe
|
videotest/*.singe
|
||||||
|
games/
|
||||||
|
|
|
@ -178,6 +178,7 @@ static double _overlayScaleX = 1; // Difference between overlay
|
||||||
static double _overlayScaleY = 1; // Difference between overlay and video
|
static double _overlayScaleY = 1; // Difference between overlay and video
|
||||||
static bool _pauseState = false; // by RDG2010
|
static bool _pauseState = false; // by RDG2010
|
||||||
static bool _pauseEnabled = true; // by RDG2010
|
static bool _pauseEnabled = true; // by RDG2010
|
||||||
|
static bool _refreshDisplay = false;
|
||||||
static bool _running = true;
|
static bool _running = true;
|
||||||
static bool _discStopped = true;
|
static bool _discStopped = true;
|
||||||
static bool _mouseEnabled = true;
|
static bool _mouseEnabled = true;
|
||||||
|
@ -294,6 +295,7 @@ int apiSingeVersion(lua_State *L);
|
||||||
int apiSingeSetGameName(lua_State *L);
|
int apiSingeSetGameName(lua_State *L);
|
||||||
int apiSingeGetScriptPath(lua_State *L);
|
int apiSingeGetScriptPath(lua_State *L);
|
||||||
void callLua(const char *func, const char *sig, ...);
|
void callLua(const char *func, const char *sig, ...);
|
||||||
|
void channelFinished(int channel);
|
||||||
int luaError(lua_State *L);
|
int luaError(lua_State *L);
|
||||||
void processKey(bool down, int keysym);
|
void processKey(bool down, int keysym);
|
||||||
|
|
||||||
|
@ -487,6 +489,7 @@ int apiDiscPlay(lua_State *L) {
|
||||||
(void)L;
|
(void)L;
|
||||||
videoPlay(_videoHandle);
|
videoPlay(_videoHandle);
|
||||||
_discStopped = false;
|
_discStopped = false;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -584,6 +587,8 @@ int apiDiscStop(lua_State *L) {
|
||||||
(void)L;
|
(void)L;
|
||||||
videoPause(_videoHandle);
|
videoPause(_videoHandle);
|
||||||
_discStopped = true;
|
_discStopped = true;
|
||||||
|
_refreshDisplay = true;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -755,6 +760,7 @@ int apiOverlayClear(lua_State *L) {
|
||||||
(void)L;
|
(void)L;
|
||||||
SDL_SetRenderDrawColor(_renderer, _colorBackground.r, _colorBackground.g, _colorBackground.b, _colorBackground.a);
|
SDL_SetRenderDrawColor(_renderer, _colorBackground.r, _colorBackground.g, _colorBackground.b, _colorBackground.a);
|
||||||
SDL_RenderClear(_renderer);
|
SDL_RenderClear(_renderer);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -835,6 +841,7 @@ int apiSoundPlay(lua_State *L) {
|
||||||
// Get our sound structure
|
// Get our sound structure
|
||||||
HASH_FIND_INT(_soundList, &id, sound);
|
HASH_FIND_INT(_soundList, &id, sound);
|
||||||
if (!sound) utilDie("No sound at index %d in apiSoundPlay.", id);
|
if (!sound) utilDie("No sound at index %d in apiSoundPlay.", id);
|
||||||
|
// Play it
|
||||||
result = Mix_PlayChannel(-1, sound->chunk, 0);
|
result = Mix_PlayChannel(-1, sound->chunk, 0);
|
||||||
Mix_Volume(result, _effectsVolume * 2);
|
Mix_Volume(result, _effectsVolume * 2);
|
||||||
}
|
}
|
||||||
|
@ -1339,6 +1346,7 @@ int apiSingeDisablePauseKey(lua_State *L) {
|
||||||
int apiSingeQuit(lua_State *L) {
|
int apiSingeQuit(lua_State *L) {
|
||||||
(void)L;
|
(void)L;
|
||||||
_running = false;
|
_running = false;
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1481,6 +1489,11 @@ void callLua(const char *func, const char *sig, ...) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void channelFinished(int channel) {
|
||||||
|
callLua("onSoundCompleted", "i", channel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int luaError(lua_State *L) {
|
int luaError(lua_State *L) {
|
||||||
lua_Debug ar;
|
lua_Debug ar;
|
||||||
int level = 0;
|
int level = 0;
|
||||||
|
@ -1574,7 +1587,6 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
int thisFrame = -1;
|
int thisFrame = -1;
|
||||||
int lastFrame = -1;
|
int lastFrame = -1;
|
||||||
int intReturn = 0;
|
int intReturn = 0;
|
||||||
bool refresh = false;
|
|
||||||
SDL_Texture *videoTexture = NULL;
|
SDL_Texture *videoTexture = NULL;
|
||||||
SpriteT *sprite = NULL;
|
SpriteT *sprite = NULL;
|
||||||
SpriteT *spriteTemp = NULL;
|
SpriteT *spriteTemp = NULL;
|
||||||
|
@ -1602,7 +1614,6 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
_luaContext = luaL_newstate();
|
_luaContext = luaL_newstate();
|
||||||
luaL_openlibs(_luaContext);
|
luaL_openlibs(_luaContext);
|
||||||
lua_atpanic(_luaContext, luaError);
|
lua_atpanic(_luaContext, luaError);
|
||||||
if (luaL_dofile(_luaContext, _confScriptFile) != 0) utilDie("Error compiling script: %s", lua_tostring(_luaContext, -1));
|
|
||||||
|
|
||||||
// Lua API for Singe
|
// Lua API for Singe
|
||||||
lua_register(_luaContext, "colorBackground", apiColorBackground);
|
lua_register(_luaContext, "colorBackground", apiColorBackground);
|
||||||
|
@ -1699,6 +1710,7 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
_mice[x].y = videoGetHeight(_videoHandle) / 2;
|
_mice[x].y = videoGetHeight(_videoHandle) / 2;
|
||||||
}
|
}
|
||||||
SDL_SetWindowGrab(_window, SDL_TRUE);
|
SDL_SetWindowGrab(_window, SDL_TRUE);
|
||||||
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
|
|
||||||
// Create overlay texture
|
// Create overlay texture
|
||||||
_overlay = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, videoGetWidth(_videoHandle), videoGetHeight(_videoHandle));
|
_overlay = SDL_CreateTexture(_renderer, SDL_PIXELFORMAT_BGRA32, SDL_TEXTUREACCESS_TARGET, videoGetWidth(_videoHandle), videoGetHeight(_videoHandle));
|
||||||
|
@ -1712,11 +1724,16 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
_effectsVolume = (int)((float)AUDIO_MAX_VOLUME * (float)_confVolumeNonVldp * (float)0.01);
|
_effectsVolume = (int)((float)AUDIO_MAX_VOLUME * (float)_confVolumeNonVldp * (float)0.01);
|
||||||
Mix_Volume(-1, _effectsVolume * 2);
|
Mix_Volume(-1, _effectsVolume * 2);
|
||||||
|
|
||||||
// Start video
|
// Let us know when sounds end
|
||||||
|
Mix_ChannelFinished(channelFinished);
|
||||||
|
|
||||||
|
// Start video paused
|
||||||
videoPlay(_videoHandle);
|
videoPlay(_videoHandle);
|
||||||
|
videoPause(_videoHandle);
|
||||||
_discStopped = false;
|
_discStopped = false;
|
||||||
|
|
||||||
//***TODO*** Sound completed callback
|
// Start script
|
||||||
|
if (luaL_dofile(_luaContext, _confScriptFile) != 0) utilDie("Error compiling script: %s", lua_tostring(_luaContext, -1));
|
||||||
|
|
||||||
// Game Loop
|
// Game Loop
|
||||||
while (_running) {
|
while (_running) {
|
||||||
|
@ -1829,28 +1846,34 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
SDL_SetRenderTarget(_renderer, _overlay);
|
SDL_SetRenderTarget(_renderer, _overlay);
|
||||||
callLua("onOverlayUpdate", ">i", &intReturn);
|
callLua("onOverlayUpdate", ">i", &intReturn);
|
||||||
if (intReturn == 1) {
|
if (intReturn == 1) {
|
||||||
refresh = true;
|
_refreshDisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update video
|
// Update video
|
||||||
thisFrame = videoUpdate(_videoHandle, &videoTexture);
|
thisFrame = videoUpdate(_videoHandle, &videoTexture);
|
||||||
if ((thisFrame != lastFrame) && (thisFrame>= 0)) {
|
if ((thisFrame != lastFrame) && (thisFrame>= 0)) {
|
||||||
lastFrame = thisFrame;
|
lastFrame = thisFrame;
|
||||||
refresh = true;
|
_refreshDisplay = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update display
|
// Update display
|
||||||
if (refresh) {
|
if (_refreshDisplay) {
|
||||||
|
//***TODO*** Handle overlay and blank disk frames
|
||||||
SDL_SetRenderTarget(_renderer, NULL);
|
SDL_SetRenderTarget(_renderer, NULL);
|
||||||
SDL_RenderCopy(_renderer, videoTexture, NULL, NULL);
|
SDL_RenderCopy(_renderer, videoTexture, NULL, NULL);
|
||||||
|
//SDL_RenderCopy(_renderer, _overlay, NULL, NULL);
|
||||||
SDL_RenderPresent(_renderer);
|
SDL_RenderPresent(_renderer);
|
||||||
refresh = false;
|
_refreshDisplay = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// End game
|
// End game
|
||||||
callLua("onShutdown", "");
|
callLua("onShutdown", "");
|
||||||
|
|
||||||
|
// Stop all sounds
|
||||||
|
Mix_HaltChannel(-1);
|
||||||
|
Mix_ChannelFinished(NULL);
|
||||||
|
|
||||||
// Stop Lua
|
// Stop Lua
|
||||||
lua_close(_luaContext);
|
lua_close(_luaContext);
|
||||||
|
|
||||||
|
@ -1891,5 +1914,6 @@ void singe(SDL_Window *window, SDL_Renderer *renderer) {
|
||||||
videoUnload(_videoHandle);
|
videoUnload(_videoHandle);
|
||||||
|
|
||||||
// Stop mice
|
// Stop mice
|
||||||
|
SDL_ShowCursor(SDL_ENABLE);
|
||||||
ManyMouse_Quit();
|
ManyMouse_Quit();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,6 +17,8 @@
|
||||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
TARGET = singeEmu
|
||||||
|
|
||||||
# We're just a boring old C app
|
# We're just a boring old C app
|
||||||
TEMPLATE = app
|
TEMPLATE = app
|
||||||
CONFIG += console
|
CONFIG += console
|
||||||
|
|
Loading…
Add table
Reference in a new issue