本文整理汇总了C++中InputState::isKeyPressed方法的典型用法代码示例。如果您正苦于以下问题:C++ InputState::isKeyPressed方法的具体用法?C++ InputState::isKeyPressed怎么用?C++ InputState::isKeyPressed使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类InputState
的用法示例。
在下文中一共展示了InputState::isKeyPressed方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: onInput
void EntitiesEditor::onInput(const InputState &state) {
auto mouse_pos = state.mousePos() - clippedRect().min;
computeCursor(mouse_pos, mouse_pos, state.isKeyPressed(InputKey::lshift));
if(state.isKeyDown('s')) {
m_mode = Mode::selecting;
sendEvent(this, Event::button_clicked, m_mode);
}
if(state.isKeyDown('p')) {
m_mode = Mode::placing;
sendEvent(this, Event::button_clicked, m_mode);
}
if(m_proto) {
int inc = 0;
if(state.isKeyDown(InputKey::left)) inc = -1;
if(state.isKeyDown(InputKey::right)) inc = 1;
int dir_count = m_proto->sprite().dirCount(0);
if(inc && dir_count)
m_proto_angle = (m_proto_angle + inc + dir_count) % dir_count;
m_proto->setDirAngle(constant::pi * 2.0f * (float)m_proto_angle / float(dir_count));
}
if(state.isKeyPressed(InputKey::del)) {
for(int i = 0; i < (int)m_selected_ids.size(); i++)
m_entity_map.remove(m_selected_ids[i]);
m_selected_ids.clear();
}
m_view.update(state);
}
示例2: update
void View::update(const InputState &state) {
if(state.isKeyDown('g')) {
if(m_is_visible) {
if(m_cell_size == 3)
m_cell_size = 6;
else if(m_cell_size == 6)
m_cell_size = 9;
else {
m_cell_size = 1;
m_is_visible = false;
}
}
else {
m_cell_size = 3;
m_is_visible = true;
}
}
int height_change = state.mouseWheelMove() +
(state.isKeyDownAuto(InputKey::pagedown)? -1 : 0) +
(state.isKeyDownAuto(InputKey::pageup)? 1 : 0);
if(height_change)
m_height = clamp(m_height + height_change, 0, (int)Grid::max_height);
{
int actions[TileGroup::Group::side_count] = {
InputKey::kp_1,
InputKey::kp_2,
InputKey::kp_3,
InputKey::kp_6,
InputKey::kp_9,
InputKey::kp_8,
InputKey::kp_7,
InputKey::kp_4
};
for(int n = 0; n < arraySize(actions); n++)
if(state.isKeyDownAuto(actions[n]))
m_view_pos += worldToScreen(TileGroup::Group::s_side_offsets[n] * m_cell_size);
}
if((state.isKeyPressed(InputKey::lctrl) && state.isMouseButtonPressed(InputButton::left)) ||
state.isMouseButtonPressed(InputButton::middle))
m_view_pos -= state.mouseMove();
IRect rect = worldToScreen(IBox(int3(0, 0, 0), asXZY(m_tile_map.dimensions(), 256)));
m_view_pos = clamp(m_view_pos, rect.min, rect.max - m_view_size);
}
示例3: onMouseDrag
bool EntitiesEditor::onMouseDrag(const InputState &state, int2 start, int2 current, int key, int is_final) {
bool shift_pressed = state.isKeyPressed(InputKey::lshift);
if(key == 0 && !state.isKeyPressed(InputKey::lctrl)) {
computeCursor(start, current, shift_pressed);
m_is_selecting = !is_final;
if(m_mode == Mode::selecting && is_final && is_final != -1) {
findVisible(m_selected_ids, m_selection);
computeCursor(current, current, shift_pressed);
}
else if(m_mode == Mode::placing) {
if(m_proto->typeId() == EntityId::trigger) {
Trigger *trigger = static_cast<Trigger*>(m_proto.get());
if(m_trigger_mode == 0) {
m_trigger_box = m_view.computeCursor(start, current, int3(1, 1, 1), m_cursor_pos.y, 0);
if(state.isMouseButtonDown(InputButton::right)) {
m_trigger_mode = 1;
m_trigger_offset = current;
}
}
IBox new_box = m_trigger_box;
if(m_trigger_mode == 1) {
int offset = screenToWorld(int2(0, m_trigger_offset.y - current.y)).y;
if(offset < 0)
new_box.min.y += offset;
else
new_box.max.y += offset;
}
trigger->setBox((FBox)new_box);
m_cursor_pos = trigger->pos();
if(is_final > 0) {
m_entity_map.add(PEntity(m_proto->clone()));
}
if(is_final) {
m_trigger_mode = 0;
trigger->setBox(FBox(0, 0, 0, 1, 1, 1) + trigger->pos());
}
}
else if(is_final > 0)
m_entity_map.add(PEntity(m_proto->clone()));
}
return true;
}
else if(key == 1 && m_mode == Mode::selecting) {
if(!m_is_moving) {
m_is_moving_vertically = state.isKeyPressed(InputKey::lshift);
m_is_moving = true;
}
if(m_is_moving_vertically)
m_move_offset = int3(0, screenToWorld(int2(0, start.y - current.y)).y, 0);
else
m_move_offset = asXZY(screenToWorld(current - start), 0);
if(is_final)
m_is_moving = false;
if(is_final > 0) {
for(int n = 0; n < (int)m_selected_ids.size(); n++) {
auto &object = m_entity_map[m_selected_ids[n]];
object.ptr->setPos(object.ptr->pos() + float3(m_move_offset));
m_entity_map.update(m_selected_ids[n]);
}
}
return true;
}
return false;
}