Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--release/scripts/startup/bl_operators/wm.py22
-rw-r--r--release/scripts/startup/bl_ui/properties_game.py85
-rw-r--r--release/scripts/startup/bl_ui/properties_particle.py10
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_scene.py6
-rw-r--r--release/scripts/startup/bl_ui/space_logic.py4
-rw-r--r--source/blender/blenloader/intern/readfile.c8
-rw-r--r--source/blender/makesdna/DNA_scene_types.h2
-rw-r--r--source/blender/makesrna/intern/rna_scene.c14
-rw-r--r--source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp1
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h166
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp3
-rw-r--r--source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h2
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.cpp179
-rw-r--r--source/gameengine/Converter/BL_BlenderDataConversion.h3
-rw-r--r--source/gameengine/Converter/KX_ConvertSensors.cpp182
-rw-r--r--source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h1
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.cpp13
-rw-r--r--source/gameengine/GamePlayer/ghost/GPG_Application.h1
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.cpp11
-rw-r--r--source/gameengine/Ketsji/KX_KetsjiEngine.h6
-rw-r--r--source/gameengine/Ketsji/KX_PythonInit.cpp16
22 files changed, 351 insertions, 388 deletions
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 1da5e2ca381..58941e00914 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -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"
diff --git a/release/scripts/startup/bl_ui/properties_game.py b/release/scripts/startup/bl_ui/properties_game.py
index db65b0ff669..66b8cca7866 100644
--- a/release/scripts/startup/bl_ui/properties_game.py
+++ b/release/scripts/startup/bl_ui/properties_game.py
@@ -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'
diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py
index f7f67527b63..bc42b2a2a11 100644
--- a/release/scripts/startup/bl_ui/properties_particle.py
+++ b/release/scripts/startup/bl_ui/properties_particle.py
@@ -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
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 4b4c2d2b214..6a8439ffaaa 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -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
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 05f4887a542..6c0d07a15c9 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -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
diff --git a/release/scripts/startup/bl_ui/space_logic.py b/release/scripts/startup/bl_ui/space_logic.py
index 1ae8095fab3..1fc58475ace 100644
--- a/release/scripts/startup/bl_ui/space_logic.py
+++ b/release/scripts/startup/bl_ui/space_logic.py
@@ -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):
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 0feb56b931f..593b526d38b 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -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! */
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 1b849754db8..345e78d70c9 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -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;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index a682c329444..9638bba3e80 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -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);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 360a082b03b..445f2b8f0ba 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -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);
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
index 1c91f498d32..93bf133635d 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderInputDevice.h
@@ -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"
@@ -51,172 +52,9 @@
*/
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;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
index a6712c531fb..54c60096812 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
+++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.cpp
@@ -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;
diff --git a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h
index 63a01db2fe0..3039e69efcd 100644
--- a/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h
+++ b/source/gameengine/BlenderRoutines/KX_BlenderKeyboardDevice.h
@@ -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
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 57611d65e14..ff4b9ba9c96 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -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
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.h b/source/gameengine/Converter/BL_BlenderDataConversion.h
index 2ae7fee1798..6da3ac90aef 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.h
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.h
@@ -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
diff --git a/source/gameengine/Converter/KX_ConvertSensors.cpp b/source/gameengine/Converter/KX_ConvertSensors.cpp
index b7aee8ec924..9391d12a3ce 100644
--- a/source/gameengine/Converter/KX_ConvertSensors.cpp
+++ b/source/gameengine/Converter/KX_ConvertSensors.cpp
@@ -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,
diff --git a/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h b/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h
index 5b267c92908..3d88dc467b0 100644
--- a/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h
+++ b/source/gameengine/GamePlayer/common/GPC_KeyboardDevice.h
@@ -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;
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index 7490e187824..f9403c9725a 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -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;
}
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.h b/source/gameengine/GamePlayer/ghost/GPG_Application.h
index a8a976f9dd2..37625dc8998 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.h
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.h
@@ -103,6 +103,7 @@ protected:
* Shuts the game engine down.
*/
void exitEngine(void);
+ short m_exitkey;
/* The game data */
STR_String m_startSceneName;
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index a9be588e6b2..29727dc04da 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -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;
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index 5a02da07e43..96b737b686d 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -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.
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 29871c2b3cd..9a2c0cb89b1 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -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"},