コード例 #1
0
ファイル: sdl2_keyboard.c プロジェクト: asfluido/mruby-sdl2
static mrb_value
mrb_sdl2_keyboard_key_from_name(mrb_state *mrb, mrb_value mod)
{
  mrb_value name;
  mrb_get_args(mrb, "S", &name);
  return mrb_fixnum_value(SDL_GetKeyFromName(RSTRING_PTR(name)));
}
コード例 #2
0
ファイル: input_manager.cpp プロジェクト: Arroon/openage
Event InputManager::text_to_key_event(const std::string &key_str, const int mod) {
	SDL_Keycode key_code = SDL_GetKeyFromName(key_str.c_str());
	if (key_code == SDLK_UNKNOWN) {
		throw 0;
	}
	return sdl_key(key_code, static_cast<SDL_Keymod>(mod));
}
コード例 #3
0
ファイル: sdlwrapper.c プロジェクト: Mouq/ThroughTheWindow
extern int
game_is_pressed_name(const char *name)
{
    SDL_Keycode key = SDL_GetKeyFromName(name);
    int idx = SDL_GetScancodeFromKey(key);
    return game_is_pressed(idx);
}
コード例 #4
0
int ConfigManager::mapKey (const std::string& name)
{
	const std::string converted = string::replaceAll(name, "_", " ");
	const SDL_Keycode keycode = SDL_GetKeyFromName(converted.c_str());
	if (keycode == 0)
		return -1;
	return keycode;
}
コード例 #5
0
ファイル: config.c プロジェクト: Aeggy/neverball
static void config_key(const char *s, int i)
{
    SDL_Keycode c = SDL_GetKeyFromName(s);

    if (c == SDLK_UNKNOWN)
        config_set_d(i, option_d[i].def);
    else
        config_set_d(i, c);
}
コード例 #6
0
//
// Initialize input subsystem
//
void SDL2_InitInput(void)
{
   // initialize keyboard key bindings
   for(size_t i = 0; i < KBJK_MAX; i++)
   {
      if(estrempty(kbKeyNames[i]))
         kbKeyNames[i] = estrdup(SDL_GetKeyName(kbKeyCodes[i]));
      else
         kbKeyCodes[i] = SDL_GetKeyFromName(kbKeyNames[i]);
   }
}
コード例 #7
0
ファイル: Input.cpp プロジェクト: 456z/gosu
Gosu::Button Gosu::Input::charToId(wchar_t ch)
{
    std::wstring string(1, ch);
    SDL_Keycode keycode = SDL_GetKeyFromName(wstringToUTF8(string).c_str());
    
    if (keycode == SDLK_UNKNOWN) {
        return noButton;
    }
    else {
        return Button(SDL_GetScancodeFromKey(keycode));
    }
}
コード例 #8
0
int ConfigManager::mapModifier (const std::string& name)
{
	const std::string converted = string::replaceAll(name, "_", " ");
	const SDL_Keycode keycode = SDL_GetKeyFromName(converted.c_str());
	if (keycode & KMOD_SHIFT) {
		return KMOD_SHIFT;
	} else if (keycode & KMOD_ALT) {
		return KMOD_ALT;
	} else if (keycode & KMOD_CTRL) {
		return KMOD_CTRL;
	}
	return KMOD_NONE;
}
コード例 #9
0
ファイル: key_button.cpp プロジェクト: AsKorysti/anura
key_type get_key_sym(const std::string& s)
{
	if(s == "UP" || s == (("↑"))) {
		return SDLK_UP;
	} else if(s == "DOWN" || s == (("↓"))) {
		return SDLK_DOWN;
	} else if(s == "LEFT" || s == (("←"))) {
		return SDLK_LEFT;
	} else if(s == "RIGHT" || s == (("→"))) {
		return SDLK_RIGHT;
	}

	return SDL_GetKeyFromName(s.c_str());
}
コード例 #10
0
ファイル: input.c プロジェクト: Kinniken/naev
/**
 * @brief Gets the key id from its name.
 *
 *    @param name Name of the key to get id from.
 *    @return ID of the key.
 */
