예제 #1
0
	void OnKeyUpPick(SDL_KeyboardEvent *e) {
		Disconnect();
		m_binding.type = KeyBindings::KEYBOARD_KEY;
		m_binding.u.keyboard.key = e->keysym.sym;
		// get rid of number lock, caps lock, etc
		m_binding.u.keyboard.mod = SDLMod(e->keysym.mod & (KMOD_CTRL | KMOD_ALT | KMOD_META | KMOD_SHIFT));
		Close();
	}
예제 #2
0
void TCOD_noteye_check() {
  if(!tnoteye.mode) return;
  TCOD_noteye_init();

  if(delayed) TCOD_noteye_sendscreen(tbuffer);
  
  int i;
  for(i=0; i < MAXCLIENT; i++) if(client[i] == NULL) break;
  if(i < MAXCLIENT && i < tnoteye.maxClients) {
    TCPsocket skt = SDLNet_TCP_Accept(server->socket);
    if(skt) {
      client[i] = new NTCPStream(skt);
      client[i]->writeStr("NotEye stream");
      client[i]->writeInt(NOTEYEVER);
      client[i]->writeStr(tnoteye.name);
      if(scr) {
        TCOD_noteye_render();
        client[i]->writeInt(nepScreen);
        client[i]->writeScr(scr);
        client[i]->flush();
        }
      }
    }
  
  for(int i=0; i < tnoteye.maxClients; i++) while(client[i] && client[i]->ready()) {
    if(client[i]->eof()) {
      delete client[i];
      client[i] = NULL;
      }
    else {
      int nep = client[i]->readInt();
      if(nep == nepKey) {
        SDL_Event ev;
        SDL_KeyboardEvent& kev(ev.key);
        kev.keysym.sym = SDLKey(client[i]->readInt());
        kev.keysym.mod = SDLMod(client[i]->readInt());
        ev.type = client[i]->readInt() == evKeyDown ? SDL_KEYDOWN : SDL_KEYUP;
        kev.keysym.unicode = client[i]->readInt();
        SDL_PushEvent(&ev);
        }
      else if(nep == nepMouse) {
        tnoteye.x = client[i]->readInt();
        tnoteye.y = client[i]->readInt();
        tnoteye.state = client[i]->readInt();
        tnoteye.active = true;
        }
      else if(nep == nepMessage) {
        string s = client[i]->readStr();
        TCOD_noteye_writestr(s.c_str());
        }
      else fprintf(stderr, "Unknown NEP: %d\n", nep);
      }
    }
  }
예제 #3
0
/**
 * Exampe strings:
 *   Key55
 *   Joy0Button2
 *   Joy0Hat0Dir3
 */
bool KeyBindingFromString(const std::string &str, KeyBinding *kb)
{
	const char *digits = "1234567890";
	const char *p = str.c_str();

	if (strncmp(p, "Key", 3) == 0) {
		kb->type = KEYBOARD_KEY;
		p += 3;

		kb->u.keyboard.key = SDLKey(atoi(p));
		p += strspn(p, digits);

		if (strncmp(p, "Mod", 3) == 0) {
			p += 3;
			kb->u.keyboard.mod = SDLMod(atoi(p));
		} else
			kb->u.keyboard.mod = KMOD_NONE;

		return true;

	} else if (strncmp(p, "Joy", 3) == 0) {
		p += 3;

		int joy = atoi(p);
		p += strspn(p, digits);

		if (strncmp(p, "Button", 6) == 0) {
			p += 6;
			kb->type = JOYSTICK_BUTTON;
			kb->u.joystickButton.joystick = joy;
			kb->u.joystickButton.button = atoi(p);
			return true;
		} else if (strncmp(p, "Hat", 3) == 0) {
			p += 3;
			kb->type = JOYSTICK_HAT;
			kb->u.joystickHat.joystick = joy;
			kb->u.joystickHat.hat = atoi(p);
			p += strspn(p, digits);

			if (strncmp(p, "Dir", 3) != 0)
				return false;

			p += 3;
			kb->u.joystickHat.direction = atoi(p);
			return true;
		}

		return false;
	}

	return false;
}
예제 #4
0
	void play_scenario::play()
	{
		// We have to first append a "event" that collects end poisition
		end_pos_.reset(new end_position_collector(current_time_++));
		end_position_collector* end = static_cast<end_position_collector*>(end_pos_.get());
		source_.add_event(end_pos_);

		source_.type_key(current_time_++, SDLK_COLON, SDLMod(KMOD_LSHIFT | KMOD_SHIFT) );
		source_.type_key(current_time_++, SDLK_q);
		source_.type_key(current_time_++, SDLK_EXCLAIM);
		source_.type_key(current_time_++, SDLK_RETURN);

		game_state& state = end->get_state();
		state.classification().campaign_type = "test";
		state.carryover_sides_start["next_scenario"] = id_;
		play_game(get_fake_display(1024, 768), state, game_config_);
	}
