Browse Source

fixed emscripten build

dmuratshin 10 years ago
parent
commit
b39b96fbc8

+ 2 - 2
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 09ef2cef93f6d300de6116847a1e4552c241601e
+node: 642e851e1e425ff89c0b1224c0a114ce06971861
 branch: default
 latesttag: oldrender
-latesttagdistance: 779
+latesttagdistance: 783

BIN
examples/Game/part5/data/ui.xml.ox/atlas/1_0.png


BIN
examples/Game/part5/data/ui.xml.ox/atlas/2_0.png


File diff suppressed because it is too large
+ 0 - 1
examples/Game/part5/data/ui.xml.ox/meta.xml


+ 2 - 17
examples/HelloWorld/src/example.cpp

@@ -21,11 +21,7 @@ public:
 
         //setup it:
         //set button.png image. Resource 'button' defined in 'res.xml'
-        button->setResAnim(gameResources.getResAnim("anim"));
-        //button->setScale(3);
-        //button->setRotation(1);
-        button->setAnchor(Vector2(0.5, 0.5f));
-        //button->addTween(TweenAnim(gameResources.getResAnim("anim")), 5000, -1);
+        button->setResAnim(gameResources.getResAnim("button"));
 
         //centered button at screen
         Vector2 pos = getStage()->getSize() / 2 - button->getSize() / 2;
@@ -42,17 +38,6 @@ public:
             log::messageln("button clicked");
         });
 
-
-        button->addEventListener(TouchEvent::OVER, [ = ](Event * e)->void
-        {
-            button->setColor(Color::Red);
-        });
-
-        button->addEventListener(TouchEvent::OUT, [ = ](Event * e)->void
-        {
-            button->setColor(Color::White);
-        });
-
 #endif
 
         //attach button as child to current actor
@@ -66,7 +51,7 @@ public:
         //create TextField Actor
         spTextField text = new TextField();
         //attach it as child to button
-        //text->attachTo(button);
+        text->attachTo(button);
         //centered in button
         text->setPosition(button->getSize() / 2);
 

+ 3 - 15
oxygine/src/Clock.cpp

@@ -9,6 +9,7 @@
 #   include "core/android/jniUtils.h"
 #elif EMSCRIPTEN
 #include <sys/time.h>
+#include "SDL_timer.h"
 #elif __APPLE__
 #   include <CoreFoundation/CFDate.h>
 #   include <sys/time.h>
@@ -147,23 +148,10 @@ namespace oxygine
     {
 #if __S3E__
         return (timeMS)s3eTimerGetUST();
+#elif EMSCRIPTEN
+        return SDL_GetTicks();
 #elif OXYGINE_SDL
         return SDL_GetTicks();
-#elif EMSCRIPTEN
-        static bool init = false;
-        static struct timespec start_ts;
-        if (!init)
-        {
-            init = true;
-            clock_gettime(CLOCK_MONOTONIC, &start_ts);
-        }
-
-        struct timespec now;
-        clock_gettime(CLOCK_MONOTONIC, &now);
-        timeMS ticks = (now.tv_sec - start_ts.tv_sec) * 1000 + (now.tv_nsec -
-                       start_ts.tv_nsec) / 1000000;
-
-        return ticks;
 #else
 #pragma error "getTimeMS not implemented"
 #endif

+ 50 - 28
oxygine/src/core/oxygine.cpp

@@ -89,6 +89,8 @@ namespace oxygine
     static ThreadMessages _uiMessages;
     Mutex mutexAlloc;
 
+    bool _useTouchAPI = false;
+
 #if EMSCRIPTEN
     static Point _displaySize(0, 0);
     static void* _window = 0;
@@ -272,6 +274,7 @@ namespace oxygine
 
             s3eDeviceRegister(S3E_DEVICE_UNPAUSE, applicationUnPause, 0);
             s3eDeviceRegister(S3E_DEVICE_PAUSE, applicationPause, 0);
+
 #elif EMSCRIPTEN
             log::messageln("EMSCRIPTEN build");
 
@@ -291,6 +294,18 @@ namespace oxygine
             _displaySize = Point(desc.w, desc.h);
 
             emscripten_SDL_SetEventHandler(SDL_eventsHandler, 0);
+
+            int v = EM_ASM_INT(
+            {
+                var p = navigator.platform;
+                if (p === 'iPad' || p === 'iPhone' || p === 'iPod')
+                    return 1;
+                return 0;
+            }, 0);
+
+            if (v)
+                _useTouchAPI = true;
+
 #elif OXYGINE_SDL
 
             log::messageln("SDL build");
@@ -311,11 +326,8 @@ namespace oxygine
             SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
             SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 
-#ifndef EMSCRIPTEN
             if (desc.force_gles)
                 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
-#endif
-
 
             SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1);
 