SDLKey input_keyConv( const char *name )
{
#if SDL_VERSION_ATLEAST(2,0,0)
   SDLKey k;
   k = SDL_GetKeyFromName( name );

   if (k == SDLK_UNKNOWN)
      WARN("Keyname '%s' doesn't match any key.", name);

   return k;
#else /* SDL_VERSION_ATLEAST(2,0,0) */
   SDLKey k, m;
   size_t l;
   char buf;

   l = strlen(name);
   buf = tolower(name[0]);

   /* Compare for single character. */
   if (l == 1) {
      m = MIN(256, INPUT_NUMKEYS);
      for (k=0; k < m; k++) { /* Only valid for char range. */
         /* Must not be NULL. */
         if (keyconv[k] == NULL)
            continue;

         /* Check if is also a single char. */
         if ((buf == tolower(keyconv[k][0])) && (keyconv[k][1] == '\0'))
            return k;
      }
   }
   /* Compare for strings. */
   else {
      for (k=0; k < INPUT_NUMKEYS; k++) {
         /* Must not be NULL. */
         if (keyconv[k] == NULL)
            continue;

         /* Compare strings. */
         if (strcmp(name , keyconv[k])==0)
            return k;
      }
   }

   WARN("Keyname '%s' doesn't match any key.", name);
   return SDLK_UNKNOWN;
#endif /* SDL_VERSION_ATLEAST(2,0,0) */
}
コード例 #11
0
ファイル: filters.cpp プロジェクト: ALEXLCC/pyland
KeyboardFilter KEY(std::initializer_list<std::string> keys) {
    std::set<SDL_Keycode> keyset;

    for (std::string key : keys) {
        SDL_Keycode keycode = SDL_GetKeyFromName(key.c_str());
        if (keycode == SDLK_UNKNOWN) {
            throw std::runtime_error("unrecognized key: " + key);
        }

        keyset.insert(keycode);
    }

    return [keyset] (KeyboardInputEvent event) {
        return keyset.find(event.key_code) != keyset.end();
    };
}
コード例 #12
0
	int LuaEnv_Input::IsKeyPressed(lua_State *state)
	{
		// First argument is keyboard key
		std::string keyboardKeyName = luaL_checkstring(state, 1);

		lua_settop(state, 0);

		SDL_Keycode keyCode = SDL_GetKeyFromName(keyboardKeyName.c_str());

		if(keyCode == SDLK_UNKNOWN)
			lua_pushboolean(state, 0);
		else
		{
			const Uint8 *keyboardState = SDL_GetKeyboardState(NULL);
			lua_pushboolean(state, keyboardState[SDL_GetScancodeFromKey(keyCode)]);
		}

		return 1;
	}
コード例 #13
0
/**
 * @brief Check call to SDL_GetKeyFromName for known, unknown and invalid name.
 * 
 * @sa http://wiki.libsdl.org/moin.cgi/SDL_GetKeyFromName
 */
