mirror of
https://github.com/minetest/minetest.git
synced 2024-11-27 01:53:45 +01:00
Added key configuration in the configuration file.
This commit is contained in:
parent
0674db4a6b
commit
974c5cc08c
@ -11,6 +11,19 @@
|
||||
# Client side stuff
|
||||
#
|
||||
|
||||
#keymap_forward = KEY_KEY_W
|
||||
#keymap_backward = KEY_KEY_S
|
||||
#keymap_left = KEY_KEY_A
|
||||
#keymap_right = KEY_KEY_D
|
||||
#keymap_jump = KEY_SPACE
|
||||
#keymap_sneak = KEY_RSHIFT
|
||||
#keymap_inventory = KEY_KEY_I
|
||||
#keymap_chat = KEY_KEY_T
|
||||
#keymap_rangeselect = KEY_KEY_R
|
||||
# Some (temporary) keys for debugging
|
||||
#keymap_special1 = KEY_KEY_E
|
||||
#keymap_print_debug_stacks = KEY_KEY_P
|
||||
|
||||
#wanted_fps = 30
|
||||
#fps_max = 60
|
||||
#viewing_range_nodes_max = 300
|
||||
|
@ -81,6 +81,7 @@ set(common_SRCS
|
||||
# Client sources
|
||||
set(minetest_SRCS
|
||||
${common_SRCS}
|
||||
keycode.cpp
|
||||
clouds.cpp
|
||||
clientobject.cpp
|
||||
guiFurnaceMenu.cpp
|
||||
|
@ -24,18 +24,33 @@ extern Settings g_settings;
|
||||
void set_default_settings()
|
||||
{
|
||||
// Client and server
|
||||
|
||||
g_settings.setDefault("port", "");
|
||||
g_settings.setDefault("name", "");
|
||||
g_settings.setDefault("footprints", "false");
|
||||
|
||||
// Client stuff
|
||||
|
||||
g_settings.setDefault("keymap_forward", "KEY_KEY_W");
|
||||
g_settings.setDefault("keymap_backward", "KEY_KEY_S");
|
||||
g_settings.setDefault("keymap_left", "KEY_KEY_A");
|
||||
g_settings.setDefault("keymap_right", "KEY_KEY_D");
|
||||
g_settings.setDefault("keymap_jump", "KEY_SPACE");
|
||||
g_settings.setDefault("keymap_sneak", "KEY_RSHIFT");
|
||||
g_settings.setDefault("keymap_inventory", "KEY_KEY_I");
|
||||
g_settings.setDefault("keymap_chat", "KEY_KEY_T");
|
||||
g_settings.setDefault("keymap_rangeselect", "KEY_KEY_R");
|
||||
// Some (temporary) keys for debugging
|
||||
g_settings.setDefault("keymap_special1", "KEY_KEY_E");
|
||||
g_settings.setDefault("keymap_print_debug_stacks", "KEY_KEY_P");
|
||||
|
||||
g_settings.setDefault("wanted_fps", "30");
|
||||
g_settings.setDefault("fps_max", "60");
|
||||
g_settings.setDefault("viewing_range_nodes_max", "300");
|
||||
g_settings.setDefault("viewing_range_nodes_min", "35");
|
||||
g_settings.setDefault("screenW", "800");
|
||||
g_settings.setDefault("screenH", "600");
|
||||
g_settings.setDefault("port", "");
|
||||
g_settings.setDefault("address", "");
|
||||
g_settings.setDefault("name", "");
|
||||
g_settings.setDefault("random_input", "false");
|
||||
g_settings.setDefault("client_delete_unused_sectors_timeout", "1200");
|
||||
g_settings.setDefault("enable_fog", "true");
|
||||
|
31
src/game.cpp
31
src/game.cpp
@ -28,6 +28,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
#include "materials.h"
|
||||
#include "config.h"
|
||||
#include "clouds.h"
|
||||
#include "keycode.h"
|
||||
|
||||
/*
|
||||
Setting this to 1 enables a special camera mode that forces
|
||||
@ -1079,7 +1080,7 @@ void the_game(
|
||||
/*
|
||||
Launch menus according to keys
|
||||
*/
|
||||
if(input->wasKeyDown(irr::KEY_KEY_I))
|
||||
if(input->wasKeyDown(getKeySetting("keymap_inventory")))
|
||||
{
|
||||
dstream<<DTIME<<"the_game: "
|
||||
<<"Launching inventory"<<std::endl;
|
||||
@ -1105,7 +1106,7 @@ void the_game(
|
||||
|
||||
menu->drop();
|
||||
}
|
||||
else if(input->wasKeyDown(irr::KEY_ESCAPE))
|
||||
else if(input->wasKeyDown(KEY_ESCAPE))
|
||||
{
|
||||
dstream<<DTIME<<"the_game: "
|
||||
<<"Launching pause menu"<<std::endl;
|
||||
@ -1113,7 +1114,7 @@ void the_game(
|
||||
(new GUIPauseMenu(guienv, guiroot, -1, g_gamecallback,
|
||||
&g_menumgr))->drop();
|
||||
}
|
||||
else if(input->wasKeyDown(irr::KEY_KEY_T))
|
||||
else if(input->wasKeyDown(getKeySetting("keymap_chat")))
|
||||
{
|
||||
TextDest *dest = new TextDestChat(&client);
|
||||
|
||||
@ -1163,7 +1164,7 @@ void the_game(
|
||||
}
|
||||
|
||||
// Viewing range selection
|
||||
if(input->wasKeyDown(irr::KEY_KEY_R))
|
||||
if(input->wasKeyDown(getKeySetting("keymap_rangeselect")))
|
||||
{
|
||||
if(draw_control.range_all)
|
||||
{
|
||||
@ -1178,7 +1179,7 @@ void the_game(
|
||||
}
|
||||
|
||||
// Print debug stacks
|
||||
if(input->wasKeyDown(irr::KEY_KEY_P))
|
||||
if(input->wasKeyDown(getKeySetting("keymap_print_debug_stacks")))
|
||||
{
|
||||
dstream<<"-----------------------------------------"
|
||||
<<std::endl;
|
||||
@ -1190,6 +1191,7 @@ void the_game(
|
||||
|
||||
/*
|
||||
Player speed control
|
||||
TODO: Cache the keycodes from getKeySetting
|
||||
*/
|
||||
|
||||
{
|
||||
@ -1203,14 +1205,13 @@ void the_game(
|
||||
float a_pitch,
|
||||
float a_yaw*/
|
||||
PlayerControl control(
|
||||
input->isKeyDown(irr::KEY_KEY_W),
|
||||
input->isKeyDown(irr::KEY_KEY_S),
|
||||
input->isKeyDown(irr::KEY_KEY_A),
|
||||
input->isKeyDown(irr::KEY_KEY_D),
|
||||
input->isKeyDown(irr::KEY_SPACE),
|
||||
input->isKeyDown(irr::KEY_KEY_E),
|
||||
input->isKeyDown(irr::KEY_LSHIFT)
|
||||
|| input->isKeyDown(irr::KEY_RSHIFT),
|
||||
input->isKeyDown(getKeySetting("keymap_forward")),
|
||||
input->isKeyDown(getKeySetting("keymap_backward")),
|
||||
input->isKeyDown(getKeySetting("keymap_left")),
|
||||
input->isKeyDown(getKeySetting("keymap_right")),
|
||||
input->isKeyDown(getKeySetting("keymap_jump")),
|
||||
input->isKeyDown(getKeySetting("keymap_special1")),
|
||||
input->isKeyDown(getKeySetting("keymap_sneak")),
|
||||
camera_pitch,
|
||||
camera_yaw
|
||||
);
|
||||
@ -1281,7 +1282,7 @@ void the_game(
|
||||
s32 dy = input->getMousePos().Y - displaycenter.Y;
|
||||
//std::cout<<"window active, pos difference "<<dx<<","<<dy<<std::endl;
|
||||
|
||||
const float keyspeed = 500;
|
||||
/*const float keyspeed = 500;
|
||||
if(input->isKeyDown(irr::KEY_UP))
|
||||
dy -= dtime * keyspeed;
|
||||
if(input->isKeyDown(irr::KEY_DOWN))
|
||||
@ -1289,7 +1290,7 @@ void the_game(
|
||||
if(input->isKeyDown(irr::KEY_LEFT))
|
||||
dx -= dtime * keyspeed;
|
||||
if(input->isKeyDown(irr::KEY_RIGHT))
|
||||
dx += dtime * keyspeed;
|
||||
dx += dtime * keyspeed;*/
|
||||
|
||||
camera_yaw -= dx*0.2;
|
||||
camera_pitch += dy*0.2;
|
||||
|
@ -20,6 +20,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
|
||||
#include "guiInventoryMenu.h"
|
||||
#include "constants.h"
|
||||
#include "keycode.h"
|
||||
|
||||
void drawInventoryItem(video::IVideoDriver *driver,
|
||||
gui::IGUIFont *font,
|
||||
@ -293,7 +294,7 @@ bool GUIInventoryMenu::OnEvent(const SEvent& event)
|
||||
quitMenu();
|
||||
return true;
|
||||
}
|
||||
if(event.KeyInput.Key==KEY_KEY_I && event.KeyInput.PressedDown)
|
||||
if(event.KeyInput.Key==getKeySetting("keymap_inventory") && event.KeyInput.PressedDown)
|
||||
{
|
||||
quitMenu();
|
||||
return true;
|
||||
|
192
src/keycode.cpp
Normal file
192
src/keycode.cpp
Normal file
@ -0,0 +1,192 @@
|
||||
/*
|
||||
Minetest-c55
|
||||
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "keycode.h"
|
||||
#include "main.h" // For g_settings
|
||||
|
||||
#define CHECKKEY(x){if(strcmp(name, #x)==0) return irr::x;}
|
||||
|
||||
irr::EKEY_CODE keyname_to_keycode(const char *name)
|
||||
{
|
||||
CHECKKEY(KEY_LBUTTON)
|
||||
CHECKKEY(KEY_RBUTTON)
|
||||
CHECKKEY(KEY_CANCEL)
|
||||
CHECKKEY(KEY_MBUTTON)
|
||||
CHECKKEY(KEY_XBUTTON1)
|
||||
CHECKKEY(KEY_XBUTTON2)
|
||||
CHECKKEY(KEY_BACK)
|
||||
CHECKKEY(KEY_TAB)
|
||||
CHECKKEY(KEY_CLEAR)
|
||||
CHECKKEY(KEY_RETURN)
|
||||
CHECKKEY(KEY_SHIFT)
|
||||
CHECKKEY(KEY_CONTROL)
|
||||
CHECKKEY(KEY_MENU)
|
||||
CHECKKEY(KEY_PAUSE)
|
||||
CHECKKEY(KEY_CAPITAL)
|
||||
CHECKKEY(KEY_KANA)
|
||||
CHECKKEY(KEY_HANGUEL)
|
||||
CHECKKEY(KEY_HANGUL)
|
||||
CHECKKEY(KEY_JUNJA)
|
||||
CHECKKEY(KEY_FINAL)
|
||||
CHECKKEY(KEY_HANJA)
|
||||
CHECKKEY(KEY_KANJI)
|
||||
CHECKKEY(KEY_ESCAPE)
|
||||
CHECKKEY(KEY_CONVERT)
|
||||
CHECKKEY(KEY_NONCONVERT)
|
||||
CHECKKEY(KEY_ACCEPT)
|
||||
CHECKKEY(KEY_MODECHANGE)
|
||||
CHECKKEY(KEY_SPACE)
|
||||
CHECKKEY(KEY_PRIOR)
|
||||
CHECKKEY(KEY_NEXT)
|
||||
CHECKKEY(KEY_END)
|
||||
CHECKKEY(KEY_HOME)
|
||||
CHECKKEY(KEY_LEFT)
|
||||
CHECKKEY(KEY_UP)
|
||||
CHECKKEY(KEY_RIGHT)
|
||||
CHECKKEY(KEY_DOWN)
|
||||
CHECKKEY(KEY_SELECT)
|
||||
CHECKKEY(KEY_PRINT)
|
||||
CHECKKEY(KEY_EXECUT)
|
||||
CHECKKEY(KEY_SNAPSHOT)
|
||||
CHECKKEY(KEY_INSERT)
|
||||
CHECKKEY(KEY_DELETE)
|
||||
CHECKKEY(KEY_HELP)
|
||||
CHECKKEY(KEY_KEY_0)
|
||||
CHECKKEY(KEY_KEY_1)
|
||||
CHECKKEY(KEY_KEY_2)
|
||||
CHECKKEY(KEY_KEY_3)
|
||||
CHECKKEY(KEY_KEY_4)
|
||||
CHECKKEY(KEY_KEY_5)
|
||||
CHECKKEY(KEY_KEY_6)
|
||||
CHECKKEY(KEY_KEY_7)
|
||||
CHECKKEY(KEY_KEY_8)
|
||||
CHECKKEY(KEY_KEY_9)
|
||||
CHECKKEY(KEY_KEY_A)
|
||||
CHECKKEY(KEY_KEY_B)
|
||||
CHECKKEY(KEY_KEY_C)
|
||||
CHECKKEY(KEY_KEY_D)
|
||||
CHECKKEY(KEY_KEY_E)
|
||||
CHECKKEY(KEY_KEY_F)
|
||||
CHECKKEY(KEY_KEY_G)
|
||||
CHECKKEY(KEY_KEY_H)
|
||||
CHECKKEY(KEY_KEY_I)
|
||||
CHECKKEY(KEY_KEY_J)
|
||||
CHECKKEY(KEY_KEY_K)
|
||||
CHECKKEY(KEY_KEY_L)
|
||||
CHECKKEY(KEY_KEY_M)
|
||||
CHECKKEY(KEY_KEY_N)
|
||||
CHECKKEY(KEY_KEY_O)
|
||||
CHECKKEY(KEY_KEY_P)
|
||||
CHECKKEY(KEY_KEY_Q)
|
||||
CHECKKEY(KEY_KEY_R)
|
||||
CHECKKEY(KEY_KEY_S)
|
||||
CHECKKEY(KEY_KEY_T)
|
||||
CHECKKEY(KEY_KEY_U)
|
||||
CHECKKEY(KEY_KEY_V)
|
||||
CHECKKEY(KEY_KEY_W)
|
||||
CHECKKEY(KEY_KEY_X)
|
||||
CHECKKEY(KEY_KEY_Y)
|
||||
CHECKKEY(KEY_KEY_Z)
|
||||
CHECKKEY(KEY_LWIN)
|
||||
CHECKKEY(KEY_RWIN)
|
||||
CHECKKEY(KEY_APPS)
|
||||
CHECKKEY(KEY_SLEEP)
|
||||
CHECKKEY(KEY_NUMPAD0)
|
||||
CHECKKEY(KEY_NUMPAD1)
|
||||
CHECKKEY(KEY_NUMPAD2)
|
||||
CHECKKEY(KEY_NUMPAD3)
|
||||
CHECKKEY(KEY_NUMPAD4)
|
||||
CHECKKEY(KEY_NUMPAD5)
|
||||
CHECKKEY(KEY_NUMPAD6)
|
||||
CHECKKEY(KEY_NUMPAD7)
|
||||
CHECKKEY(KEY_NUMPAD8)
|
||||
CHECKKEY(KEY_NUMPAD9)
|
||||
CHECKKEY(KEY_MULTIPLY)
|
||||
CHECKKEY(KEY_ADD)
|
||||
CHECKKEY(KEY_SEPARATOR)
|
||||
CHECKKEY(KEY_SUBTRACT)
|
||||
CHECKKEY(KEY_DECIMAL)
|
||||
CHECKKEY(KEY_DIVIDE)
|
||||
CHECKKEY(KEY_F1)
|
||||
CHECKKEY(KEY_F2)
|
||||
CHECKKEY(KEY_F3)
|
||||
CHECKKEY(KEY_F4)
|
||||
CHECKKEY(KEY_F5)
|
||||
CHECKKEY(KEY_F6)
|
||||
CHECKKEY(KEY_F7)
|
||||
CHECKKEY(KEY_F8)
|
||||
CHECKKEY(KEY_F9)
|
||||
CHECKKEY(KEY_F10)
|
||||
CHECKKEY(KEY_F11)
|
||||
CHECKKEY(KEY_F12)
|
||||
CHECKKEY(KEY_F13)
|
||||
CHECKKEY(KEY_F14)
|
||||
CHECKKEY(KEY_F15)
|
||||
CHECKKEY(KEY_F16)
|
||||
CHECKKEY(KEY_F17)
|
||||
CHECKKEY(KEY_F18)
|
||||
CHECKKEY(KEY_F19)
|
||||
CHECKKEY(KEY_F20)
|
||||
CHECKKEY(KEY_F21)
|
||||
CHECKKEY(KEY_F22)
|
||||
CHECKKEY(KEY_F23)
|
||||
CHECKKEY(KEY_F24)
|
||||
CHECKKEY(KEY_NUMLOCK)
|
||||
CHECKKEY(KEY_SCROLL)
|
||||
CHECKKEY(KEY_LSHIFT)
|
||||
CHECKKEY(KEY_RSHIFT)
|
||||
CHECKKEY(KEY_LCONTROL)
|
||||
CHECKKEY(KEY_RCONTROL)
|
||||
CHECKKEY(KEY_LMENU)
|
||||
CHECKKEY(KEY_RMENU)
|
||||
CHECKKEY(KEY_PLUS)
|
||||
CHECKKEY(KEY_COMMA)
|
||||
CHECKKEY(KEY_MINUS)
|
||||
CHECKKEY(KEY_PERIOD)
|
||||
CHECKKEY(KEY_ATTN)
|
||||
CHECKKEY(KEY_CRSEL)
|
||||
CHECKKEY(KEY_EXSEL)
|
||||
CHECKKEY(KEY_EREOF)
|
||||
CHECKKEY(KEY_PLAY)
|
||||
CHECKKEY(KEY_ZOOM)
|
||||
CHECKKEY(KEY_PA1)
|
||||
CHECKKEY(KEY_OEM_CLEAR)
|
||||
|
||||
return irr::KEY_KEY_CODES_COUNT;
|
||||
}
|
||||
|
||||
/*
|
||||
Key config
|
||||
*/
|
||||
|
||||
// A simple cache for quicker lookup
|
||||
core::map<std::string, irr::EKEY_CODE> g_key_setting_cache;
|
||||
|
||||
irr::EKEY_CODE getKeySetting(const char *settingname)
|
||||
{
|
||||
core::map<std::string, irr::EKEY_CODE>::Node *n;
|
||||
n = g_key_setting_cache.find(settingname);
|
||||
if(n)
|
||||
return n->getValue();
|
||||
irr::EKEY_CODE c = keyname_to_keycode(g_settings.get(settingname).c_str());
|
||||
g_key_setting_cache.insert(settingname, c);
|
||||
return c;
|
||||
}
|
||||
|
||||
|
27
src/keycode.h
Normal file
27
src/keycode.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
Minetest-c55
|
||||
Copyright (C) 2010-2011 celeron55, Perttu Ahola <celeron55@gmail.com>
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
#include "common_irrlicht.h"
|
||||
|
||||
irr::EKEY_CODE keyname_to_keycode(const char *name);
|
||||
|
||||
// Key configuration getter
|
||||
irr::EKEY_CODE getKeySetting(const char *settingname);
|
||||
|
||||
|
19
src/main.cpp
19
src/main.cpp
@ -137,10 +137,10 @@ Networking and serialization:
|
||||
|
||||
TODO: Get rid of GotSplitPacketException
|
||||
|
||||
GUI:
|
||||
----
|
||||
User Interface:
|
||||
---------------
|
||||
|
||||
TODO: Configuration menu, at least for keys
|
||||
TODO: Use getKeySetting everywhere for ESC key and stuff
|
||||
|
||||
Graphics:
|
||||
---------
|
||||
@ -326,6 +326,7 @@ Making it more portable:
|
||||
//#include "tile.h"
|
||||
#include "materials.h"
|
||||
#include "game.h"
|
||||
#include "keycode.h"
|
||||
|
||||
// This makes textures
|
||||
ITextureSource *g_texturesource = NULL;
|
||||
@ -721,7 +722,8 @@ public:
|
||||
if(counter1 < 0.0)
|
||||
{
|
||||
counter1 = 0.1*Rand(1, 40);
|
||||
keydown[irr::KEY_SPACE] = !keydown[irr::KEY_SPACE];
|
||||
keydown[getKeySetting("keymap_jump")] =
|
||||
!keydown[getKeySetting("keymap_jump")];
|
||||
}
|
||||
}
|
||||
{
|
||||
@ -730,7 +732,8 @@ public:
|
||||
if(counter1 < 0.0)
|
||||
{
|
||||
counter1 = 0.1*Rand(1, 40);
|
||||
keydown[irr::KEY_KEY_E] = !keydown[irr::KEY_KEY_E];
|
||||
keydown[getKeySetting("keymap_special1")] =
|
||||
!keydown[getKeySetting("keymap_special1")];
|
||||
}
|
||||
}
|
||||
{
|
||||
@ -739,7 +742,8 @@ public:
|
||||
if(counter1 < 0.0)
|
||||
{
|
||||
counter1 = 0.1*Rand(1, 40);
|
||||
keydown[irr::KEY_KEY_W] = !keydown[irr::KEY_KEY_W];
|
||||
keydown[getKeySetting("keymap_forward")] =
|
||||
!keydown[getKeySetting("keymap_forward")];
|
||||
}
|
||||
}
|
||||
{
|
||||
@ -748,7 +752,8 @@ public:
|
||||
if(counter1 < 0.0)
|
||||
{
|
||||
counter1 = 0.1*Rand(1, 40);
|
||||
keydown[irr::KEY_KEY_A] = !keydown[irr::KEY_KEY_A];
|
||||
keydown[getKeySetting("keymap_left")] =
|
||||
!keydown[getKeySetting("keymap_left")];
|
||||
}
|
||||
}
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user