@@ -357,10 +369,13 @@ namespace oxygine
 
             SDL_GL_SetSwapInterval(desc.vsync ? 1 : 0);
 
+            if (SDL_GetNumTouchDevices() > 0)
+                _useTouchAPI = true;
 
             //SDL_SetEventFilter(eventsFilter, 0);
 
 #endif
+
             file::init(desc.companyName, desc.appName);
             init2();
         }
@@ -589,50 +604,57 @@ namespace oxygine
                     KeyEvent ev(KeyEvent::KEY_UP, &event.key);
                     stage->dispatchEvent(&ev);
                 } break;
-#if SDL_VIDEO_OPENGL || EMSCRIPTEN
+
                 case SDL_MOUSEMOTION:
-                    input->sendPointerMotionEvent(stage, (float)event.motion.x, (float)event.motion.y, 1.0f, &input->_pointerMouse);
+                    if (!_useTouchAPI)
+                        input->sendPointerMotionEvent(stage, (float)event.motion.x, (float)event.motion.y, 1.0f, &input->_pointerMouse);
                     break;
                 case SDL_MOUSEBUTTONDOWN:
                 case SDL_MOUSEBUTTONUP:
                 {
-                    MouseButton b = MouseButton_Left;
-                    switch (event.button.button)
+                    if (!_useTouchAPI)
                     {
-                        case 1: b = MouseButton_Left; break;
-                        case 2: b = MouseButton_Middle; break;
-                        case 3: b = MouseButton_Right; break;
+                        MouseButton b = MouseButton_Left;
+                        switch (event.button.button)
+                        {
+                            case 1: b = MouseButton_Left; break;
+                            case 2: b = MouseButton_Middle; break;
+                            case 3: b = MouseButton_Right; break;
+                        }
+
+                        input->sendPointerButtonEvent(stage, b, (float)event.button.x, (float)event.button.y, 1.0f,
+                                                      event.type == SDL_MOUSEBUTTONDOWN ? TouchEvent::TOUCH_DOWN : TouchEvent::TOUCH_UP, &input->_pointerMouse);
                     }
-
-                    input->sendPointerButtonEvent(stage, b, (float)event.button.x, (float)event.button.y, 1.0f,
-                                                  event.type == SDL_MOUSEBUTTONDOWN ? TouchEvent::TOUCH_DOWN : TouchEvent::TOUCH_UP, &input->_pointerMouse);
                 }
                 break;
-#else
-
                 case SDL_FINGERMOTION:
                 {
-                    //log::messageln("SDL_FINGERMOTION");
-                    Vector2 pos = convertTouch(event);
-                    input->sendPointerMotionEvent(stage,
-                                                  pos.x, pos.y, event.tfinger.pressure,
-                                                  input->getTouchByID((int)event.tfinger.fingerId));
+                    if (_useTouchAPI)
+                    {
+                        //log::messageln("SDL_FINGERMOTION");
+                        Vector2 pos = convertTouch(event);
+                        input->sendPointerMotionEvent(stage,
+                                                      pos.x, pos.y, event.tfinger.pressure,
+                                                      input->getTouchByID((int)event.tfinger.fingerId));
+                    }
                 }
 
                 break;
                 case SDL_FINGERDOWN:
                 case SDL_FINGERUP:
                 {
-                    //log::messageln("SDL_FINGER");
-                    Vector2 pos = convertTouch(event);
-                    input->sendPointerButtonEvent(stage,
-                                                  MouseButton_Touch,
-                                                  pos.x, pos.y, event.tfinger.pressure,
-                                                  event.type == SDL_FINGERDOWN ? TouchEvent::TOUCH_DOWN : TouchEvent::TOUCH_UP,
-                                                  input->getTouchByID((int)event.tfinger.fingerId));
+                    if (_useTouchAPI)
+                    {
+                        //log::messageln("SDL_FINGER");
+                        Vector2 pos = convertTouch(event);
+                        input->sendPointerButtonEvent(stage,
+                                                      MouseButton_Touch,
+                                                      pos.x, pos.y, event.tfinger.pressure,
+                                                      event.type == SDL_FINGERDOWN ? TouchEvent::TOUCH_DOWN : TouchEvent::TOUCH_UP,
+                                                      input->getTouchByID((int)event.tfinger.fingerId));
+                    }
                 }
                 break;
-#endif
             }
 
         }

Some files were not shown because too many files changed in this diff