int
keyboard_getKeyFromName(void *arg)
{
   SDL_Keycode result;

   /* Case where Key is known, 1 character input */
   result = SDL_GetKeyFromName("A");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/single)");
   SDLTest_AssertCheck(result == SDLK_a, "Verify result from call, expected: %i, got: %i", SDLK_a, result);

   /* Case where Key is known, 2 character input */
   result = SDL_GetKeyFromName("F1");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/double)");
   SDLTest_AssertCheck(result == SDLK_F1, "Verify result from call, expected: %i, got: %i", SDLK_F1, result);

   /* Case where Key is known, 3 character input */
   result = SDL_GetKeyFromName("End");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/triple)");
   SDLTest_AssertCheck(result == SDLK_END, "Verify result from call, expected: %i, got: %i", SDLK_END, result);

   /* Case where Key is known, 4 character input */
   result = SDL_GetKeyFromName("Find");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/quad)");
   SDLTest_AssertCheck(result == SDLK_FIND, "Verify result from call, expected: %i, got: %i", SDLK_FIND, result);

   /* Case where Key is known, multiple character input */
   result = SDL_GetKeyFromName("AudioStop");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(known/multi)");
   SDLTest_AssertCheck(result == SDLK_AUDIOSTOP, "Verify result from call, expected: %i, got: %i", SDLK_AUDIOSTOP, result);

   /* Case where Key is unknown */
   result = SDL_GetKeyFromName("NotThere");
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(unknown)");
   SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result);

   /* Case where input is NULL/invalid */
   result = SDL_GetKeyFromName(NULL);
   SDLTest_AssertPass("Call to SDL_GetKeyFromName(NULL)");
   SDLTest_AssertCheck(result == SDLK_UNKNOWN, "Verify result from call is UNKNOWN, expected: %i, got: %i", SDLK_UNKNOWN, result);

   return TEST_COMPLETED;
}
コード例 #14
0
ファイル: settings.c プロジェクト: Stary2001/InputClient-SDL
int load_settings(const char *filename, struct settings *s)
{
	char line_buff[256];

	FILE *f = fopen(filename, "r");
	if(f == NULL) { return 1; }

	while(fgets(line_buff, 256, f))
	{
		char *k = strchr(line_buff, '=');
		char *b = strchr(line_buff, '\r');
		if (b == NULL) b = strchr(line_buff, '\n'); // this accounts for \r\n line endings (windows style)

		if(k == NULL) continue;
		*k = 0;
		k++;
		if(b != NULL) *b = 0;

		char *name = line_buff;

		int key_index;
		if(strncmp(name, "kb", 2) == 0)
		{
			name += 2;
			key_index = find_key(name);
			if(key_index == -1) continue;

			s->bindings[0][key_index].type = TYPE_KEY;
			s->bindings[0][key_index].key = SDL_GetKeyFromName(k);
			if(s->bindings[0][key_index].key == SDLK_UNKNOWN)
			{
				s->bindings[0][key_index].type = TYPE_NONE;
			}
		}
		else if(strncmp(name, "pad", 3) == 0)
		{
			name += 3;
			key_index = find_key(name);
			if(key_index == -1) continue;

			if(strncmp(k, "button", 6) == 0)
			{
				k += 6;
				s->bindings[1][key_index].type = TYPE_BUTTON;
				s->bindings[1][key_index].button = atoi(k);
			}
			else if(strncmp(k, "hat", 3) == 0)
			{
				k += 3;
				s->bindings[1][key_index].type = TYPE_HAT;
				s->bindings[1][key_index].hat = atoi(k);
			}
			else if(strncmp(k, "axis", 4) == 0)
			{
				k += 4;
				s->bindings[1][key_index].type = TYPE_AXIS;
				s->bindings[1][key_index].axis.invert = *k++ == '+' ? 0 : 1;
				s->bindings[1][key_index].axis.axis = atoi(k);
			}
		}
		else if(strncmp(name, "ip", 2) == 0)
		{
			strncpy(s->ip, k, 15);
			s->ip_len = strlen(k);
		}
		else if(strncmp(name, "frame_ms", 8) == 0)
		{
			s->frame_ms = atoi(k);
		}
	}

	fclose(f);

	return 0;
}
コード例 #15
0
ファイル: input.cpp プロジェクト: drunkenme/flow2d
bool Input::get_key_press(const char* name) const
{
    return _key_press.find(SDL_GetKeyFromName(name)) != _key_press.end();
}
コード例 #16
0
ファイル: command.c プロジェクト: not-napoleon/Kookooligit
int bind_command_name(enum CommandCode command, const char *symbol) {
    /*
     * Bind the given symbol to the given command code
     */
    return bind_command_key_code(command, SDL_GetKeyFromName(symbol));
}
コード例 #17
0
ファイル: movement.cpp プロジェクト: Milias/BigRip
int MovementManager::Initialize()
{
  if (map != NULL) { return 1; }
  map = new MoveEventMap;

  MoveEvent * ev;
  SDL_Keycode key;

  ev = new MoveEvent;
  key = SDL_GetKeyFromName((*cfg)["Keys"]["Left"].asCString());

  ev->timer = SingletonEvents::RegisterTimer(PhysicsDeltaTime, std::bind<void>([this](double dt, double elapsed) {
    this->ControlBody->ApplyLinearImpulse(b2Vec2(1.0,0.0), this->ControlBody->GetWorldCenter(), true);
  }, _1, _2));

  SingletonEvents::ToggleTimer(ev->timer, false);

  ev->key_down = SingletonEvents::Register(SDL_KEYDOWN, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL && !ev->is_down) {
      SingletonEvents::ToggleTimer(ev->timer, true);
      ev->is_down = true;
    }
  }, _1));

  ev->key_up = SingletonEvents::Register(SDL_KEYUP, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL) {
      SingletonEvents::ToggleTimer(ev->timer, false);
      ev->is_down = false;
    }
  }, _1));

  map->emplace(key, ev);

  ev = new MoveEvent;
  key = SDL_GetKeyFromName((*cfg)["Keys"]["Right"].asCString());

  ev->timer = SingletonEvents::RegisterTimer(PhysicsDeltaTime, std::bind<void>([this](double dt, double elapsed) {
    this->ControlBody->ApplyLinearImpulse(b2Vec2(-1.0,0.0), this->ControlBody->GetWorldCenter(), true);
  }, _1, _2));

  SingletonEvents::ToggleTimer(ev->timer, false);

  ev->key_down = SingletonEvents::Register(SDL_KEYDOWN, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL && !ev->is_down) {
      SingletonEvents::ToggleTimer(ev->timer, true);
      ev->is_down = true;
    }
  }, _1));

  ev->key_up = SingletonEvents::Register(SDL_KEYUP, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL) {
      SingletonEvents::ToggleTimer(ev->timer, false);
      ev->is_down = false;
    }
  }, _1));

  map->emplace(key, ev);

  ev = new MoveEvent;
  key = SDL_GetKeyFromName((*cfg)["Keys"]["Jump"].asCString());
  ev->key_down = SingletonEvents::Register(SDL_KEYDOWN, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL && !ev->is_down) {
      this->ControlBody->ApplyLinearImpulse(b2Vec2(0.0,-22.0), this->ControlBody->GetWorldCenter(), true);
      ev->is_down = true;
    }
  }, _1));

  ev->key_up = SingletonEvents::Register(SDL_KEYUP, std::bind<void>([this, key, ev](SDL_Event &e) {
    if (key == e.key.keysym.sym && ControlBody != NULL) {
      ev->is_down = false;
    }
  }, _1));

  map->emplace(key, ev);

  UpdateTimer = SingletonEvents::RegisterTimer(PhysicsDeltaTime, std::bind(&MovementManager::UpdateDynamicPositions, this, _1, _2));

  return 0;
}
コード例 #18
0
ファイル: key.c プロジェクト: ivokosir/cogh
unsigned int readCode(const char* name) {
    return SDL_GetKeyFromName(name);
}
コード例 #19
0
inline int32_t from_string(const std::string& str) noexcept {
    return SDL_GetKeyFromName(str.c_str());
}