Exemplo n.º 1
0
void
EditorToolboxWidget::select_objectgroup(int id)
{
  m_active_objectgroup = id;
  m_input_type = EditorToolboxWidget::InputType::OBJECT;
  m_starting_tile = 0;
  update_mouse_icon();
}
Exemplo n.º 2
0
void
EditorToolboxWidget::select_tilegroup(int id)
{
  m_active_tilegroup.reset(new Tilegroup(m_editor.get_tileset()->get_tilegroups()[id]));
  m_input_type = EditorToolboxWidget::InputType::TILE;
  m_starting_tile = 0;
  update_mouse_icon();
}
Exemplo n.º 3
0
void
EditorTilegroupMenu::menu_action(MenuItem* item)
{
  if (item->id >= 0)
  {
    auto tileselect = &(Editor::current()->tileselect);
    tileselect->active_tilegroup = Editor::current()->tileset->tilegroups[item->id].tiles;
    tileselect->input_type = EditorInputGui::IP_TILE;
    tileselect->reset_pos();
    tileselect->update_mouse_icon();
  }
  MenuManager::instance().clear_menu_stack();
}
Exemplo n.º 4
0
bool
EditorToolboxWidget::on_mouse_button_down(const SDL_MouseButtonEvent& button)
{
  if (button.button == SDL_BUTTON_LEFT || button.button == SDL_BUTTON_RIGHT)
  {
    switch (m_hovered_item)
    {
      case HoveredItem::TILEGROUP:
        if (m_editor.get_tileset()->get_tilegroups().size() > 1)
        {
          m_editor.disable_keyboard();
          MenuManager::instance().push_menu(MenuStorage::EDITOR_TILEGROUP_MENU);
        }
        else
        {
          m_active_tilegroup.reset(new Tilegroup(m_editor.get_tileset()->get_tilegroups()[0]));
          m_input_type = EditorToolboxWidget::InputType::TILE;
          m_starting_tile = 0;
          update_mouse_icon();
        }
        return true;

      case HoveredItem::OBJECTS:
        if ((m_editor.get_level()->is_worldmap() && m_object_info->get_num_worldmap_groups() > 1) ||
            (!m_editor.get_level()->is_worldmap() && m_object_info->get_num_level_groups() > 1))
        {
          m_editor.disable_keyboard();
          MenuManager::instance().push_menu(MenuStorage::EDITOR_OBJECTGROUP_MENU);
        }
        else
        {
          if (m_editor.get_level()->is_worldmap())
          {
            m_active_objectgroup = m_object_info->get_first_worldmap_group_index();
          }
          else
          {
            m_active_objectgroup = 0;
          }
          m_input_type = EditorToolboxWidget::InputType::OBJECT;
          m_starting_tile = 0;
          update_mouse_icon();
        }
        return true;

      case HoveredItem::TILE:
        switch (m_input_type)
        {
          case InputType::TILE:
            {
              m_dragging = true;
              m_drag_start = Vector(static_cast<float>(m_hovered_tile % 4),
                                    static_cast<float>(m_hovered_tile / 4)); // NOLINT
              int size = static_cast<int>(m_active_tilegroup->tiles.size());
              int tile_pos = m_hovered_tile + m_starting_tile;
              if (tile_pos < size && tile_pos >= 0) {
                m_tiles->set_tile(m_active_tilegroup->tiles[tile_pos]);
              } else {
                m_tiles->set_tile(0);
              }
            }
            break;

          case InputType::OBJECT:
            {
              int size = static_cast<int>(m_object_info->m_groups[m_active_objectgroup].get_icons().size());
              if (m_hovered_tile < size && m_hovered_tile >= 0) {
                m_object = m_object_info->m_groups[m_active_objectgroup].get_icons()[m_hovered_tile + m_starting_tile].get_object_class();
              }
              update_mouse_icon();
            }
            break;

          default:
            break;
        }
        return true;

      case HoveredItem::TOOL:
        switch (m_hovered_tile)
        {
          case 0:
            m_tiles->set_tile(0);
            m_object = "";
            update_mouse_icon();
            break;

          case 1:
            m_select_mode->next_mode();
            update_mouse_icon();
            break;

          case 2:
            m_move_mode->next_mode();
            update_mouse_icon();
            break;

          case 3:
            m_editor.esc_press();
            break;

          default:
            break;
        }
        return true;

      case HoveredItem::NONE:
        return false;

      default:
        return false;
    }
  }
  else
  {
    return false;
  }
}