diff --git a/Example.GameLib/.clang-format b/Example.GameLib/.clang-format new file mode 100644 index 0000000..9bc28aa --- /dev/null +++ b/Example.GameLib/.clang-format @@ -0,0 +1,65 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: true +AlignEscapedNewlinesLeft: false +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: true +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: All +AlwaysBreakAfterDefinitionReturnType: false +AlwaysBreakTemplateDeclarations: false +AlwaysBreakBeforeMultilineStrings: false +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BinPackParameters: true +BinPackArguments: true +ColumnLimit: 80 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +IndentCaseLabels: false +IndentWrappedFunctionNames: false +IndentFunctionDeclarationAfterType: false +MaxEmptyLinesToKeep: 1 +KeepEmptyLinesAtTheStartOfBlocks: true +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakString: 1000 +PenaltyBreakFirstLessLess: 120 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 60 +PointerAlignment: Right +SpacesBeforeTrailingComments: 1 +Cpp11BracedListStyle: true +Standard: Cpp11 +IndentWidth: 4 +TabWidth: 4 +UseTab: true +BreakBeforeBraces: Attach +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpacesInAngles: false +SpaceInEmptyParentheses: false +SpacesInCStyleCastParentheses: false +SpaceAfterCStyleCast: false +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +ContinuationIndentWidth: 4 +CommentPragmas: '^ IWYU pragma:' +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +SpaceBeforeParens: ControlStatements +DisableFormat: false +... + diff --git a/Example.GameLib/.gitignore b/Example.GameLib/.gitignore new file mode 100644 index 0000000..c8262c6 --- /dev/null +++ b/Example.GameLib/.gitignore @@ -0,0 +1,12 @@ +build-* +*.dll +*.exe +*.so +*.so.* +DIST/* +shot-????.bmp +shot-????.png +.vscode/.BROWSE.VC.DB +.vscode/.BROWSE.VC.DB-wal +.DS_Store +*/DIST/* diff --git a/Example.GameLib/Makefile b/Example.GameLib/Makefile index 2c56af4..e8417b8 100644 --- a/Example.GameLib/Makefile +++ b/Example.GameLib/Makefile @@ -2,13 +2,20 @@ VERBOSE_BUILD := false GAMELIB_DIR := .. GameLibConfig := $(GAMELIB_DIR)/gamelib-config +GAMELIB_MAKEPARAMS := -LIBS := $(shell $(GameLibConfig) --libs) -STATICLIBS := $(shell $(GameLibConfig) --static-libs) -CFLAGS := $(shell $(GameLibConfig) --cflags) -PLATFORM := $(shell $(GameLibConfig) --platform) -EXEEXT := $(shell $(GameLibConfig) --exe-extension) -LDFLAGS := +ARCH := +ifeq ($(arch),emscripten) + ARCH := emscripten + GAMELIB_MAKEPARAMS := arch=emscripten +endif + +LIBS := $(shell $(GameLibConfig) $(ARCH) --libs) +STATICLIBS := $(shell $(GameLibConfig) $(ARCH) --static-libs) +CFLAGS := $(shell $(GameLibConfig) $(ARCH) --cflags) +PLATFORM := $(shell $(GameLibConfig) $(ARCH) --platform) +EXEEXT := $(shell $(GameLibConfig) $(ARCH) --exe-extension) +LDFLAGS := $(shell $(GameLibConfig) $(ARCH) --ldflags) RES_GAME := game$(EXEEXT) BUILDDIR := build-$(PLATFORM) @@ -16,16 +23,16 @@ BUILDDIR := build-$(PLATFORM) IsMinGW := $(findstring MINGW,$(shell uname -s)) $(findstring MSYS,$(shell uname -s)) IsDarwin := $(findstring Darwin,$(shell uname -s)) ifneq (,$(IsMinGW)) - TARGET_ARCH := mingw + HOST_ARCH := mingw else ifneq (,$(IsDarwin)) - TARGET_ARCH := macosx + HOST_ARCH := macosx else - TARGET_ARCH := linux + HOST_ARCH := linux endif endif -ifeq ($(TARGET_ARCH),mingw) +ifeq ($(HOST_ARCH),mingw) CC := gcc AR := ar LAUNCHER := @@ -33,7 +40,7 @@ ifeq ($(TARGET_ARCH),mingw) MKDIR := mkdir ECHO := echo endif -ifeq ($(TARGET_ARCH),linux) +ifeq ($(HOST_ARCH),linux) CC := gcc AR := ar LAUNCHER := @@ -41,14 +48,20 @@ ifeq ($(TARGET_ARCH),linux) MKDIR := mkdir ECHO := echo endif -ifeq ($(TARGET_ARCH),macosx) +ifeq ($(HOST_ARCH),macosx) CC := gcc AR := ar LAUNCHER := RM := rm -rf MKDIR := mkdir ECHO := echo - LIBS := $(LIBS) macosx/SDLMain.m endif +ifeq ($(ARCH),emscripten) + CC := emcc + AR := emar + LAUNCHER := emrun --port 8080 +endif + + include Makefile.common.mk \ No newline at end of file diff --git a/Example.GameLib/Makefile.emscripten.mk b/Example.GameLib/Makefile.emscripten.mk deleted file mode 100644 index 5fc62ef..0000000 --- a/Example.GameLib/Makefile.emscripten.mk +++ /dev/null @@ -1,30 +0,0 @@ -CC := emcc -AR := emar -LAUNCHER := emrun --port 8080 -RM := del /Q /S -MKDIR := mkdir -ECHO := echo -VERBOSE_BUILD := false - -GAMELIB_DIR := .. -GAMELIB_MAKEPARAMS := -f Makefile.emscripten.mk - -LIBS := -STATICLIBS := $(GAMELIB_DIR)/build-emscripten-release/libgame.a -CFLAGS := -s FULL_ES2=1 -s ASM_JS=1 -O1 -Wno-implicit-function-declaration -DEMSCRIPTEN -I$(GAMELIB_DIR)/src -PLATFORM := emscripten -EXEEXT := .html -LDFLAGS := --preload-file data -s TOTAL_MEMORY=134217728 -lidbfs.js - -RES_GAME := game$(EXEEXT) -BUILDDIR := build-$(PLATFORM) - -ifeq ($(target),release) - CFLAGS := $(CFLAGS) -O2 - BUILDDIR := build-emscripten-release - GAMELIB_MAKEPARAMS := -f Makefile.emscripten.mk target=release -endif - -include Makefile.common.mk - - diff --git a/Example.GameLib/dist-emscripten.cmd b/Example.GameLib/dist-emscripten.cmd deleted file mode 100644 index ed1e6d2..0000000 --- a/Example.GameLib/dist-emscripten.cmd +++ /dev/null @@ -1,11 +0,0 @@ -call c:\emsdk\emsdk_env.bat - -make -f Makefile.emscripten.mk target=release full-clean -make -f Makefile.emscripten.mk target=release - -mkdir DIST\web -xcopy web\* DIST\web\ /s /e /y -xcopy build-emscripten-release\game.* DIST\web\ /s /e /y - - -pause \ No newline at end of file diff --git a/Example.GameLib/dist-emscripten.sh b/Example.GameLib/dist-emscripten.sh new file mode 100644 index 0000000..5f41f94 --- /dev/null +++ b/Example.GameLib/dist-emscripten.sh @@ -0,0 +1,8 @@ +source /c/emsdk/emsdk_env.sh + +make arch=emscripten full-clean +make arch=emscripten + +mkdir -p DIST/web +cp -Rv web/* DIST/web/ +cp -Rv build-emscripten/game.* DIST/web/ diff --git a/Example.GameLib/macosx/SDLMain.m b/Example.GameLib/macosx/SDLMain.m deleted file mode 100644 index 62bc171..0000000 --- a/Example.GameLib/macosx/SDLMain.m +++ /dev/null @@ -1,384 +0,0 @@ -/* SDLMain.m - main entry point for our Cocoa-ized SDL app - Initial Version: Darrell Walisser - Non-NIB-Code & other changes: Max Horn - - Feel free to customize this file to suit your needs -*/ - -#include -#import - -@interface SDLMain : NSObject -@end - -#include /* for MAXPATHLEN */ -#include - -/* For some reaon, Apple removed setAppleMenu from the headers in 10.4, - but the method still is there and works. To avoid warnings, we declare - it ourselves here. */ -@interface NSApplication(SDL_Missing_Methods) -- (void)setAppleMenu:(NSMenu *)menu; -@end - -/* Use this flag to determine whether we use SDLMain.nib or not */ -#define SDL_USE_NIB_FILE 0 - -/* Use this flag to determine whether we use CPS (docking) or not */ -#define SDL_USE_CPS 1 -#ifdef SDL_USE_CPS -/* Portions of CPS.h */ -typedef struct CPSProcessSerNum -{ - UInt32 lo; - UInt32 hi; -} CPSProcessSerNum; - -extern OSErr CPSGetCurrentProcess( CPSProcessSerNum *psn); -extern OSErr CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5); -extern OSErr CPSSetFrontProcess( CPSProcessSerNum *psn); - -#endif /* SDL_USE_CPS */ - -static int gArgc; -static char **gArgv; -static BOOL gFinderLaunch; -static BOOL gCalledAppMainline = FALSE; - -static NSString *getApplicationName(void) -{ - const NSDictionary *dict; - NSString *appName = 0; - - /* Determine the application name */ - dict = (const NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle()); - if (dict) - appName = [dict objectForKey: @"CFBundleName"]; - - if (![appName length]) - appName = [[NSProcessInfo processInfo] processName]; - - return appName; -} - -#if SDL_USE_NIB_FILE -/* A helper category for NSString */ -@interface NSString (ReplaceSubString) -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString; -@end -#endif - -@interface NSApplication (SDLApplication) -@end - -@implementation NSApplication (SDLApplication) -/* Invoked from the Quit menu item */ -- (void)terminate:(id)sender -{ - /* Post a SDL_QUIT event */ - SDL_Event event; - event.type = SDL_QUIT; - SDL_PushEvent(&event); -} -@end - -/* The main class of the application, the application's delegate */ -@implementation SDLMain - -/* Set the working directory to the .app's parent directory */ -- (void) setupWorkingDirectory:(BOOL)shouldChdir -{ - if (shouldChdir) - { - char parentdir[MAXPATHLEN]; - CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle()); - CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url); - if (CFURLGetFileSystemRepresentation(url2, 1, (UInt8 *)parentdir, MAXPATHLEN)) { - chdir(parentdir); /* chdir to the binary app's parent */ - } - CFRelease(url); - CFRelease(url2); - } -} - -#if SDL_USE_NIB_FILE - -/* Fix menu to contain the real app name instead of "SDL App" */ -- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName -{ - NSRange aRange; - NSEnumerator *enumerator; - NSMenuItem *menuItem; - - aRange = [[aMenu title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]]; - - enumerator = [[aMenu itemArray] objectEnumerator]; - while ((menuItem = [enumerator nextObject])) - { - aRange = [[menuItem title] rangeOfString:@"SDL App"]; - if (aRange.length != 0) - [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]]; - if ([menuItem hasSubmenu]) - [self fixMenu:[menuItem submenu] withAppName:appName]; - } -} - -#else - -static void setApplicationMenu(void) -{ - /* warning: this code is very odd */ - NSMenu *appleMenu; - NSMenuItem *menuItem; - NSString *title; - NSString *appName; - - appName = getApplicationName(); - appleMenu = [[NSMenu alloc] initWithTitle:@""]; - - /* Add menu items */ - title = [@"About " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Hide " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"]; - - menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"]; - [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)]; - - [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""]; - - [appleMenu addItem:[NSMenuItem separatorItem]]; - - title = [@"Quit " stringByAppendingString:appName]; - [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"]; - - - /* Put menu into the menubar */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; - [menuItem setSubmenu:appleMenu]; - [[NSApp mainMenu] addItem:menuItem]; - - /* Tell the application object that this is now the application menu */ - [NSApp setAppleMenu:appleMenu]; - - /* Finally give up our references to the objects */ - [appleMenu release]; - [menuItem release]; -} - -/* Create a window menu */ -static void setupWindowMenu(void) -{ - NSMenu *windowMenu; - NSMenuItem *windowMenuItem; - NSMenuItem *menuItem; - - windowMenu = [[NSMenu alloc] initWithTitle:@"Window"]; - - /* "Minimize" item */ - menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"]; - [windowMenu addItem:menuItem]; - [menuItem release]; - - /* Put menu into the menubar */ - windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""]; - [windowMenuItem setSubmenu:windowMenu]; - [[NSApp mainMenu] addItem:windowMenuItem]; - - /* Tell the application object that this is now the window menu */ - [NSApp setWindowsMenu:windowMenu]; - - /* Finally give up our references to the objects */ - [windowMenu release]; - [windowMenuItem release]; -} - -/* Replacement for NSApplicationMain */ -static void CustomApplicationMain (int argc, char **argv) -{ - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - SDLMain *sdlMain; - - /* Ensure the application object is initialised */ - [NSApplication sharedApplication]; - -#ifdef SDL_USE_CPS - { - CPSProcessSerNum PSN; - /* Tell the dock about us */ - if (!CPSGetCurrentProcess(&PSN)) - if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103)) - if (!CPSSetFrontProcess(&PSN)) - [NSApplication sharedApplication]; - } -#endif /* SDL_USE_CPS */ - - /* Set up the menubar */ - [NSApp setMainMenu:[[NSMenu alloc] init]]; - setApplicationMenu(); - setupWindowMenu(); - - /* Create SDLMain and make it the app delegate */ - sdlMain = [[SDLMain alloc] init]; - [NSApp setDelegate:sdlMain]; - - /* Start the main event loop */ - [NSApp run]; - - [sdlMain release]; - [pool release]; -} - -#endif - - -/* - * Catch document open requests...this lets us notice files when the app - * was launched by double-clicking a document, or when a document was - * dragged/dropped on the app's icon. You need to have a - * CFBundleDocumentsType section in your Info.plist to get this message, - * apparently. - * - * Files are added to gArgv, so to the app, they'll look like command line - * arguments. Previously, apps launched from the finder had nothing but - * an argv[0]. - * - * This message may be received multiple times to open several docs on launch. - * - * This message is ignored once the app's mainline has been called. - */ -- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename -{ - const char *temparg; - size_t arglen; - char *arg; - char **newargv; - - if (!gFinderLaunch) /* MacOS is passing command line args. */ - return FALSE; - - if (gCalledAppMainline) /* app has started, ignore this document. */ - return FALSE; - - temparg = [filename UTF8String]; - arglen = SDL_strlen(temparg) + 1; - arg = (char *) SDL_malloc(arglen); - if (arg == NULL) - return FALSE; - - newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2)); - if (newargv == NULL) - { - SDL_free(arg); - return FALSE; - } - gArgv = newargv; - - SDL_strlcpy(arg, temparg, arglen); - gArgv[gArgc++] = arg; - gArgv[gArgc] = NULL; - return TRUE; -} - - -/* Called when the internal event loop has just started running */ -- (void) applicationDidFinishLaunching: (NSNotification *) note -{ - int status; - - /* Set the working directory to the .app's parent directory */ - [self setupWorkingDirectory:gFinderLaunch]; - -#if SDL_USE_NIB_FILE - /* Set the main menu to contain the real app name instead of "SDL App" */ - [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()]; -#endif - - /* Hand off to main application code */ - gCalledAppMainline = TRUE; - status = SDL_main (gArgc, gArgv); - - /* We're done, thank you for playing */ - exit(status); -} -@end - - -@implementation NSString (ReplaceSubString) - -- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString -{ - unsigned int bufferSize; - unsigned int selfLen = [self length]; - unsigned int aStringLen = [aString length]; - unichar *buffer; - NSRange localRange; - NSString *result; - - bufferSize = selfLen + aStringLen - aRange.length; - buffer = (unichar *)NSAllocateMemoryPages(bufferSize*sizeof(unichar)); - - /* Get first part into buffer */ - localRange.location = 0; - localRange.length = aRange.location; - [self getCharacters:buffer range:localRange]; - - /* Get middle part into buffer */ - localRange.location = 0; - localRange.length = aStringLen; - [aString getCharacters:(buffer+aRange.location) range:localRange]; - - /* Get last part into buffer */ - localRange.location = aRange.location + aRange.length; - localRange.length = selfLen - localRange.location; - [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange]; - - /* Build output string */ - result = [NSString stringWithCharacters:buffer length:bufferSize]; - - NSDeallocateMemoryPages(buffer, bufferSize); - - return result; -} - -@end - - - -#ifdef main -# undef main -#endif - - -/* Main entry point to executable - should *not* be SDL_main! */ -int main (int argc, char **argv) -{ - /* Copy the arguments into a global variable */ - /* This is passed if we are launched by double-clicking */ - if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) { - gArgv = (char **) SDL_malloc(sizeof (char *) * 2); - gArgv[0] = argv[0]; - gArgv[1] = NULL; - gArgc = 1; - gFinderLaunch = YES; - } else { - int i; - gArgc = argc; - gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1)); - for (i = 0; i <= argc; i++) - gArgv[i] = argv[i]; - gFinderLaunch = NO; - } - -#if SDL_USE_NIB_FILE - NSApplicationMain (argc, argv); -#else - CustomApplicationMain (argc, argv); -#endif - return 0; -} diff --git a/Makefile b/Makefile index 343f59b..3843f99 100644 --- a/Makefile +++ b/Makefile @@ -4,16 +4,21 @@ VERBOSE_BUILD := false IsMinGW := $(findstring MINGW,$(shell uname -s)) $(findstring MSYS,$(shell uname -s)) IsDarwin := $(findstring Darwin,$(shell uname -s)) ifneq (,$(IsMinGW)) - TARGET_ARCH := mingw + HOST_ARCH := mingw else ifneq (,$(IsDarwin)) - TARGET_ARCH := macosx + HOST_ARCH := macosx else - TARGET_ARCH := linux + HOST_ARCH := linux endif endif -ifeq ($(TARGET_ARCH),mingw) +ifeq ($(arch),emscripten) + HOST_ARCH := emscripten +endif + + +ifeq ($(HOST_ARCH),mingw) CC := gcc AR := ar LAUNCHER := @@ -28,7 +33,7 @@ ifeq ($(TARGET_ARCH),mingw) RES_GAMELIB := libgame.a BUILDDIR := build-$(shell gcc -v 2>&1 | grep "Target:" | cut --delimiter=' ' --fields=2) endif -ifeq ($(TARGET_ARCH),linux) +ifeq ($(HOST_ARCH),linux) CC := gcc AR := ar LAUNCHER := @@ -44,14 +49,13 @@ ifeq ($(TARGET_ARCH),linux) RES_GAME := game BUILDDIR := build-$(shell gcc -v 2>&1 | grep "Target:" | cut --delimiter=' ' --fields=2) endif -ifeq ($(TARGET_ARCH),macosx) +ifeq ($(HOST_ARCH),macosx) CC := gcc AR := ar LAUNCHER := RM := rm -rf MKDIR := mkdir ECHO := echo - VERBOSE_BUILD := false LIBS := -framework Cocoa -lm -framework OpenGL -framework SDL macosx/SDLMain.m CFLAGS := -Wall -g -DMACOSX -ObjC -Dmain=SDL_main -I/usr/include/ -I/usr/include/SDL/ -I/usr/X11R6/include/ @@ -60,5 +64,20 @@ ifeq ($(TARGET_ARCH),macosx) RES_GAMELIB := libgame.a BUILDDIR := build-$(shell gcc -v 2>&1 | grep "Target:" | cut -d ' ' -f 2) endif +ifeq ($(HOST_ARCH),emscripten) + CC := emcc + AR := emar + LAUNCHER := emrun --port 8080 + RM := rm -rf + MKDIR := mkdir + ECHO := echo + + LIBS := + CFLAGS := -s FULL_ES2=1 -s ASM_JS=1 -s USE_SDL=2 -O2 -Wno-implicit-function-declaration -DEMSCRIPTEN + LDFLAGS := --preload-file data -s TOTAL_MEMORY=134217728 -lidbfs.js + + RES_GAMELIB := libgame.a + BUILDDIR := build-emscripten +endif include Makefile.common.mk \ No newline at end of file diff --git a/Makefile.emscripten.mk b/Makefile.emscripten.mk index 3e828c2..62a1ca0 100644 --- a/Makefile.emscripten.mk +++ b/Makefile.emscripten.mk @@ -7,17 +7,12 @@ ECHO := echo VERBOSE_BUILD := false LIBS := -CFLAGS := -s FULL_ES2=1 -s ASM_JS=1 -O1 -Wno-implicit-function-declaration -DEMSCRIPTEN +CFLAGS := -s FULL_ES2=1 -s ASM_JS=1 -s USE_SDL=2 -O2 -Wno-implicit-function-declaration -DEMSCRIPTEN LDFLAGS := --preload-file data -s TOTAL_MEMORY=134217728 -lidbfs.js RES_GAMELIB := libgame.a BUILDDIR := build-emscripten -ifeq ($(target),release) - CFLAGS := $(CFLAGS) -O2 - BUILDDIR := build-emscripten-release -endif - include Makefile.common.mk diff --git a/gamelib-config b/gamelib-config index 11628d6..7a4126c 100644 --- a/gamelib-config +++ b/gamelib-config @@ -16,7 +16,10 @@ gcctarget=$( gcc -v 2>&1 | grep "Target:" | cut --delimiter=' ' --fields=2 ) if test $# -gt 0; then if test $1 = "emscripten"; then uname="EMSCRIPTEN" - unamem="EMSCRIPTEN" + shift + fi + if test $1 = "Darwin"; then + uname="Darwin" shift fi fi @@ -24,45 +27,52 @@ case "$uname" in *MINGW* | *MSYS*) # Configuracion de Win32/Mingw libs="-lopengl32 $(sdl2-config --libs)" - cflags="-g -mwindows -D_GNU_SOURCE=1 -DWIN32 $(sdl2-config --cflags)" + cflags="-g -mwindows -D_GNU_SOURCE=1 -DWIN32 $(sdl2-config --cflags) -I$prefix/src" builddir="build-$gcctarget" platform="$gcctarget" exeextension=".exe" + ldflags="" ;; *EMSCRIPTEN*) # Configuracion de Emscripten libs="" - cflags="-s FULL_ES2=1 -s ASM_JS=1 -Wno-implicit-function-declaration" + cflags="-s FULL_ES2=1 -s ASM_JS=1 -s USE_SDL=2 -O2 -Wno-implicit-function-declaration -I$prefix/src" builddir="build-emscripten" platform="emscripten" exeextension=".html" + ldflags="--preload-file data -s TOTAL_MEMORY=134217728 -lidbfs.js" ;; *Darwin*) # Configuracion de MacOSX - libs="-framework Cocoa -lm -framework OpenGL -framework SDL" - cflags="-Wall -g -DMACOSX -ObjC -Dmain=SDL_main -I/usr/include/ -I/usr/include/SDL/ -I/usr/X11R6/include/" + libs="-framework Cocoa -lm -framework OpenGL -framework SDL $prefix/macosx/SDLMain.m" + cflags="-Wall -g -DMACOSX -ObjC -Dmain=SDL_main -I/usr/include/ -I/usr/include/SDL/ -I/usr/X11R6/include/ -I$prefix/src" builddir="build-$gcctarget" platform="$gcctarget" exeextension="" + ldflags="" ;; *) # Configuracion de Linux libs="-lpthread -L/usr/X11R6/lib -L/usr/lib -lm -lGL -lX11 $(sdl2-config --libs)" - cflags="-Wall -g -I/usr/include/ -I/usr/X11R6/include/ $(sdl2-config --cflags)" + cflags="-Wall -g -I/usr/include/ -I/usr/X11R6/include/ $(sdl2-config --cflags) -I$prefix/src" builddir="build-$gcctarget" platform="$gcctarget" exeextension="" + ldflags="" ;; esac while test $# -gt 0; do case $1 in --cflags) - echo "$cflags -I$prefix/src" + echo "$cflags" ;; --libs) echo "$libs" ;; + --ldflags) + echo "$ldflags" + ;; --static-libs) echo "$prefix/$builddir/libgame.a" ;; diff --git a/src/Draw.c b/src/Draw.c index 5ee4256..e29b1a0 100644 --- a/src/Draw.c +++ b/src/Draw.c @@ -493,10 +493,6 @@ int Draw_LoopIteration() { Input_SetPointerPosition(event.tfinger.x, event.tfinger.y); Input_SetPointerDown(1); } - if (event.type == SDL_TOUCHBUTTONDOWN) { - Input_SetPointerPosition(event.tfinger.x, event.tfinger.y); - Input_SetPointerDown(1); - } if (event.type == SDL_MOUSEBUTTONUP) { Input_SetPointerPosition(event.button.x / (float)_width, event.button.y / (float)_height); @@ -506,10 +502,6 @@ int Draw_LoopIteration() { Input_SetPointerPosition(event.tfinger.x, event.tfinger.y); Input_SetPointerDown(0); } - if (event.type == SDL_TOUCHBUTTONUP) { - Input_SetPointerPosition(event.tfinger.x, event.tfinger.y); - Input_SetPointerDown(0); - } } #else while (SDL_PollEvent(&event)) { diff --git a/src/Util.c b/src/Util.c index 7520f24..f6822f0 100644 --- a/src/Util.c +++ b/src/Util.c @@ -31,7 +31,7 @@ int MaximumInt(int i0, int i1) { // Rect // -int Rect_UnionRect(Rect r0, Rect r1, Rect rd) { +void Rect_UnionRect(Rect r0, Rect r1, Rect rd) { rd->x0 = MinimumInt(r0->x0, r1->x0); rd->y0 = MinimumInt(r0->y0, r1->y0); rd->x1 = MaximumInt(r0->x1, r1->x1); diff --git a/src/Util.h b/src/Util.h index 3b3ce7f..b32a9b2 100644 --- a/src/Util.h +++ b/src/Util.h @@ -30,7 +30,7 @@ struct SRect { int y1; }; -int Rect_UnionRect(Rect r0, Rect r1, Rect rd); +void Rect_UnionRect(Rect r0, Rect r1, Rect rd); int Rect_PointInside(Rect r, int x, int y); int Rect_PointInsideAny(TRect r[], int rCount, int x, int y);