fix for building without python, also rework python-main-loop control in the BGE...
authorCampbell Barton <ideasman42@gmail.com>
Tue, 4 Sep 2012 03:26:12 +0000 (03:26 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 4 Sep 2012 03:26:12 +0000 (03:26 +0000)
intern/ghost/intern/GHOST_SystemWin32.cpp
source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
source/gameengine/Ketsji/KX_PythonMain.cpp

index 6c201c24c3d9f36087b065ef1b53abd338000beb..52ebaf024045ad02123f62308d8c119c5bab64be 100644 (file)
@@ -724,7 +724,7 @@ GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_IWindow *window, RAWINP
                int r;
                GetKeyboardState((PBYTE)state);
 
-               if (r = ToUnicodeEx(vk, 0, state, utf16, 2, 0, system->m_keylayout)) {
+               if ((r = ToUnicodeEx(vk, 0, state, utf16, 2, 0, system->m_keylayout))) {
                        if ((r > 0 && r < 3)) {
                                utf16[r] = 0;
                                conv_utf_16_to_8(utf16, utf8_char, 6);
index feec67b509a6c51e7069a6290c2c0dfc88471397..ed8a6cc7220b0cbc2da6841616f4cc2bf8640a4b 100644 (file)
@@ -439,7 +439,6 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
                        rasterizer->SetBackColor(scene->gm.framing.col[0], scene->gm.framing.col[1], scene->gm.framing.col[2], 0.0f);
                }
                
-               char *python_main = NULL;
                if (exitrequested != KX_EXIT_REQUEST_QUIT_GAME)
                {
                        if (rv3d->persp != RV3D_CAMOB)
@@ -534,18 +533,17 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
                                // Could be in StartEngine set the framerate, we need the scene to do this
                                ketsjiengine->SetAnimFrameRate(FPS);
                                
+#ifdef WITH_PYTHON
                                char *python_main = NULL;
                                pynextframestate.state = NULL;
                                pynextframestate.func = NULL;
-#ifdef WITH_PYTHON
                                python_main = KX_GetPythonMain(scene);
-#endif // WITH_PYTHON
+
                                // the mainloop
                                printf("\nBlender Game Engine Started\n");
                                if (python_main) {
                                        char *python_code = KX_GetPythonCode(blenderdata, python_main);
                                        if (python_code) {
-#ifdef WITH_PYTHON                         
                                                ketsjinextframestate.ketsjiengine = ketsjiengine;
                                                ketsjinextframestate.C = C;
                                                ketsjinextframestate.win = win;
@@ -560,11 +558,12 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
                                                printf("Yielding control to Python script '%s'...\n", python_main);
                                                PyRun_SimpleString(python_code);
                                                printf("Exit Python script '%s'\n", python_main);
-#endif // WITH_PYTHON                          
                                                MEM_freeN(python_code);
-                                       }                               
+                                       }
                                }
-                               else {
+                               else
+#endif  /* WITH_PYTHON */
+                               {
                                        while (!exitrequested)
                                        {
                                                exitrequested = BL_KetsjiNextFrame(ketsjiengine, C, win, scene, ar, keyboarddevice, mousedevice, draw_letterbox);
@@ -572,7 +571,9 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
                                }
                                printf("Blender Game Engine Finished\n");
                                exitstring = ketsjiengine->GetExitString();
+#ifdef WITH_PYTHON
                                if (python_main) MEM_freeN(python_main);
+#endif  /* WITH_PYTHON */
 
                                gs = *(ketsjiengine->GetGlobalSettings());
 
index 969ecbea5a9287c6a19acd18f6aec87e2e44da10..d5550ce4380e7ba2da6d656049e48dfde4b0cd65 100644 (file)
 extern "C" {
 #endif
 
-#include "RNA_access.h"
+#include <stddef.h>
+
 #include "MEM_guardedalloc.h"
+
+#include "BLI_string.h"
+#include "BLI_listbase.h"
+
 #include "BKE_text.h"
 #include "BKE_main.h"
+#include "BKE_idprop.h"
+
 
 #ifdef __cplusplus
 }
 #endif
 
-extern "C" char *KX_GetPythonMain(struct Scenescene)
+extern "C" char *KX_GetPythonMain(struct Scene *scene)
 {
-    //examine custom scene properties
+       /* examine custom scene properties */
+       if (scene->id.properties) {
+               IDProperty *item = IDP_GetPropertyTypeFromGroup(scene->id.properties, "__main__", IDP_STRING);
+               if (item) {
+                       return BLI_strdup(IDP_String(item));
+               }
+       }
 
-    PointerRNA sceneptr;
-    RNA_id_pointer_create(&scene->id, &sceneptr);
-
-    PropertyRNA *pymain = RNA_struct_find_property(&sceneptr, "[\"__main__\"]");
-    if (pymain == NULL) return NULL;
-    char *python_main;
-    int len;
-    python_main = RNA_property_string_get_alloc(&sceneptr, pymain, NULL, 0, &len);
-    return python_main;
+       return NULL;
 }
 
-extern "C" char *KX_GetPythonCode(Main *main, char *python_main)
+extern "C" char *KX_GetPythonCode(Main *bmain, char *python_main)
 {
-    PointerRNA mainptr, txtptr;
-    PropertyRNA *texts;
+       Text *text;
 
-    RNA_main_pointer_create(main, &mainptr);
-    texts = RNA_struct_find_property(&mainptr, "texts");
-    char *python_code = NULL;
-    int ok = RNA_property_collection_lookup_string(&mainptr, texts, python_main, &txtptr);
-    if (ok) {
-        Text *text = (Text *) txtptr.data;
-        python_code = txt_to_buf(text);
-    }
-    return python_code;
-}
+       if ((text = (Text *)BLI_findstring(&bmain->text, python_main, offsetof(ID, name) + 2))) {
+               return txt_to_buf(text);
+       }
 
+       return NULL;
+}