예제 #5
0
IOController::IOController() {
	//XXX: For now we hardcode the specific actions
	SDLMod item_mod = SDLMod(KMOD_LSHIFT | KMOD_RSHIFT);
	char action_key = 'j';

	// Spell choice
	bind_key_events(event_bindings, "yuiop", IOEvent::ACTIVATE_SPELL_N,
			KMOD_NONE, item_mod/*rejected*/, true);
//	bind_key_events(event_bindings, "12345", IOEvent::ACTIVATE_SPELL_N,
//			KMOD_NONE, item_mod/*rejected*/, true);

//	// Item choice
//	bind_key_events(event_bindings, "yuiop67890", IOEvent::USE_ITEM_N, item_mod,
//			KMOD_NONE, false);
	bind_key_events(event_bindings, "1234567890", IOEvent::USE_ITEM_N,
			KMOD_NONE, KMOD_NONE, false);

	/*Scroll spell up*/
	{
		IOEvent event(IOEvent::TOGGLE_ACTION_UP);
		IOEventTrigger trigger1(event, IOEventTrigger::MOUSE_WHEEL_UP,
				SDLKey(0), KMOD_NONE, KMOD_NONE, true);
		IOEventTrigger trigger2(event, IOEventTrigger::NONE, SDLKey('e'),
				KMOD_NONE, KMOD_NONE);
		IOEventTrigger trigger3(event, IOEventTrigger::NONE, SDLKey('.'),
				KMOD_NONE, KMOD_NONE);
		event_bindings.push_back(trigger1);
		event_bindings.push_back(trigger2);
		event_bindings.push_back(trigger3);
	}
	/*Scroll spell down*/
	{
		IOEvent event(IOEvent::TOGGLE_ACTION_DOWN);
		IOEventTrigger trigger1(event, IOEventTrigger::MOUSE_WHEEL_DOWN,
				SDLKey(0), KMOD_NONE, KMOD_NONE, true);
		IOEventTrigger trigger2(event, IOEventTrigger::NONE, SDLKey('q'),
				KMOD_NONE, KMOD_NONE);
		IOEventTrigger trigger3(event, IOEventTrigger::NONE, SDLKey(','),
				KMOD_NONE, KMOD_NONE);
		event_bindings.push_back(trigger1);
		event_bindings.push_back(trigger2);
		event_bindings.push_back(trigger3);
	}
	/*Use weapon*/
	{
		IOEvent event(IOEvent::USE_WEAPON);
		IOEventTrigger trigger1(event, IOEventTrigger::MOUSE_MIDDLE_CLICK,
				SDLKey(0), KMOD_NONE, KMOD_NONE, true);
		IOEventTrigger trigger2(event, IOEventTrigger::NONE, SDLKey('h'),
				KMOD_NONE, KMOD_NONE, true);
		event_bindings.push_back(trigger1);
		event_bindings.push_back(trigger2);
	}

	/*Do autotarget action */
	{
		IOEvent event(IOEvent::AUTOTARGET_CURRENT_ACTION);
		IOEventTrigger trigger1(event, IOEventTrigger::NONE, SDLKey(action_key),
				KMOD_NONE, KMOD_NONE, true);
		IOEventTrigger trigger2(event, IOEventTrigger::NONE, SDLK_SPACE,
				KMOD_NONE, KMOD_NONE, true);
		event_bindings.push_back(trigger1);
		event_bindings.push_back(trigger2);
	}

	/*Do targetted action */{
		IOEvent event(IOEvent::MOUSETARGET_CURRENT_ACTION);
		IOEventTrigger trigger(event, IOEventTrigger::MOUSE_LEFT_CLICK,
				SDLKey(0), KMOD_NONE, KMOD_NONE, true);
		event_bindings.push_back(trigger);
	}

}