Cucumber, first batch of merge - UI changes and custom exit key
authorDalai Felinto <dfelinto@gmail.com>
Tue, 20 Dec 2011 03:11:56 +0000 (03:11 +0000)
committerDalai Felinto <dfelinto@gmail.com>
Tue, 20 Dec 2011 03:11:56 +0000 (03:11 +0000)
---------------------------------------------------------------
This was a test drive to see how painful the merge will be.
Next batches are:
- use desktop option for fullscreen
- multisampling option
- bullet collision mask
- python
- storage (vbo, dl, ...)
- lighting

[lighting still needs review]
[python could use review, although it should be straightforward]
[storage should be tested more I think]

Merged /branches/soc-2011-cucumber:r
36991,37059,37157,37416,37497-37499,37501,37522,39036,40593

36991:
==UI==
* Made some options available in Blender Game that were only available in Blender Render (camera resolution, animation fps)
* Created a panel for the embedded player
* Renamed the FPS option for the standalone player to Refresh Rate
* Moved framing options to display
* Made a button to launch the blender player from within blender (only tested on windows for now)

37059:
==UI==
* Added the option to change the exit key for the BGE. The UI currently just sets a number, and this feature most likely does not work for blenderplayer yet. More work on this to come.
* Removed the physics settings from the scene panel for the BGE.
* Added an Add menu in the logic brick header.

37157:
Making the bake options available in Blender Game

37416:
Making the exit key UI element accept key presses instead of numbers. It still does not work for the Blenderplayer, and it does not limit the input to key presses (other events don't work for exiting)

37497:
Some more work on getting the exit key to work in the Blenderplayer.
Input is now restricted to keyboard events only for the exit key UI.
37498:
Some clean up from the last commit.
The exit key setting affects the Blenderplayer now.
37499:
Cleaning up some duplicate code. Now the reverseTranslateTable for converting blender key codes to ketsji key codes is only defined in BL_BlenderDataConverter.
37501:
Centralizing the exit key methods to the keyboard devices. This should make it easier to get exit key control to the python API.

[37517: committed previously]

37522:
Moved control of the exit key away from the keyboard devices, and moved it to ketsjiengine.
Added setExitKey and getExitKey to the python API

39036:
A couple of the doversions were in the wrong spot. This should fix some issues with the exit key not being set.
[not committed entirely, see below]]

40552: space_logic.py (* fixed an error in space_logic.py *)

40593:
launch blenderplayer from ui not working in OSX fix - by Daniel Stokes and me

########################################################
code left behind (to be included in next commit):
########################################################
{
/* Initialize default values for collision masks */
Object *ob;
for(ob=main->object.first; ob; ob=ob->id.next)
ob->col_group = ob->col_mask = 1;
}

22 files changed:
release/scripts/startup/bl_operators/wm.py
release/scripts/startup/bl_ui/properties_game.py
release/scripts/startup/bl_ui/properties_particle.py
release/scripts/startup/bl_ui/properties_render.py
release/scripts/startup/bl_ui/properties_scene.py
release/scripts/startup/bl_ui/space_logic.py
source/blender/blenloader/intern/readfile.c
source/blender/makesdna/DNA_scene_types.h
source/blender/makesrna/intern/rna_scene.c
source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h
source/gameengine/Converter/BL_BlenderDataConversion.cpp
source/gameengine/Converter/BL_BlenderDataConversion.h
source/gameengine/Converter/KX_ConvertSensors.cpp
source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h
source/gameengine/GamePlayer/ghost/GPG_Application.cpp
source/gameengine/GamePlayer/ghost/GPG_Application.h
source/gameengine/Ketsji/KX_KetsjiEngine.cpp
source/gameengine/Ketsji/KX_KetsjiEngine.h
source/gameengine/Ketsji/KX_PythonInit.cpp

index 1da5e2ca381867435b91d427475d8ba66e620040..58941e00914177fca85aa8b2cd7988e98191b594 100644 (file)
@@ -29,6 +29,8 @@ from bpy.props import (StringProperty,
 
 from rna_prop_ui import rna_idprop_ui_prop_get, rna_idprop_ui_prop_clear
 
+import subprocess
+import os
 
 class MESH_OT_delete_edgeloop(Operator):
     '''Delete an edge loop by merging the faces on each side to a single face loop'''
@@ -1175,6 +1177,26 @@ class WM_OT_copy_prev_settings(Operator):
 
         return {'CANCELLED'}
 
+class WM_OT_blenderplayer_start(bpy.types.Operator):
+    '''Launches the Blenderplayer with the current blendfile'''
+    bl_idname = "wm.blenderplayer_start"
+    bl_label = "Start"
+    
+    blender_bin_path = bpy.app.binary_path
+    blender_bin_dir = os.path.dirname(blender_bin_path)
+    ext = os.path.splitext(blender_bin_path)[-1]
+    player_path = os.path.join(blender_bin_dir, 'blenderplayer' + ext)
+    
+    def execute(self, context):
+        import sys
+
+        if sys.platform == 'darwin':
+            self.player_path = os.path.join(self.blender_bin_dir, '../../../blenderplayer.app/Contents/MacOS/blenderplayer')
+       
+        filepath = bpy.app.tempdir + "game.blend"
+        bpy.ops.wm.save_as_mainfile(filepath=filepath, check_existing=False, copy=True)
+        subprocess.call([self.player_path, filepath])
+        return {'FINISHED'}
 
 class WM_OT_keyconfig_test(Operator):
     "Test keyconfig for conflicts"
index db65b0ff669cb800dced57aeddae3e386a0ac81a..66b8cca786671484255e306a24a3acaa94083ea9 100644 (file)
@@ -244,16 +244,22 @@ class RenderButtonsPanel():
         return (rd.engine in cls.COMPAT_ENGINES)
 
 
-class RENDER_PT_game(RenderButtonsPanel, Panel):
-    bl_label = "Game"
+class RENDER_PT_embedded(RenderButtonsPanel, bpy.types.Panel):
+    bl_label = "Embedded Player"
     COMPAT_ENGINES = {'BLENDER_GAME'}
-
     def draw(self, context):
         layout = self.layout
 
+        rd = context.scene.render
+
         row = layout.row()
         row.operator("view3d.game_start", text="Start")
         row.label()
+        row = layout.row()
+        row.label(text="Resolution:")
+        row = layout.row(align=True)
+        row.prop(rd, "resolution_x", slider=False, text="X")
+        row.prop(rd, "resolution_y", slider=False, text="Y")
 
 
 class RENDER_PT_game_player(RenderButtonsPanel, Panel):
@@ -264,29 +270,23 @@ class RENDER_PT_game_player(RenderButtonsPanel, Panel):
         layout = self.layout
 
         gs = context.scene.game_settings
-
-        layout.prop(gs, "show_fullscreen")
-
-        split = layout.split()
-
-        col = split.column()
-        col.label(text="Resolution:")
-        sub = col.column(align=True)
-        sub.prop(gs, "resolution_x", slider=False, text="X")
-        sub.prop(gs, "resolution_y", slider=False, text="Y")
-
-        col = split.column()
+        
+        row = layout.row()
+        row.operator("wm.blenderplayer_start", text="Start")
+        row.prop(gs, "show_fullscreen")
+        
+        row = layout.row()
+        row.label(text="Resolution:")
+        row = layout.row(align=True)
+        row.prop(gs, "resolution_x", slider=False, text="X")
+        row.prop(gs, "resolution_y", slider=False, text="Y")
+        
+        col = layout.column()
         col.label(text="Quality:")
-        sub = col.column(align=True)
-        sub.prop(gs, "depth", text="Bit Depth", slider=False)
-        sub.prop(gs, "frequency", text="FPS", slider=False)
+        col = layout.column(align=True)
+        col.prop(gs, "depth", text="Bit Depth", slider=False)
+        col.prop(gs, "frequency", text="Refresh Rate", slider=False)
 
-        # framing:
-        col = layout.column()
-        col.label(text="Framing:")
-        col.row().prop(gs, "frame_type", expand=True)
-        if gs.frame_type == 'LETTERBOX':
-            col.prop(gs, "frame_color", text="")
 
 
 class RENDER_PT_game_stereo(RenderButtonsPanel, Panel):
@@ -368,20 +368,24 @@ class RENDER_PT_game_shading(RenderButtonsPanel, Panel):
             col.prop(gs, "use_glsl_extra_textures", text="Extra Textures")
 
 
-class RENDER_PT_game_performance(RenderButtonsPanel, Panel):
-    bl_label = "Performance"
+class RENDER_PT_game_system(RenderButtonsPanel, Panel):
+    bl_label = "System"
     COMPAT_ENGINES = {'BLENDER_GAME'}
 
     def draw(self, context):
         layout = self.layout
 
         gs = context.scene.game_settings
-        col = layout.column()
-        row = col.row()
+        row = layout.row()
         row.prop(gs, "use_frame_rate")
+        row.prop(gs, "restrict_animation_updates")
+
+        row = layout.row()
         row.prop(gs, "use_display_lists")
 
-        col.prop(gs, "restrict_animation_updates")
+        row = layout.row()
+        row.label("Exit Key")
+        row.prop(gs, "exit_key", text="", event=True)
 
 
 class RENDER_PT_game_display(RenderButtonsPanel, Panel):
@@ -391,6 +395,9 @@ class RENDER_PT_game_display(RenderButtonsPanel, Panel):
     def draw(self, context):
         layout = self.layout
 
+        row = layout.row()
+        row.prop(context.scene.render, "fps", text="Animation Frame Rate", slider=False)
+
         gs = context.scene.game_settings
         flow = layout.column_flow()
         flow.prop(gs, "show_debug_properties", text="Debug Properties")
@@ -399,6 +406,12 @@ class RENDER_PT_game_display(RenderButtonsPanel, Panel):
         flow.prop(gs, "use_deprecation_warnings")
         flow.prop(gs, "show_mouse", text="Mouse Cursor")
 
+        col = layout.column()
+        col.label(text="Framing:")
+        col.row().prop(gs, "frame_type", expand=True)
+        if gs.frame_type == 'LETTERBOX':
+            col.prop(gs, "frame_color", text="")
+
 
 class SceneButtonsPanel():
     bl_space_type = 'PROPERTIES'
@@ -463,6 +476,20 @@ class SCENE_PT_game_navmesh(SceneButtonsPanel, Panel):
         row.prop(rd, "sample_dist")
         row.prop(rd, "sample_max_error")
 
+class RENDER_PT_game_sound(RenderButtonsPanel, Panel):
+    bl_label = "Sound"
+    COMPAT_ENGINES = {'BLENDER_GAME'}
+
+    def draw(self, context):
+        layout = self.layout
+
+        scene = context.scene
+
+        layout.prop(scene, "audio_distance_model")
+
+        col = layout.column(align=True)
+        col.prop(scene, "audio_doppler_speed", text="Speed")
+        col.prop(scene, "audio_doppler_factor")
 
 class WorldButtonsPanel():
     bl_space_type = 'PROPERTIES'
index f7f67527b639f5030bd7c52a1d03233c0c93b38d..bc42b2a2a114b5c68512993f2f3947fba38311f3 100644 (file)
@@ -76,15 +76,21 @@ class ParticleButtonsPanel():
 class PARTICLE_PT_context_particles(ParticleButtonsPanel, Panel):
     bl_label = ""
     bl_options = {'HIDE_HEADER'}
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
+    COMPAT_ENGINES = {'BLENDER_RENDER'}
 
     @classmethod
     def poll(cls, context):
         engine = context.scene.render.engine
-        return (context.particle_system or context.object or context.space_data.pin_id) and (engine in cls.COMPAT_ENGINES)
+        return (context.particle_system or context.object or context.space_data.pin_id)# and (engine in cls.COMPAT_ENGINES)
 
     def draw(self, context):
         layout = self.layout
+        
+        if context.scene.render.engine == "BLENDER_GAME":
+            layout.label("The Blender particle system is")
+            layout.label("not available for use in the")
+            layout.label("Blender Game Engine")
+            return
 
         ob = context.object
         psys = context.particle_system
index 4b4c2d2b214cde5d2bd48678b5d7e03c9e7f392f..6a8439ffaaada054f4ef2bee6743f361b97240d5 100644 (file)
@@ -51,7 +51,7 @@ class RenderButtonsPanel():
     @classmethod
     def poll(cls, context):
         rd = context.scene.render
-        return (context.scene and rd.use_game_engine is False) and (rd.engine in cls.COMPAT_ENGINES)
+        return context.scene and (rd.engine in cls.COMPAT_ENGINES)
 
 
 class RENDER_PT_render(RenderButtonsPanel, Panel):
@@ -553,7 +553,7 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
 class RENDER_PT_bake(RenderButtonsPanel, Panel):
     bl_label = "Bake"
     bl_options = {'DEFAULT_CLOSED'}
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
+    COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
 
     def draw(self, context):
         layout = self.layout
index 05f4887a5424403a45fde839c0b9acce401b5d47..6c0d07a15c9265bee9723c2a8abab824207d7136 100644 (file)
@@ -29,12 +29,12 @@ class SceneButtonsPanel():
 
     @classmethod
     def poll(cls, context):
-        return context.scene
+        rd = context.scene.render
+        return context.scene and (rd.engine in cls.COMPAT_ENGINES)
 
 
 class SCENE_PT_scene(SceneButtonsPanel, Panel):
     bl_label = "Scene"
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
 
     def draw(self, context):
         layout = self.layout
@@ -75,7 +75,6 @@ class SCENE_PT_audio(SceneButtonsPanel, Panel):
 
 class SCENE_PT_unit(SceneButtonsPanel, Panel):
     bl_label = "Units"
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
 
     def draw(self, context):
         layout = self.layout
@@ -192,7 +191,6 @@ class SCENE_PT_physics(SceneButtonsPanel, Panel):
 
 class SCENE_PT_simplify(SceneButtonsPanel, Panel):
     bl_label = "Simplify"
-    COMPAT_ENGINES = {'BLENDER_RENDER'}
 
     def draw_header(self, context):
         rd = context.scene.render
index 1ae8095fab3475e49978c4cde32a7e382a748610..1fc58475ace5773f42e2738c0333abcd94a7acc0 100644 (file)
@@ -70,7 +70,9 @@ class LOGIC_HT_header(Header):
         layout.template_header()
 
         if context.area.show_menus:
-            layout.menu("LOGIC_MT_view")
+            row = layout.row(align=True)
+            row.menu("LOGIC_MT_view")
+            row.menu("LOGIC_MT_logicbricks_add")
 
 
 class LOGIC_MT_view(Menu):
index 0feb56b931ffb9375a33c966c8354f4681d1f0a9..593b526d38bae9b42e75cacc93a55c95ff0b78ae 100644 (file)
@@ -12723,6 +12723,14 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                        for (ntree=main->nodetree.first; ntree; ntree=ntree->id.next)
                                do_versions_nodetree_socket_use_flags_2_62(ntree);
                }
+               {
+                       /* Initialize BGE exit key to esc key */
+                       Scene *scene;
+                       for(scene= main->scene.first; scene; scene= scene->id.next) {
+                               if (!scene->gm.exitkey)
+                                       scene->gm.exitkey = 218; // Blender key code for ESC
+                       }
+               }
        }
 
        /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
index 1b849754db84c3599d93c130ebc69fc2d46653ac..345e78d70c9c531e7a5efef7e304a1b7372bc8c3 100644 (file)
@@ -576,7 +576,7 @@ typedef struct GameData {
        short mode, matmode;
        short occlusionRes;             /* resolution of occlusion Z buffer in pixel */
        short physicsEngine;
-       short pad[2];
+       short exitkey, pad;
        short ticrate, maxlogicstep, physubstep, maxphystep;
        short obstacleSimulation, pad1;
        float levelHeight;
index a682c32944402246bd4d4d480ae13bbc8b919f11..9638bba3e80c3308c747061be40c3556c0914db5 100644 (file)
@@ -1213,6 +1213,13 @@ static void rna_GameSettings_auto_start_set(PointerRNA *UNUSED(ptr), int value)
                G.fileflags &= ~G_FILE_AUTOPLAY;
 }
 
+static void rna_GameSettings_exit_key_set(PointerRNA *ptr, int value)
+{
+       GameData *gm = (GameData*)ptr->data;
+
+       if(ISKEYBOARD(value))
+               gm->exitkey=value;
+}
 
 static TimeMarker *rna_TimeLine_add(Scene *scene, const char name[])
 {
@@ -2103,6 +2110,13 @@ static void rna_def_scene_game_data(BlenderRNA *brna)
        RNA_def_property_range(prop, 8, 32);
        RNA_def_property_ui_text(prop, "Bits", "Display bit depth of full screen display");
        RNA_def_property_update(prop, NC_SCENE, NULL);
+
+       prop= RNA_def_property(srna, "exit_key", PROP_ENUM, PROP_NONE);
+       RNA_def_property_enum_sdna(prop, NULL, "exitkey");
+       RNA_def_property_enum_items(prop, event_type_items);
+       RNA_def_property_enum_funcs(prop, NULL, "rna_GameSettings_exit_key_set", NULL);
+       RNA_def_property_ui_text(prop, "Exit Key",  "Sets the key that exits the Game Engine");
+       RNA_def_property_update(prop, NC_SCENE, NULL);
        
        // Do we need it here ? (since we already have it in World
        prop= RNA_def_property(srna, "frequency", PROP_INT, PROP_NONE);
index 360a082b03b302e470aaaa4f7b457634410477a4..445f2b8f0ba8f6ef1d9558fa8195fa42d7b18e20 100644 (file)
@@ -241,6 +241,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
                ketsjiengine->SetUseFixedTime(usefixed);
                ketsjiengine->SetTimingDisplay(frameRate, profile, properties);
                ketsjiengine->SetRestrictAnimationFPS(restrictAnimFPS);
+               KX_KetsjiEngine::SetExitKey(ConvertKeyCode(startscene->gm.exitkey));
 
                //set the global settings (carried over if restart/load new files)
                ketsjiengine->SetGlobalSettings(&gs);
index 1c91f498d32d390f65a31788f1e8c1115489ece6..93bf133635d26cd298fc7457f74603ee5b8dbc1b 100644 (file)
@@ -41,6 +41,7 @@
 #include "wm_event_types.h"
 #include "WM_types.h"
 #include "SCA_IInputDevice.h"
+#include "BL_BlenderDataConversion.h"
 
 #ifdef WITH_CXX_GUARDEDALLOC
 #include "MEM_guardedalloc.h"
 */
 class BL_BlenderInputDevice : public SCA_IInputDevice
 {
-       // this map is Blender specific: a conversion between blender and ketsji enums
-       std::map<int,KX_EnumInputs> m_reverseKeyTranslateTable;
 public:
        BL_BlenderInputDevice()
        {
-
-               /* The reverse table. In order to not confuse ourselves, we      */
-               /* immediately convert all events that come in to KX codes.      */
-               m_reverseKeyTranslateTable[LEFTMOUSE                    ] =     KX_LEFTMOUSE;
-               m_reverseKeyTranslateTable[MIDDLEMOUSE                  ] =     KX_MIDDLEMOUSE;
-               m_reverseKeyTranslateTable[RIGHTMOUSE                   ] =     KX_RIGHTMOUSE;
-               m_reverseKeyTranslateTable[WHEELUPMOUSE                 ] =     KX_WHEELUPMOUSE;
-               m_reverseKeyTranslateTable[WHEELDOWNMOUSE               ] =     KX_WHEELDOWNMOUSE;
-               m_reverseKeyTranslateTable[MOUSEX                       ] =     KX_MOUSEX;
-               m_reverseKeyTranslateTable[MOUSEY                       ] =     KX_MOUSEY;
-
-               // TIMERS
-
-               m_reverseKeyTranslateTable[TIMER0                           ] = KX_TIMER0;
-               m_reverseKeyTranslateTable[TIMER1                           ] = KX_TIMER1;
-               m_reverseKeyTranslateTable[TIMER2                           ] = KX_TIMER2;
-
-               // SYSTEM
-#if 0
-               /* **** XXX **** */
-               m_reverseKeyTranslateTable[KEYBD                            ] = KX_KEYBD;
-               m_reverseKeyTranslateTable[RAWKEYBD                         ] = KX_RAWKEYBD;
-               m_reverseKeyTranslateTable[REDRAW                           ] = KX_REDRAW;
-               m_reverseKeyTranslateTable[INPUTCHANGE                      ] = KX_INPUTCHANGE;
-               m_reverseKeyTranslateTable[QFULL                            ] = KX_QFULL;
-               m_reverseKeyTranslateTable[WINFREEZE                        ] = KX_WINFREEZE;
-               m_reverseKeyTranslateTable[WINTHAW                          ] = KX_WINTHAW;
-               m_reverseKeyTranslateTable[WINCLOSE                         ] = KX_WINCLOSE;
-               m_reverseKeyTranslateTable[WINQUIT                          ] = KX_WINQUIT;
-               m_reverseKeyTranslateTable[Q_FIRSTTIME                      ] = KX_Q_FIRSTTIME;
-               /* **** XXX **** */
-#endif
-               // standard keyboard
-
-               m_reverseKeyTranslateTable[AKEY                             ] = KX_AKEY;
-               m_reverseKeyTranslateTable[BKEY                             ] = KX_BKEY;
-               m_reverseKeyTranslateTable[CKEY                             ] = KX_CKEY;
-               m_reverseKeyTranslateTable[DKEY                             ] = KX_DKEY;
-               m_reverseKeyTranslateTable[EKEY                             ] = KX_EKEY;
-               m_reverseKeyTranslateTable[FKEY                             ] = KX_FKEY;
-               m_reverseKeyTranslateTable[GKEY                             ] = KX_GKEY;
-               //XXX clean up
-#ifdef WIN32
-#define HKEY   'h'
-#endif
-               m_reverseKeyTranslateTable[HKEY                             ] = KX_HKEY;
-               //XXX clean up
-#ifdef WIN32
-#undef HKEY
-#endif
-               m_reverseKeyTranslateTable[IKEY                             ] = KX_IKEY;
-               m_reverseKeyTranslateTable[JKEY                             ] = KX_JKEY;
-               m_reverseKeyTranslateTable[KKEY                             ] = KX_KKEY;
-               m_reverseKeyTranslateTable[LKEY                             ] = KX_LKEY;
-               m_reverseKeyTranslateTable[MKEY                             ] = KX_MKEY;
-               m_reverseKeyTranslateTable[NKEY                             ] = KX_NKEY;
-               m_reverseKeyTranslateTable[OKEY                             ] = KX_OKEY;
-               m_reverseKeyTranslateTable[PKEY                             ] = KX_PKEY;
-               m_reverseKeyTranslateTable[QKEY                             ] = KX_QKEY;
-               m_reverseKeyTranslateTable[RKEY                             ] = KX_RKEY;
-               m_reverseKeyTranslateTable[SKEY                             ] = KX_SKEY;
-               m_reverseKeyTranslateTable[TKEY                             ] = KX_TKEY;
-               m_reverseKeyTranslateTable[UKEY                             ] = KX_UKEY;
-               m_reverseKeyTranslateTable[VKEY                             ] = KX_VKEY;
-               m_reverseKeyTranslateTable[WKEY                             ] = KX_WKEY;
-               m_reverseKeyTranslateTable[XKEY                             ] = KX_XKEY;
-               m_reverseKeyTranslateTable[YKEY                             ] = KX_YKEY;
-               m_reverseKeyTranslateTable[ZKEY                             ] = KX_ZKEY;
-
-               m_reverseKeyTranslateTable[ZEROKEY                              ] = KX_ZEROKEY;
-               m_reverseKeyTranslateTable[ONEKEY                               ] = KX_ONEKEY;
-               m_reverseKeyTranslateTable[TWOKEY                               ] = KX_TWOKEY;
-               m_reverseKeyTranslateTable[THREEKEY                     ] = KX_THREEKEY;
-               m_reverseKeyTranslateTable[FOURKEY                              ] = KX_FOURKEY;
-               m_reverseKeyTranslateTable[FIVEKEY                              ] = KX_FIVEKEY;
-               m_reverseKeyTranslateTable[SIXKEY                               ] = KX_SIXKEY;
-               m_reverseKeyTranslateTable[SEVENKEY                         ] = KX_SEVENKEY;
-               m_reverseKeyTranslateTable[EIGHTKEY                         ] = KX_EIGHTKEY;
-               m_reverseKeyTranslateTable[NINEKEY                              ] = KX_NINEKEY;
-
-               m_reverseKeyTranslateTable[CAPSLOCKKEY                      ] = KX_CAPSLOCKKEY;
-
-               m_reverseKeyTranslateTable[LEFTCTRLKEY                  ] = KX_LEFTCTRLKEY;
-               m_reverseKeyTranslateTable[LEFTALTKEY                   ] = KX_LEFTALTKEY;
-               m_reverseKeyTranslateTable[RIGHTALTKEY                  ] = KX_RIGHTALTKEY;
-               m_reverseKeyTranslateTable[RIGHTCTRLKEY                         ] = KX_RIGHTCTRLKEY;
-               m_reverseKeyTranslateTable[RIGHTSHIFTKEY                        ] = KX_RIGHTSHIFTKEY;
-               m_reverseKeyTranslateTable[LEFTSHIFTKEY                     ] = KX_LEFTSHIFTKEY;
-
-               m_reverseKeyTranslateTable[ESCKEY                           ] = KX_ESCKEY;
-               m_reverseKeyTranslateTable[TABKEY                           ] = KX_TABKEY;
-               m_reverseKeyTranslateTable[RETKEY                           ] = KX_RETKEY;
-               m_reverseKeyTranslateTable[SPACEKEY                         ] = KX_SPACEKEY;
-               m_reverseKeyTranslateTable[LINEFEEDKEY                  ] = KX_LINEFEEDKEY;
-               m_reverseKeyTranslateTable[BACKSPACEKEY                     ] = KX_BACKSPACEKEY;
-               m_reverseKeyTranslateTable[DELKEY                           ] = KX_DELKEY;
-               m_reverseKeyTranslateTable[SEMICOLONKEY                     ] = KX_SEMICOLONKEY;
-               m_reverseKeyTranslateTable[PERIODKEY                    ] = KX_PERIODKEY;
-               m_reverseKeyTranslateTable[COMMAKEY                             ] = KX_COMMAKEY;
-               m_reverseKeyTranslateTable[QUOTEKEY                             ] = KX_QUOTEKEY;
-               m_reverseKeyTranslateTable[ACCENTGRAVEKEY                       ] = KX_ACCENTGRAVEKEY;
-               m_reverseKeyTranslateTable[MINUSKEY                             ] = KX_MINUSKEY;
-               m_reverseKeyTranslateTable[SLASHKEY                             ] = KX_SLASHKEY;
-               m_reverseKeyTranslateTable[BACKSLASHKEY                     ] = KX_BACKSLASHKEY;
-               m_reverseKeyTranslateTable[EQUALKEY                             ] = KX_EQUALKEY;
-               m_reverseKeyTranslateTable[LEFTBRACKETKEY                       ] = KX_LEFTBRACKETKEY;
-               m_reverseKeyTranslateTable[RIGHTBRACKETKEY                      ] = KX_RIGHTBRACKETKEY;
-
-               m_reverseKeyTranslateTable[LEFTARROWKEY                     ] = KX_LEFTARROWKEY;
-               m_reverseKeyTranslateTable[DOWNARROWKEY                     ] = KX_DOWNARROWKEY;
-               m_reverseKeyTranslateTable[RIGHTARROWKEY                        ] = KX_RIGHTARROWKEY;
-               m_reverseKeyTranslateTable[UPARROWKEY                   ] = KX_UPARROWKEY;
-
-               m_reverseKeyTranslateTable[PAD2                         ] = KX_PAD2;
-               m_reverseKeyTranslateTable[PAD4                         ] = KX_PAD4;
-               m_reverseKeyTranslateTable[PAD6                         ] = KX_PAD6;
-               m_reverseKeyTranslateTable[PAD8                         ] = KX_PAD8;
-
-               m_reverseKeyTranslateTable[PAD1                         ] = KX_PAD1;
-               m_reverseKeyTranslateTable[PAD3                         ] = KX_PAD3;
-               m_reverseKeyTranslateTable[PAD5                         ] = KX_PAD5;
-               m_reverseKeyTranslateTable[PAD7                         ] = KX_PAD7;
-               m_reverseKeyTranslateTable[PAD9                         ] = KX_PAD9;
-
-               m_reverseKeyTranslateTable[PADPERIOD                        ] = KX_PADPERIOD;
-               m_reverseKeyTranslateTable[PADSLASHKEY                    ] = KX_PADSLASHKEY;
-               m_reverseKeyTranslateTable[PADASTERKEY                      ] = KX_PADASTERKEY;
-
-
-               m_reverseKeyTranslateTable[PAD0                         ] = KX_PAD0;
-               m_reverseKeyTranslateTable[PADMINUS                         ] = KX_PADMINUS;
-               m_reverseKeyTranslateTable[PADENTER                         ] = KX_PADENTER;
-               m_reverseKeyTranslateTable[PADPLUSKEY                       ] = KX_PADPLUSKEY;
-
-
-               m_reverseKeyTranslateTable[F1KEY                            ] = KX_F1KEY;
-               m_reverseKeyTranslateTable[F2KEY                            ] = KX_F2KEY;
-               m_reverseKeyTranslateTable[F3KEY                            ] = KX_F3KEY;
-               m_reverseKeyTranslateTable[F4KEY                            ] = KX_F4KEY;
-               m_reverseKeyTranslateTable[F5KEY                            ] = KX_F5KEY;
-               m_reverseKeyTranslateTable[F6KEY                            ] = KX_F6KEY;
-               m_reverseKeyTranslateTable[F7KEY                            ] = KX_F7KEY;
-               m_reverseKeyTranslateTable[F8KEY                            ] = KX_F8KEY;
-               m_reverseKeyTranslateTable[F9KEY                            ] = KX_F9KEY;
-               m_reverseKeyTranslateTable[F10KEY                           ] = KX_F10KEY;
-               m_reverseKeyTranslateTable[F11KEY      ] = KX_F11KEY;
-               m_reverseKeyTranslateTable[F12KEY      ] = KX_F12KEY;
-               m_reverseKeyTranslateTable[F13KEY      ] = KX_F13KEY;
-               m_reverseKeyTranslateTable[F14KEY      ] = KX_F14KEY;
-               m_reverseKeyTranslateTable[F15KEY      ] = KX_F15KEY;
-               m_reverseKeyTranslateTable[F16KEY      ] = KX_F16KEY;
-               m_reverseKeyTranslateTable[F17KEY      ] = KX_F17KEY;
-               m_reverseKeyTranslateTable[F18KEY      ] = KX_F18KEY;
-               m_reverseKeyTranslateTable[F19KEY      ] = KX_F19KEY;
-
-               m_reverseKeyTranslateTable[PAUSEKEY    ] = KX_PAUSEKEY;
-               m_reverseKeyTranslateTable[INSERTKEY   ] = KX_INSERTKEY;
-               m_reverseKeyTranslateTable[HOMEKEY     ] = KX_HOMEKEY;
-               m_reverseKeyTranslateTable[PAGEUPKEY   ] = KX_PAGEUPKEY;
-               m_reverseKeyTranslateTable[PAGEDOWNKEY ] = KX_PAGEDOWNKEY;
-               m_reverseKeyTranslateTable[ENDKEY      ] = KX_ENDKEY;
        }
 
        virtual ~BL_BlenderInputDevice()
@@ -225,7 +63,7 @@ public:
        }
 
        KX_EnumInputs ToNative(unsigned short incode) {
-               return m_reverseKeyTranslateTable[incode];
+                return ConvertKeyCode(incode);
        }
 
        virtual bool    IsPressed(SCA_IInputDevice::KX_EnumInputs inputcode)=0;
index a6712c531fb8e420c9b0471f7856e41859d06c26..54c60096812c33387051117ad1950ceb2e45b2d6 100644 (file)
@@ -36,6 +36,7 @@
 #endif 
 
 #include "KX_BlenderKeyboardDevice.h"
+#include "KX_KetsjiEngine.h"
 
 KX_BlenderKeyboardDevice::KX_BlenderKeyboardDevice()
        : m_hookesc(false)
@@ -106,7 +107,7 @@ bool        KX_BlenderKeyboardDevice::ConvertBlenderEvent(unsigned short incode,short v
 
                if (val == KM_PRESS)
                {
-                       if (kxevent == KX_ESCKEY && val != 0 && !m_hookesc)
+                       if (kxevent == KX_KetsjiEngine::GetExitKey() && val != 0 && !m_hookesc)
                                result = true;
                        if (kxevent == KX_PAUSEKEY && val && (IsPressed(KX_LEFTCTRLKEY) || IsPressed(KX_RIGHTCTRLKEY)))
                                result = true;
index 63a01db2fe0959b6d0024d5477f7f4691aeb165d..3039e69efcdd36894bf50e9173100e91155616c8 100644 (file)
@@ -50,6 +50,8 @@ public:
        virtual bool    ConvertBlenderEvent(unsigned short incode,short val);
        virtual void    NextFrame();
        virtual void    HookEscape();
+private:
+       short           m_exit_key;
 
 
 #ifdef WITH_CXX_GUARDEDALLOC
index 57611d65e146a7c0f167bff18692105f83df8f6e..ff4b9ba9c963507de5b02c536cb8f2fc50cd464f 100644 (file)
@@ -197,6 +197,180 @@ extern "C" {
 
 static bool default_light_mode = 0;
 
+static std::map<int, SCA_IInputDevice::KX_EnumInputs> create_translate_table()
+{
+       std::map<int, SCA_IInputDevice::KX_EnumInputs> m;
+               
+       /* The reverse table. In order to not confuse ourselves, we      */
+       /* immediately convert all events that come in to KX codes.      */
+       m[LEFTMOUSE                     ] =     SCA_IInputDevice::KX_LEFTMOUSE;
+       m[MIDDLEMOUSE           ] =     SCA_IInputDevice::KX_MIDDLEMOUSE;
+       m[RIGHTMOUSE            ] =     SCA_IInputDevice::KX_RIGHTMOUSE;
+       m[WHEELUPMOUSE          ] =     SCA_IInputDevice::KX_WHEELUPMOUSE;
+       m[WHEELDOWNMOUSE        ] =     SCA_IInputDevice::KX_WHEELDOWNMOUSE;
+       m[MOUSEX                        ] = SCA_IInputDevice::KX_MOUSEX;
+       m[MOUSEY                        ] =     SCA_IInputDevice::KX_MOUSEY;
+               
+       // TIMERS                                                                                                  
+               
+       m[TIMER0                        ] = SCA_IInputDevice::KX_TIMER0;                  
+       m[TIMER1                        ] = SCA_IInputDevice::KX_TIMER1;                  
+       m[TIMER2                        ] = SCA_IInputDevice::KX_TIMER2;                  
+               
+       // SYSTEM                                                                                                  
+               
+#if 0                  
+       /* **** XXX **** */
+       m[KEYBD                         ] = SCA_IInputDevice::KX_KEYBD;                  
+       m[RAWKEYBD                      ] = SCA_IInputDevice::KX_RAWKEYBD;                  
+       m[REDRAW                        ] = SCA_IInputDevice::KX_REDRAW;                  
+       m[INPUTCHANGE           ] = SCA_IInputDevice::KX_INPUTCHANGE;                  
+       m[QFULL                         ] = SCA_IInputDevice::KX_QFULL;                  
+       m[WINFREEZE                     ] = SCA_IInputDevice::KX_WINFREEZE;                  
+       m[WINTHAW                       ] = SCA_IInputDevice::KX_WINTHAW;                  
+       m[WINCLOSE                      ] = SCA_IInputDevice::KX_WINCLOSE;                  
+       m[WINQUIT                       ] = SCA_IInputDevice::KX_WINQUIT;                  
+       m[Q_FIRSTTIME           ] = SCA_IInputDevice::KX_Q_FIRSTTIME;                  
+       /* **** XXX **** */
+#endif 
+               
+       // standard keyboard                                                                                       
+               
+       m[AKEY                          ] = SCA_IInputDevice::KX_AKEY;                  
+       m[BKEY                          ] = SCA_IInputDevice::KX_BKEY;                  
+       m[CKEY                          ] = SCA_IInputDevice::KX_CKEY;                  
+       m[DKEY                          ] = SCA_IInputDevice::KX_DKEY;                  
+       m[EKEY                          ] = SCA_IInputDevice::KX_EKEY;                  
+       m[FKEY                          ] = SCA_IInputDevice::KX_FKEY;                  
+       m[GKEY                          ] = SCA_IInputDevice::KX_GKEY;                  
+
+//XXX clean up
+#ifdef WIN32
+#define HKEY   'h'
+#endif
+       m[HKEY                          ] = SCA_IInputDevice::KX_HKEY;                  
+//XXX clean up
+#ifdef WIN32
+#undef HKEY
+#endif
+
+       m[IKEY                          ] = SCA_IInputDevice::KX_IKEY;                  
+       m[JKEY                          ] = SCA_IInputDevice::KX_JKEY;                  
+       m[KKEY                          ] = SCA_IInputDevice::KX_KKEY;                  
+       m[LKEY                          ] = SCA_IInputDevice::KX_LKEY;                  
+       m[MKEY                          ] = SCA_IInputDevice::KX_MKEY;                  
+       m[NKEY                          ] = SCA_IInputDevice::KX_NKEY;                  
+       m[OKEY                          ] = SCA_IInputDevice::KX_OKEY;                  
+       m[PKEY                          ] = SCA_IInputDevice::KX_PKEY;                  
+       m[QKEY                          ] = SCA_IInputDevice::KX_QKEY;                  
+       m[RKEY                          ] = SCA_IInputDevice::KX_RKEY;                  
+       m[SKEY                          ] = SCA_IInputDevice::KX_SKEY;                  
+       m[TKEY                          ] = SCA_IInputDevice::KX_TKEY;                  
+       m[UKEY                          ] = SCA_IInputDevice::KX_UKEY;                  
+       m[VKEY                          ] = SCA_IInputDevice::KX_VKEY;                  
+       m[WKEY                          ] = SCA_IInputDevice::KX_WKEY;                  
+       m[XKEY                          ] = SCA_IInputDevice::KX_XKEY;                  
+       m[YKEY                          ] = SCA_IInputDevice::KX_YKEY;                  
+       m[ZKEY                          ] = SCA_IInputDevice::KX_ZKEY;                  
+               
+       m[ZEROKEY                       ] = SCA_IInputDevice::KX_ZEROKEY;                  
+       m[ONEKEY                        ] = SCA_IInputDevice::KX_ONEKEY;                  
+       m[TWOKEY                        ] = SCA_IInputDevice::KX_TWOKEY;                  
+       m[THREEKEY                      ] = SCA_IInputDevice::KX_THREEKEY;                  
+       m[FOURKEY                       ] = SCA_IInputDevice::KX_FOURKEY;                  
+       m[FIVEKEY                       ] = SCA_IInputDevice::KX_FIVEKEY;                  
+       m[SIXKEY                        ] = SCA_IInputDevice::KX_SIXKEY;                  
+       m[SEVENKEY                      ] = SCA_IInputDevice::KX_SEVENKEY;                  
+       m[EIGHTKEY                      ] = SCA_IInputDevice::KX_EIGHTKEY;                  
+       m[NINEKEY                       ] = SCA_IInputDevice::KX_NINEKEY;                  
+               
+       m[CAPSLOCKKEY           ] = SCA_IInputDevice::KX_CAPSLOCKKEY;                  
+               
+       m[LEFTCTRLKEY           ] = SCA_IInputDevice::KX_LEFTCTRLKEY;                  
+       m[LEFTALTKEY            ] = SCA_IInputDevice::KX_LEFTALTKEY;                  
+       m[RIGHTALTKEY           ] = SCA_IInputDevice::KX_RIGHTALTKEY;                  
+       m[RIGHTCTRLKEY          ] = SCA_IInputDevice::KX_RIGHTCTRLKEY;                  
+       m[RIGHTSHIFTKEY         ] = SCA_IInputDevice::KX_RIGHTSHIFTKEY;                  
+       m[LEFTSHIFTKEY          ] = SCA_IInputDevice::KX_LEFTSHIFTKEY;                  
+               
+       m[ESCKEY                        ] = SCA_IInputDevice::KX_ESCKEY;                  
+       m[TABKEY                        ] = SCA_IInputDevice::KX_TABKEY;                  
+       m[RETKEY                        ] = SCA_IInputDevice::KX_RETKEY;                  
+       m[SPACEKEY                      ] = SCA_IInputDevice::KX_SPACEKEY;                  
+       m[LINEFEEDKEY           ] = SCA_IInputDevice::KX_LINEFEEDKEY;                  
+       m[BACKSPACEKEY          ] = SCA_IInputDevice::KX_BACKSPACEKEY;                  
+       m[DELKEY                        ] = SCA_IInputDevice::KX_DELKEY;                  
+       m[SEMICOLONKEY          ] = SCA_IInputDevice::KX_SEMICOLONKEY;                  
+       m[PERIODKEY                     ] = SCA_IInputDevice::KX_PERIODKEY;                  
+       m[COMMAKEY                      ] = SCA_IInputDevice::KX_COMMAKEY;                  
+       m[QUOTEKEY                      ] = SCA_IInputDevice::KX_QUOTEKEY;                  
+       m[ACCENTGRAVEKEY        ] = SCA_IInputDevice::KX_ACCENTGRAVEKEY;                  
+       m[MINUSKEY                      ] = SCA_IInputDevice::KX_MINUSKEY;                  
+       m[SLASHKEY                      ] = SCA_IInputDevice::KX_SLASHKEY;                  
+       m[BACKSLASHKEY          ] = SCA_IInputDevice::KX_BACKSLASHKEY;                  
+       m[EQUALKEY                      ] = SCA_IInputDevice::KX_EQUALKEY;                  
+       m[LEFTBRACKETKEY        ] = SCA_IInputDevice::KX_LEFTBRACKETKEY;                  
+       m[RIGHTBRACKETKEY       ] = SCA_IInputDevice::KX_RIGHTBRACKETKEY;                  
+               
+       m[LEFTARROWKEY          ] = SCA_IInputDevice::KX_LEFTARROWKEY;                  
+       m[DOWNARROWKEY          ] = SCA_IInputDevice::KX_DOWNARROWKEY;                  
+       m[RIGHTARROWKEY         ] = SCA_IInputDevice::KX_RIGHTARROWKEY;                  
+       m[UPARROWKEY            ] = SCA_IInputDevice::KX_UPARROWKEY;                  
+               
+       m[PAD2                          ] = SCA_IInputDevice::KX_PAD2;                  
+       m[PAD4                          ] = SCA_IInputDevice::KX_PAD4;                  
+       m[PAD6                          ] = SCA_IInputDevice::KX_PAD6;                  
+       m[PAD8                          ] = SCA_IInputDevice::KX_PAD8;                  
+               
+       m[PAD1                          ] = SCA_IInputDevice::KX_PAD1;                  
+       m[PAD3                          ] = SCA_IInputDevice::KX_PAD3;                  
+       m[PAD5                          ] = SCA_IInputDevice::KX_PAD5;                  
+       m[PAD7                          ] = SCA_IInputDevice::KX_PAD7;                  
+       m[PAD9                          ] = SCA_IInputDevice::KX_PAD9;                  
+               
+       m[PADPERIOD                     ] = SCA_IInputDevice::KX_PADPERIOD;                  
+       m[PADSLASHKEY           ] = SCA_IInputDevice::KX_PADSLASHKEY;                  
+       m[PADASTERKEY           ] = SCA_IInputDevice::KX_PADASTERKEY;                  
+               
+       m[PAD0                          ] = SCA_IInputDevice::KX_PAD0;                  
+       m[PADMINUS                      ] = SCA_IInputDevice::KX_PADMINUS;                  
+       m[PADENTER                      ] = SCA_IInputDevice::KX_PADENTER;                  
+       m[PADPLUSKEY            ] = SCA_IInputDevice::KX_PADPLUSKEY;                  
+               
+               
+       m[F1KEY                         ] = SCA_IInputDevice::KX_F1KEY;                  
+       m[F2KEY                         ] = SCA_IInputDevice::KX_F2KEY;                  
+       m[F3KEY                         ] = SCA_IInputDevice::KX_F3KEY;                  
+       m[F4KEY                         ] = SCA_IInputDevice::KX_F4KEY;                  
+       m[F5KEY                         ] = SCA_IInputDevice::KX_F5KEY;                  
+       m[F6KEY                         ] = SCA_IInputDevice::KX_F6KEY;                  
+       m[F7KEY                         ] = SCA_IInputDevice::KX_F7KEY;                  
+       m[F8KEY                         ] = SCA_IInputDevice::KX_F8KEY;                  
+       m[F9KEY                         ] = SCA_IInputDevice::KX_F9KEY;                  
+       m[F10KEY                        ] = SCA_IInputDevice::KX_F10KEY;                  
+       m[F11KEY                        ] = SCA_IInputDevice::KX_F11KEY;                  
+       m[F12KEY                        ] = SCA_IInputDevice::KX_F12KEY;
+       m[F13KEY                        ] = SCA_IInputDevice::KX_F13KEY;
+       m[F14KEY                        ] = SCA_IInputDevice::KX_F14KEY;
+       m[F15KEY                        ] = SCA_IInputDevice::KX_F15KEY;
+       m[F16KEY                        ] = SCA_IInputDevice::KX_F16KEY;
+       m[F17KEY                        ] = SCA_IInputDevice::KX_F17KEY;
+       m[F18KEY                        ] = SCA_IInputDevice::KX_F18KEY;
+       m[F19KEY                        ] = SCA_IInputDevice::KX_F19KEY;
+               
+               
+       m[PAUSEKEY                      ] = SCA_IInputDevice::KX_PAUSEKEY;                  
+       m[INSERTKEY                     ] = SCA_IInputDevice::KX_INSERTKEY;                  
+       m[HOMEKEY                       ] = SCA_IInputDevice::KX_HOMEKEY;                  
+       m[PAGEUPKEY                     ] = SCA_IInputDevice::KX_PAGEUPKEY;                  
+       m[PAGEDOWNKEY           ] = SCA_IInputDevice::KX_PAGEDOWNKEY;                  
+       m[ENDKEY                        ] = SCA_IInputDevice::KX_ENDKEY;
+
+       return m;
+}
+
+static std::map<int, SCA_IInputDevice::KX_EnumInputs> gReverseKeyTranslateTable = create_translate_table();
+
 static unsigned int KX_rgbaint2uint_new(unsigned int icol)
 {
        union
@@ -2854,3 +3028,8 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
        RAS_BucketManager *bucketmanager = kxscene->GetBucketManager();
        bucketmanager->OptimizeBuckets(distance);
 }
+
+SCA_IInputDevice::KX_EnumInputs ConvertKeyCode(int key_code)
+{
+       return gReverseKeyTranslateTable[key_code];
+}
\ No newline at end of file
index 2ae7fee1798209bf73a2951dfedc2fbb8428a60a..6da3ac90aef5ff9312822af15ae298321362b5a8 100644 (file)
@@ -36,6 +36,7 @@
 #include "STR_String.h"
 #include "KX_Python.h"
 #include "KX_PhysicsEngineEnums.h"
+#include "SCA_IInputDevice.h"
 
 class RAS_MeshObject* BL_ConvertMesh(struct Mesh* mesh,struct Object* lightobj,class KX_Scene* scene, class KX_BlenderSceneConverter *converter);
 
@@ -49,5 +50,7 @@ void BL_ConvertBlenderObjects(struct Main* maggie,
                                                          bool alwaysUseExpandFraming
                                                          );
 
+SCA_IInputDevice::KX_EnumInputs ConvertKeyCode(int key_code);
+
 #endif // __BLENDER_CONVERT
 
index b7aee8ec92404d3de288080e5db0c9690bd890b8..9391d12a3ce22c693f3276461aaab31ae6300200 100644 (file)
@@ -86,10 +86,7 @@ probably misplaced */
 
 #include "KX_KetsjiEngine.h"
 #include "KX_BlenderSceneConverter.h"
-
-// this map is Blender specific: a conversion between blender and ketsji enums
-std::map<int,SCA_IInputDevice::KX_EnumInputs> gReverseKeyTranslateTable;
-
+#include "BL_BlenderDataConversion.h"
 
 void BL_ConvertSensors(struct Object* blenderobject,
                                           class KX_GameObject* gameobj,
@@ -102,177 +99,6 @@ void BL_ConvertSensors(struct Object* blenderobject,
                                           KX_BlenderSceneConverter* converter
                                           )
 {
-       static bool reverseTableConverted = false;      
-       
-       if (!reverseTableConverted)
-       {
-               reverseTableConverted = true;
-               
-               /* The reverse table. In order to not confuse ourselves, we      */
-               /* immediately convert all events that come in to KX codes.      */
-               gReverseKeyTranslateTable[LEFTMOUSE                     ] =     SCA_IInputDevice::KX_LEFTMOUSE;
-               gReverseKeyTranslateTable[MIDDLEMOUSE           ] =     SCA_IInputDevice::KX_MIDDLEMOUSE;
-               gReverseKeyTranslateTable[RIGHTMOUSE            ] =     SCA_IInputDevice::KX_RIGHTMOUSE;
-               gReverseKeyTranslateTable[WHEELUPMOUSE          ] =     SCA_IInputDevice::KX_WHEELUPMOUSE;
-               gReverseKeyTranslateTable[WHEELDOWNMOUSE        ] =     SCA_IInputDevice::KX_WHEELDOWNMOUSE;
-               gReverseKeyTranslateTable[MOUSEX                        ] = SCA_IInputDevice::KX_MOUSEX;
-               gReverseKeyTranslateTable[MOUSEY                        ] =     SCA_IInputDevice::KX_MOUSEY;
-               
-               // TIMERS                                                                                                  
-               
-               gReverseKeyTranslateTable[TIMER0                        ] = SCA_IInputDevice::KX_TIMER0;                  
-               gReverseKeyTranslateTable[TIMER1                        ] = SCA_IInputDevice::KX_TIMER1;                  
-               gReverseKeyTranslateTable[TIMER2                        ] = SCA_IInputDevice::KX_TIMER2;                  
-               
-               // SYSTEM                                                                                                  
-               
-#if 0                  
-               /* **** XXX **** */
-               gReverseKeyTranslateTable[KEYBD                         ] = SCA_IInputDevice::KX_KEYBD;                  
-               gReverseKeyTranslateTable[RAWKEYBD                      ] = SCA_IInputDevice::KX_RAWKEYBD;                  
-               gReverseKeyTranslateTable[REDRAW                        ] = SCA_IInputDevice::KX_REDRAW;                  
-               gReverseKeyTranslateTable[INPUTCHANGE           ] = SCA_IInputDevice::KX_INPUTCHANGE;                  
-               gReverseKeyTranslateTable[QFULL                         ] = SCA_IInputDevice::KX_QFULL;                  
-               gReverseKeyTranslateTable[WINFREEZE                     ] = SCA_IInputDevice::KX_WINFREEZE;                  
-               gReverseKeyTranslateTable[WINTHAW                       ] = SCA_IInputDevice::KX_WINTHAW;                  
-               gReverseKeyTranslateTable[WINCLOSE                      ] = SCA_IInputDevice::KX_WINCLOSE;                  
-               gReverseKeyTranslateTable[WINQUIT                       ] = SCA_IInputDevice::KX_WINQUIT;                  
-               gReverseKeyTranslateTable[Q_FIRSTTIME           ] = SCA_IInputDevice::KX_Q_FIRSTTIME;                  
-               /* **** XXX **** */
-#endif 
-               
-               // standard keyboard                                                                                       
-               
-               gReverseKeyTranslateTable[AKEY                          ] = SCA_IInputDevice::KX_AKEY;                  
-               gReverseKeyTranslateTable[BKEY                          ] = SCA_IInputDevice::KX_BKEY;                  
-               gReverseKeyTranslateTable[CKEY                          ] = SCA_IInputDevice::KX_CKEY;                  
-               gReverseKeyTranslateTable[DKEY                          ] = SCA_IInputDevice::KX_DKEY;                  
-               gReverseKeyTranslateTable[EKEY                          ] = SCA_IInputDevice::KX_EKEY;                  
-               gReverseKeyTranslateTable[FKEY                          ] = SCA_IInputDevice::KX_FKEY;                  
-               gReverseKeyTranslateTable[GKEY                          ] = SCA_IInputDevice::KX_GKEY;                  
-
-//XXX clean up
-#ifdef WIN32
-#define HKEY   'h'
-#endif
-               gReverseKeyTranslateTable[HKEY                          ] = SCA_IInputDevice::KX_HKEY;                  
-//XXX clean up
-#ifdef WIN32
-#undef HKEY
-#endif
-
-               gReverseKeyTranslateTable[IKEY                          ] = SCA_IInputDevice::KX_IKEY;                  
-               gReverseKeyTranslateTable[JKEY                          ] = SCA_IInputDevice::KX_JKEY;                  
-               gReverseKeyTranslateTable[KKEY                          ] = SCA_IInputDevice::KX_KKEY;                  
-               gReverseKeyTranslateTable[LKEY                          ] = SCA_IInputDevice::KX_LKEY;                  
-               gReverseKeyTranslateTable[MKEY                          ] = SCA_IInputDevice::KX_MKEY;                  
-               gReverseKeyTranslateTable[NKEY                          ] = SCA_IInputDevice::KX_NKEY;                  
-               gReverseKeyTranslateTable[OKEY                          ] = SCA_IInputDevice::KX_OKEY;                  
-               gReverseKeyTranslateTable[PKEY                          ] = SCA_IInputDevice::KX_PKEY;                  
-               gReverseKeyTranslateTable[QKEY                          ] = SCA_IInputDevice::KX_QKEY;                  
-               gReverseKeyTranslateTable[RKEY                          ] = SCA_IInputDevice::KX_RKEY;                  
-               gReverseKeyTranslateTable[SKEY                          ] = SCA_IInputDevice::KX_SKEY;                  
-               gReverseKeyTranslateTable[TKEY                          ] = SCA_IInputDevice::KX_TKEY;                  
-               gReverseKeyTranslateTable[UKEY                          ] = SCA_IInputDevice::KX_UKEY;                  
-               gReverseKeyTranslateTable[VKEY                          ] = SCA_IInputDevice::KX_VKEY;                  
-               gReverseKeyTranslateTable[WKEY                          ] = SCA_IInputDevice::KX_WKEY;                  
-               gReverseKeyTranslateTable[XKEY                          ] = SCA_IInputDevice::KX_XKEY;                  
-               gReverseKeyTranslateTable[YKEY                          ] = SCA_IInputDevice::KX_YKEY;                  
-               gReverseKeyTranslateTable[ZKEY                          ] = SCA_IInputDevice::KX_ZKEY;                  
-               
-               gReverseKeyTranslateTable[ZEROKEY                       ] = SCA_IInputDevice::KX_ZEROKEY;                  
-               gReverseKeyTranslateTable[ONEKEY                        ] = SCA_IInputDevice::KX_ONEKEY;                  
-               gReverseKeyTranslateTable[TWOKEY                        ] = SCA_IInputDevice::KX_TWOKEY;                  
-               gReverseKeyTranslateTable[THREEKEY                      ] = SCA_IInputDevice::KX_THREEKEY;                  
-               gReverseKeyTranslateTable[FOURKEY                       ] = SCA_IInputDevice::KX_FOURKEY;                  
-               gReverseKeyTranslateTable[FIVEKEY                       ] = SCA_IInputDevice::KX_FIVEKEY;                  
-               gReverseKeyTranslateTable[SIXKEY                        ] = SCA_IInputDevice::KX_SIXKEY;                  
-               gReverseKeyTranslateTable[SEVENKEY                      ] = SCA_IInputDevice::KX_SEVENKEY;                  
-               gReverseKeyTranslateTable[EIGHTKEY                      ] = SCA_IInputDevice::KX_EIGHTKEY;                  
-               gReverseKeyTranslateTable[NINEKEY                       ] = SCA_IInputDevice::KX_NINEKEY;                  
-               
-               gReverseKeyTranslateTable[CAPSLOCKKEY           ] = SCA_IInputDevice::KX_CAPSLOCKKEY;                  
-               
-               gReverseKeyTranslateTable[LEFTCTRLKEY           ] = SCA_IInputDevice::KX_LEFTCTRLKEY;                  
-               gReverseKeyTranslateTable[LEFTALTKEY            ] = SCA_IInputDevice::KX_LEFTALTKEY;                  
-               gReverseKeyTranslateTable[RIGHTALTKEY           ] = SCA_IInputDevice::KX_RIGHTALTKEY;                  
-               gReverseKeyTranslateTable[RIGHTCTRLKEY          ] = SCA_IInputDevice::KX_RIGHTCTRLKEY;                  
-               gReverseKeyTranslateTable[RIGHTSHIFTKEY         ] = SCA_IInputDevice::KX_RIGHTSHIFTKEY;                  
-               gReverseKeyTranslateTable[LEFTSHIFTKEY          ] = SCA_IInputDevice::KX_LEFTSHIFTKEY;                  
-               
-               gReverseKeyTranslateTable[ESCKEY                        ] = SCA_IInputDevice::KX_ESCKEY;                  
-               gReverseKeyTranslateTable[TABKEY                        ] = SCA_IInputDevice::KX_TABKEY;                  
-               gReverseKeyTranslateTable[RETKEY                        ] = SCA_IInputDevice::KX_RETKEY;                  
-               gReverseKeyTranslateTable[SPACEKEY                      ] = SCA_IInputDevice::KX_SPACEKEY;                  
-               gReverseKeyTranslateTable[LINEFEEDKEY           ] = SCA_IInputDevice::KX_LINEFEEDKEY;                  
-               gReverseKeyTranslateTable[BACKSPACEKEY          ] = SCA_IInputDevice::KX_BACKSPACEKEY;                  
-               gReverseKeyTranslateTable[DELKEY                        ] = SCA_IInputDevice::KX_DELKEY;                  
-               gReverseKeyTranslateTable[SEMICOLONKEY          ] = SCA_IInputDevice::KX_SEMICOLONKEY;                  
-               gReverseKeyTranslateTable[PERIODKEY                     ] = SCA_IInputDevice::KX_PERIODKEY;                  
-               gReverseKeyTranslateTable[COMMAKEY                      ] = SCA_IInputDevice::KX_COMMAKEY;                  
-               gReverseKeyTranslateTable[QUOTEKEY                      ] = SCA_IInputDevice::KX_QUOTEKEY;                  
-               gReverseKeyTranslateTable[ACCENTGRAVEKEY        ] = SCA_IInputDevice::KX_ACCENTGRAVEKEY;                  
-               gReverseKeyTranslateTable[MINUSKEY                      ] = SCA_IInputDevice::KX_MINUSKEY;                  
-               gReverseKeyTranslateTable[SLASHKEY                      ] = SCA_IInputDevice::KX_SLASHKEY;                  
-               gReverseKeyTranslateTable[BACKSLASHKEY          ] = SCA_IInputDevice::KX_BACKSLASHKEY;                  
-               gReverseKeyTranslateTable[EQUALKEY                      ] = SCA_IInputDevice::KX_EQUALKEY;                  
-               gReverseKeyTranslateTable[LEFTBRACKETKEY        ] = SCA_IInputDevice::KX_LEFTBRACKETKEY;                  
-               gReverseKeyTranslateTable[RIGHTBRACKETKEY       ] = SCA_IInputDevice::KX_RIGHTBRACKETKEY;                  
-               
-               gReverseKeyTranslateTable[LEFTARROWKEY          ] = SCA_IInputDevice::KX_LEFTARROWKEY;                  
-               gReverseKeyTranslateTable[DOWNARROWKEY          ] = SCA_IInputDevice::KX_DOWNARROWKEY;                  
-               gReverseKeyTranslateTable[RIGHTARROWKEY         ] = SCA_IInputDevice::KX_RIGHTARROWKEY;                  
-               gReverseKeyTranslateTable[UPARROWKEY            ] = SCA_IInputDevice::KX_UPARROWKEY;                  
-               
-               gReverseKeyTranslateTable[PAD2                          ] = SCA_IInputDevice::KX_PAD2;                  
-               gReverseKeyTranslateTable[PAD4                          ] = SCA_IInputDevice::KX_PAD4;                  
-               gReverseKeyTranslateTable[PAD6                          ] = SCA_IInputDevice::KX_PAD6;                  
-               gReverseKeyTranslateTable[PAD8                          ] = SCA_IInputDevice::KX_PAD8;                  
-               
-               gReverseKeyTranslateTable[PAD1                          ] = SCA_IInputDevice::KX_PAD1;                  
-               gReverseKeyTranslateTable[PAD3                          ] = SCA_IInputDevice::KX_PAD3;                  
-               gReverseKeyTranslateTable[PAD5                          ] = SCA_IInputDevice::KX_PAD5;                  
-               gReverseKeyTranslateTable[PAD7                          ] = SCA_IInputDevice::KX_PAD7;                  
-               gReverseKeyTranslateTable[PAD9                          ] = SCA_IInputDevice::KX_PAD9;                  
-               
-               gReverseKeyTranslateTable[PADPERIOD                     ] = SCA_IInputDevice::KX_PADPERIOD;                  
-               gReverseKeyTranslateTable[PADSLASHKEY           ] = SCA_IInputDevice::KX_PADSLASHKEY;                  
-               gReverseKeyTranslateTable[PADASTERKEY           ] = SCA_IInputDevice::KX_PADASTERKEY;                  
-               
-               gReverseKeyTranslateTable[PAD0                          ] = SCA_IInputDevice::KX_PAD0;                  
-               gReverseKeyTranslateTable[PADMINUS                      ] = SCA_IInputDevice::KX_PADMINUS;                  
-               gReverseKeyTranslateTable[PADENTER                      ] = SCA_IInputDevice::KX_PADENTER;                  
-               gReverseKeyTranslateTable[PADPLUSKEY            ] = SCA_IInputDevice::KX_PADPLUSKEY;                  
-               
-               
-               gReverseKeyTranslateTable[F1KEY                         ] = SCA_IInputDevice::KX_F1KEY;                  
-               gReverseKeyTranslateTable[F2KEY                         ] = SCA_IInputDevice::KX_F2KEY;                  
-               gReverseKeyTranslateTable[F3KEY                         ] = SCA_IInputDevice::KX_F3KEY;                  
-               gReverseKeyTranslateTable[F4KEY                         ] = SCA_IInputDevice::KX_F4KEY;                  
-               gReverseKeyTranslateTable[F5KEY                         ] = SCA_IInputDevice::KX_F5KEY;                  
-               gReverseKeyTranslateTable[F6KEY                         ] = SCA_IInputDevice::KX_F6KEY;                  
-               gReverseKeyTranslateTable[F7KEY                         ] = SCA_IInputDevice::KX_F7KEY;                  
-               gReverseKeyTranslateTable[F8KEY                         ] = SCA_IInputDevice::KX_F8KEY;                  
-               gReverseKeyTranslateTable[F9KEY                         ] = SCA_IInputDevice::KX_F9KEY;                  
-               gReverseKeyTranslateTable[F10KEY                        ] = SCA_IInputDevice::KX_F10KEY;                  
-               gReverseKeyTranslateTable[F11KEY                        ] = SCA_IInputDevice::KX_F11KEY;                  
-               gReverseKeyTranslateTable[F12KEY                        ] = SCA_IInputDevice::KX_F12KEY;
-               gReverseKeyTranslateTable[F13KEY                        ] = SCA_IInputDevice::KX_F13KEY;
-               gReverseKeyTranslateTable[F14KEY                        ] = SCA_IInputDevice::KX_F14KEY;
-               gReverseKeyTranslateTable[F15KEY                        ] = SCA_IInputDevice::KX_F15KEY;
-               gReverseKeyTranslateTable[F16KEY                        ] = SCA_IInputDevice::KX_F16KEY;
-               gReverseKeyTranslateTable[F17KEY                        ] = SCA_IInputDevice::KX_F17KEY;
-               gReverseKeyTranslateTable[F18KEY                        ] = SCA_IInputDevice::KX_F18KEY;
-               gReverseKeyTranslateTable[F19KEY                        ] = SCA_IInputDevice::KX_F19KEY;
-               
-               
-               gReverseKeyTranslateTable[PAUSEKEY                      ] = SCA_IInputDevice::KX_PAUSEKEY;                  
-               gReverseKeyTranslateTable[INSERTKEY                     ] = SCA_IInputDevice::KX_INSERTKEY;                  
-               gReverseKeyTranslateTable[HOMEKEY                       ] = SCA_IInputDevice::KX_HOMEKEY;                  
-               gReverseKeyTranslateTable[PAGEUPKEY                     ] = SCA_IInputDevice::KX_PAGEUPKEY;                  
-               gReverseKeyTranslateTable[PAGEDOWNKEY           ] = SCA_IInputDevice::KX_PAGEDOWNKEY;                  
-               gReverseKeyTranslateTable[ENDKEY                        ] = SCA_IInputDevice::KX_ENDKEY;
-       }
 
        int executePriority = 0;
        int uniqueint = 0;
@@ -470,9 +296,9 @@ void BL_ConvertSensors(struct Object* blenderobject,
                                if (eventmgr)
                                {
                                        gamesensor = new SCA_KeyboardSensor(eventmgr,
-                                               gReverseKeyTranslateTable[blenderkeybdsensor->key],
-                                               gReverseKeyTranslateTable[blenderkeybdsensor->qual],
-                                               gReverseKeyTranslateTable[blenderkeybdsensor->qual2],
+                                               ConvertKeyCode(blenderkeybdsensor->key),
+                                               ConvertKeyCode(blenderkeybdsensor->qual),
+                                               ConvertKeyCode(blenderkeybdsensor->qual2),
                                                (blenderkeybdsensor->type == SENS_ALL_KEYS),
                                                blenderkeybdsensor->targetName,
                                                blenderkeybdsensor->toggleName,
index 5b267c92908780790d1e9e8dd8856e0fec20b108..3d88dc467b066791aa5d99b988b695ebd92276c1 100644 (file)
@@ -57,6 +57,7 @@ protected:
         * System dependent keyboard codes are stored as ints.
         */
        std::map<int, KX_EnumInputs> m_reverseKeyTranslateTable;
+       short   m_exitkey;
 
 public:
        bool m_hookesc;
index 7490e18782473b5b8bbad396d671d88828979cd3..f9403c9725a93697a4aa507007ea32b23342bc83 100644 (file)
@@ -40,6 +40,7 @@
 #include "GPU_extensions.h"
 
 #include "GPG_Application.h"
+#include "BL_BlenderDataConversion.h"
 
 #include <iostream>
 #include <MT_assert.h>
@@ -626,6 +627,8 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
                m_ketsjiengine->SetRasterizer(m_rasterizer);
 
                m_ketsjiengine->SetTimingDisplay(frameRate, false, false);
+
+               KX_KetsjiEngine::SetExitKey(ConvertKeyCode(gm->exitkey));
 #ifdef WITH_PYTHON
                CValue::SetDeprecationWarnings(nodepwarnings);
 #else
@@ -908,12 +911,10 @@ bool GPG_Application::handleKey(GHOST_IEvent* event, bool isDown)
        {
                GHOST_TEventDataPtr eventData = ((GHOST_IEvent*)event)->getData();
                GHOST_TEventKeyData* keyData = static_cast<GHOST_TEventKeyData*>(eventData);
-               //no need for this test
-               //if (fSystem->getFullScreen()) {
-                       if (keyData->key == GHOST_kKeyEsc && !m_keyboard->m_hookesc && !m_isEmbedded) {
-                               m_exitRequested = KX_EXIT_REQUEST_OUTSIDE;
-                       }
-               //}
+
+               if (m_keyboard->ToNative(keyData->key) == KX_KetsjiEngine::GetExitKey() && !m_keyboard->m_hookesc && !m_isEmbedded) {
+                       m_exitRequested = KX_EXIT_REQUEST_OUTSIDE;
+               }
                m_keyboard->ConvertEvent(keyData->key, isDown);
                handled = true;
        }
index a8a976f9dd2b1af906324c83da945e05cf7e1dd5..37625dc8998b99f7213bcc841c2bd3b988361057 100644 (file)
@@ -103,6 +103,7 @@ protected:
         * Shuts the game engine down.
         */
        void exitEngine(void);
+       short                                   m_exitkey;
 
        /* The game data */
        STR_String                              m_startSceneName;
index a9be588e6b2e0df9b96413391ab2857fd0fec240..29727dc04da8863d1447797d489f7d8f70002b21 100644 (file)
@@ -110,6 +110,7 @@ double KX_KetsjiEngine::m_suspendedtime = 0.0;
 double KX_KetsjiEngine::m_suspendeddelta = 0.0;
 double KX_KetsjiEngine::m_average_framerate = 0.0;
 bool   KX_KetsjiEngine::m_restrict_anim_fps = false;
+short  KX_KetsjiEngine::m_exitkey = 130; //ESC Key
 
 
 /**
@@ -1857,6 +1858,16 @@ double KX_KetsjiEngine::GetAverageFrameRate()
        return m_average_framerate;
 }
 
+void KX_KetsjiEngine::SetExitKey(short key)
+{
+       m_exitkey = key;
+}
+
+short KX_KetsjiEngine::GetExitKey()
+{
+       return m_exitkey;
+}
+
 void KX_KetsjiEngine::SetTimingDisplay(bool frameRate, bool profile, bool properties)
 {
        m_show_framerate = frameRate;
index 5a02da07e4324ffdccd9ba62b1601ec893f4d41f..96b737b686df4b34a18e0af142fd001204d925f6 100644 (file)
@@ -124,6 +124,8 @@ private:
        static double                   m_suspendedtime;
        static double                   m_suspendeddelta;
 
+       static short                    m_exitkey; /* Key used to exit the BGE */
+
        int                                     m_exitcode;
        STR_String                      m_exitstring;
                /**
@@ -352,6 +354,10 @@ public:
         */
        static double GetAverageFrameRate();
 
+       static void SetExitKey(short key);
+
+       static short GetExitKey();
+
        /**
         * Activates or deactivates timing information display.
         * @param frameRate             Display for frame rate on or off.
index 29871c2b3cd53378e6a020fc89deb4d969681fd3..9a2c0cb89b149655bcd83b487c9ae0d804163ca8 100644 (file)
@@ -419,6 +419,20 @@ static PyObject* gPyGetLogicTicRate(PyObject*)
        return PyFloat_FromDouble(KX_KetsjiEngine::GetTicRate());
 }
 
+static PyObject* gPySetExitKey(PyObject*, PyObject* args)
+{
+       short exitkey;
+       if (!PyArg_ParseTuple(args, "h:setExitKey", &exitkey))
+               return NULL;
+       KX_KetsjiEngine::SetExitKey(exitkey);
+       Py_RETURN_NONE;
+}
+
+static PyObject* gPyGetExitKey(PyObject*)
+{
+       return PyLong_FromSsize_t(KX_KetsjiEngine::GetExitKey());
+}
+
 static PyObject* gPySetMaxLogicFrame(PyObject*, PyObject* args)
 {
        int frame;
@@ -812,6 +826,8 @@ static struct PyMethodDef game_methods[] = {
        {"setLogicTicRate", (PyCFunction) gPySetLogicTicRate, METH_VARARGS, (const char *)"Sets the logic tic rate"},
        {"getPhysicsTicRate", (PyCFunction) gPyGetPhysicsTicRate, METH_NOARGS, (const char *)"Gets the physics tic rate"},
        {"setPhysicsTicRate", (PyCFunction) gPySetPhysicsTicRate, METH_VARARGS, (const char *)"Sets the physics tic rate"},
+       {"getExitKey", (PyCFunction) gPyGetExitKey, METH_NOARGS, (const char *)"Gets the key used to exit the game engine"},
+       {"setExitKey", (PyCFunction) gPySetExitKey, METH_VARARGS, (const char *)"Sets the key used to exit the game engine"},
        {"getAverageFrameRate", (PyCFunction) gPyGetAverageFrameRate, METH_NOARGS, (const char *)"Gets the estimated average frame rate"},
        {"getBlendFileList", (PyCFunction)gPyGetBlendFileList, METH_VARARGS, (const char *)"Gets a list of blend files in the same directory as the current blend file"},
        {"PrintGLInfo", (PyCFunction)pyPrintExt, METH_NOARGS, (const char *)"Prints GL Extension Info"},