Пример #1
0
void TouchManager::init()
{
    config.addListener("showScreenJoystick", this);
    config.addListener("showScreenButtons", this);
    config.addListener("showScreenKeyboard", this);
    config.addListener("screenButtonsSize", this);
    config.addListener("screenJoystickSize", this);
    config.addListener("screenButtonsFormat", this);

    mShowJoystick = config.getBoolValue("showScreenJoystick");
    mShowButtons = config.getBoolValue("showScreenButtons");
    mShowKeyboard = config.getBoolValue("showScreenKeyboard");
    mButtonsSize = config.getIntValue("screenButtonsSize");
    mJoystickSize = config.getIntValue("screenJoystickSize");
    mButtonsFormat = config.getIntValue("screenButtonsFormat");

    setHalfJoyPad(getPadSize() / 2);

    if (mShowKeyboard)
        loadKeyboard();
    if (mShowJoystick)
        loadPad();
    if (mShowButtons)
        loadButtons();
    mWidth = mainGraphics->mWidth;
    mHeight = mainGraphics->mHeight;
}
Пример #2
0
void ExchangeDialog::execute(Character *&c, int &charIndex) {
	Screen &screen = *_vm->_screen;
	EventsManager &events = *_vm->_events;
	Interface &intf = *_vm->_interface;
	Party &party = *_vm->_party;
	loadButtons();

	Window &w = screen._windows[31];
	w.open();
	w.writeString(Res.EXCHANGE_WITH_WHOM);
	_iconSprites.draw(w, 0, Common::Point(225, 120));
	w.update();

	while (!_vm->shouldQuit()) {
		events.pollEventsAndWait();
		checkEvents(_vm);

		if (_buttonValue >= Common::KEYCODE_F1 && _buttonValue <= Common::KEYCODE_F6) {
			_buttonValue -= Common::KEYCODE_F1;
			if (_buttonValue < (int)party._activeParty.size()) {
				SWAP(party._activeParty[charIndex], party._activeParty[_buttonValue]);

				charIndex = _buttonValue;
				c = &party._activeParty[charIndex];
				break;
			}
		} else if (_buttonValue == Common::KEYCODE_ESCAPE) {
			break;
		}
	}

	w.close();
	intf.drawParty(true);
	intf.highlightChar(charIndex);
}
Пример #3
0
GUI_ScrollBar::GUI_ScrollBar(int x, int y, int h, GUI_CallBack *callback)
 : GUI_Widget(NULL, x, y, SCROLLBAR_WIDTH, h)
{
 callback_object = callback;
 drag = false;

 loadButtons();

 track_length = area.h - 2 * button_height;
 slider_length = track_length / 2;
 slider_y = 5;

}
Пример #4
0
WindowMenu::WindowMenu(const Widget2 *const widget) :
    Container(widget),
    ActionListener(),
    SelectionListener(),
    MouseListener(),
    mSkin(theme ? theme->load("windowmenu.xml", "") : nullptr),
    mPadding(mSkin ? mSkin->getPadding() : 1),
    mSpacing(mSkin ? mSkin->getOption("spacing", 3) : 3),
    mButtons(),
    mButtonTexts(),
    mButtonNames(),
    mHaveMouse(false),
    mAutoHide(1),
    mSmallWindow(mainGraphics->getWidth() < 600)
{
    int x = mPadding;
    int h = 0;

    setFocusable(false);
    // TRANSLATORS: short button name for who is online window.
    addButton(N_("ONL"),
        _("Who is online"), x, h, InputAction::WINDOW_ONLINE);
    // TRANSLATORS: short button name for help window.
    addButton(N_("HLP"),
        _("Help"), x, h, InputAction::WINDOW_HELP);
    // TRANSLATORS: short button name for quests window.
    addButton(N_("QE"),
        _("Quests"), x, h, InputAction::WINDOW_QUESTS);
    // TRANSLATORS: short button name for kill stats window.
    addButton(N_("KS"),
        _("Kill stats"), x, h, InputAction::WINDOW_KILLS);
    addButton(":-)",
        _("Smilies"), x, h, InputAction::WINDOW_EMOTE_SHORTCUT);
    // TRANSLATORS: short button name for chat window.
    addButton(N_("CH"),
        _("Chat"), x, h, InputAction::WINDOW_CHAT,
#ifdef ANDROID
        Visible_true);
#else
        Visible_false);
#endif
    // TRANSLATORS: short button name for status window.
    addButton(N_("STA"),
        _("Status"), x, h, InputAction::WINDOW_STATUS);
    // TRANSLATORS: short button name for equipment window.
    addButton(N_("EQU"),
        _("Equipment"), x, h, InputAction::WINDOW_EQUIPMENT);
    // TRANSLATORS: short button name for inventory window.
    addButton(N_("INV"),
        _("Inventory"), x, h, InputAction::WINDOW_INVENTORY);
    // TRANSLATORS: short button name for cart window.
    addButton(N_("CA"),
        _("Cart"), x, h, InputAction::WINDOW_CART);
    // TRANSLATORS: short button name for map window.
    addButton(N_("MAP"),
        _("Map"), x, h, InputAction::WINDOW_MINIMAP,
        Visible_false);

    if (skillDialog->hasSkills())
    {
        // TRANSLATORS: short button name for skills window.
        addButton(N_("SKI"),
            _("Skills"), x, h, InputAction::WINDOW_SKILL);
    }

    // TRANSLATORS: short button name for social window.
    addButton(N_("SOC"),
    // TRANSLATORS: full button name
        _("Social"), x, h, InputAction::WINDOW_SOCIAL);
    // TRANSLATORS: short button name for shortcuts window.
    addButton(N_("SH"),
        // TRANSLATORS: full button name
        _("Shortcuts"), x, h, InputAction::WINDOW_SHORTCUT);
    // TRANSLATORS: short button name for spells window.
    addButton(N_("SP"),
        // TRANSLATORS: full button name
        _("Spells"), x, h, InputAction::WINDOW_SPELLS);
    // TRANSLATORS: short button name for drops window.
    addButton(N_("DR"),
        // TRANSLATORS: full button name
        _("Drop"), x, h, InputAction::WINDOW_DROP,
        Visible_false);
    // TRANSLATORS: short button name for did you know window.
    addButton(N_("YK"),
        // TRANSLATORS: full button name
        _("Did you know"), x, h, InputAction::WINDOW_DIDYOUKNOW,
        Visible_false);
    // TRANSLATORS: short button name for shop window.
    addButton(N_("SHP"),
        // TRANSLATORS: full button name
        _("Shop"), x, h, InputAction::WINDOW_SHOP,
        Visible_false);
    // TRANSLATORS: short button name for outfits window.
    addButton(N_("OU"),
        // TRANSLATORS: full button name
        _("Outfits"), x, h, InputAction::WINDOW_OUTFIT,
        Visible_false);
    // TRANSLATORS: short button name for updates window.
    addButton(N_("UP"),
        // TRANSLATORS: full button name
        _("Updates"), x, h, InputAction::WINDOW_UPDATER,
        Visible_false);
    // TRANSLATORS: short button name for bank window.
    addButton(N_("BA"),
        // TRANSLATORS: full button name
        _("Bank"), x, h, InputAction::WINDOW_BANK,
        Visible_true);
    // TRANSLATORS: short button name for mail window.
    addButton(N_("MA"),
        // TRANSLATORS: full button name
        _("Mail"), x, h, InputAction::WINDOW_MAIL,
        Visible_true),
    // TRANSLATORS: short button name for debug window.
    addButton(N_("DBG"),
        // TRANSLATORS: full button name
        _("Debug"), x, h, InputAction::WINDOW_DEBUG,
#ifdef ANDROID
        Visible_true);
#else
        Visible_false);
#endif
    // TRANSLATORS: short button name for windows list menu.
    addButton(N_("WIN"),
        // TRANSLATORS: full button name
        _("Windows"), x, h, InputAction::SHOW_WINDOWS,
        Visible_false);
    // TRANSLATORS: short button name for setup window.
    addButton(N_("SET"),
        // TRANSLATORS: full button name
        _("Setup"), x, h, InputAction::WINDOW_SETUP);

    x += mPadding - mSpacing;
    if (mainGraphics)
        setDimension(Rect(mainGraphics->mWidth - x, 0, x, h));

    loadButtons();

    addMouseListener(this);
    setVisible(Visible_true);

    config.addListener("autohideButtons", this);
    mAutoHide = config.getIntValue("autohideButtons");
}
Пример #5
0
bool TownMessage::execute(int portrait, const Common::String &name, const Common::String &text,
		int confirm) {
	EventsManager &events = *_vm->_events;
	Interface &intf = *_vm->_interface;
	Screen &screen = *_vm->_screen;
	Town &town = *_vm->_town;
	Window &w = screen._windows[11];

	town._townMaxId = 4;
	town._townActionId = 7;
	town._drawFrameIndex = 0;
	town._townPos = Common::Point(23, 22);

	if (!confirm)
		loadButtons();

	if (town._townSprites[0].empty()) {
		town._townSprites[0].load(Common::String::format("face%02d.fac", portrait));
		town._townSprites[1].load("frame.fac");
	}

	if (!w._enabled)
		w.open();

	int result = -1;
	Common::String msgText = text;
	for (;;) {
		Common::String msg = Common::String::format("\r\v014\x03c\t125%s\t000\v054%s",
			name.c_str(), msgText.c_str());
		const char *msgEnd = w.writeString(msg.c_str());
		int wordCount = 0;

		for (const char *msgP = msg.c_str(); msgP < msgEnd; ++msgP) {
			if (*msgP == ' ')
				++wordCount;
		}

		town._drawCtr2 = wordCount * 2;
		town._townSprites[1].draw(screen, 0, Common::Point(16, 16));
		town._townSprites[0].draw(screen, town._drawFrameIndex, Common::Point(23, 22));
		w.update();

		if (!msgEnd) {
			// Doesn't look like the code here in original can ever be reached
			assert(0);
		}

		if (confirm == 2) {
			intf._face1State = intf._face2State = 2;
			return false;
		}

		do {
			events.clearEvents();
			events.updateGameCounter();
			if (msgEnd)
				clearButtons();

			do {
				events.wait(3);
				checkEvents(_vm);
				if (_vm->shouldQuit())
					return false;

				town.drawTownAnim(false);
				events.updateGameCounter();
			} while (!_buttonValue);

			if (msgEnd)
				break;

			if (!msgEnd) {
				if (confirm || _buttonValue == Common::KEYCODE_ESCAPE || 
						_buttonValue == Common::KEYCODE_n)
					result = 0;
				else if (_buttonValue == Common::KEYCODE_y)
					result = 1;
			}
		} while (result == -1);

		if (msgEnd) {
			msgText = Common::String(msgEnd);
			town._drawCtr2 = wordCount;
			continue;
		}
	} while (result == -1);

	intf._face1State = intf._face2State = 2;
	if (!confirm)
		intf.mainIconsPrint();

	town._townSprites[0].clear();
	town._townSprites[1].clear();
	return result == 1;
}
Пример #6
0
void NGLScene::timerEvent(QTimerEvent *_event)
{
  Data *data = Data::instance();
  ngl::ShaderLib *shader=ngl::ShaderLib::instance();
  if(_event->timerId() == m_timer1){
    QPoint p = mapFromGlobal(QCursor::pos());
    m_mousePos[0] = (p.x() / float(m_width)  * 2) - 1;
    m_mousePos[1] = (p.y() / float(m_height) * 2) - 1;
    m_mousePos[1] *= -1;

    float currentTime = QTime::currentTime().msecsSinceStartOfDay() / 1000.0;

    switch(Data::instance()->mode){
      case Data::DWELLING :
        m_currentButton = checkButtonMouseOver();
        for(Button &button : m_buttons){
          if(m_currentButton && &button == m_currentButton){
            if(button.m_selectedTime == 0){
              button.m_isSelected = true;
              button.m_firstSelected = currentTime;
              button.m_selectedTime = 0.001;
              button.m_color.set(data->selectedColor);
            }
            else{
              button.m_selectedTime = currentTime - button.m_firstSelected;
              if(button.m_selectedTime > data->dwellTime){
                m_action = button.click(currentTime);
              }
            }
          }
          else{
            button.m_color.set(data->baseColor);
            button.m_isSelected = false;
            button.m_firstSelected = 0;
            button.m_selectedTime = 0;
          }
        }
      break;
      case Data::SCANNING :
        if(m_buttons.size() == 1){
          m_currentButton = &(m_buttons[0]);
        }
        if(m_currentButton){
          m_currentButton->m_selectedTime = currentTime - m_currentButton->m_firstSelected;

          if(m_currentButton->m_selectedTime > data->dwellTime){
            m_currentButton->m_isSelected = false;
            m_currentButton->m_selectedTime = 0;

            m_currentButton->m_color.set(data->baseColor);

            if(m_currentButton == &m_buttons[m_buttons.size()-1]){
              m_currentButton = &m_buttons[0];
            }
            else{
              m_currentButton++;
            }

            m_currentButton->m_isSelected = true;
            m_currentButton->m_firstSelected = currentTime;
            m_currentButton->m_color.set(data->selectedColor);
          }
        }

      break;

      case Data::TOUCHLARGE :
      case Data::TOUCHSMALL_L :
      case Data::TOUCHSMALL_R :
      break;

      default :
        std::cerr << "mode not set" << std::endl;
      break;
    }

    int start = 0;
    int dir = 0;
    int rotIndex = 0;
    int hueChange = 0;
    switch(m_action){
      case Button::Action::NONE :
      break;
      case Button::Action::SPIN_CCW :
        if(m_geo[0]->m_localRotation[1] < (m_geo[0]->m_maxAngle)){
          rotIndex = 1;
          start = 0;
          dir += 1;
        }
      break;
      case Button::Action::SPIN_CW :
        if(m_geo[0]->m_localRotation[1] > -(m_geo[0]->m_maxAngle)){
          rotIndex = 1;
          start = 0;
          dir -= 1;
        }
      break;
      case Button::Action::ROTATE_1_R :
          rotIndex = 0;
          if(m_geo[1]->m_localRotation[0] > -(m_geo[1]->m_maxAngle)){
            start = 1;
            dir -= 1;
          }
      break;
      case Button::Action::ROTATE_1_L :
          rotIndex = 0;
          if(m_geo[1]->m_localRotation[0] < m_geo[1]->m_maxAngle){
            start = 1;
            dir += 1;
          }
      break;
      case Button::Action::ROTATE_2_R :
          rotIndex = 0;
          if(m_geo[2]->m_localRotation[0] > -(m_geo[2]->m_maxAngle)){
            start = 2;
            dir -= 1;
          }
      break;
      case Button::Action::ROTATE_2_L :
          rotIndex = 0;
          if(m_geo[2]->m_localRotation[0] < m_geo[2]->m_maxAngle){
            start = 2;
            dir += 1;
          }
      break;
      case Button::Action::ROTATE_3_R :
          rotIndex = 0;
          if(m_geo[3]->m_localRotation[0] > -(m_geo[3]->m_maxAngle)){
            start = 3;
            dir -= 1;
          }
      break;
      case Button::Action::ROTATE_3_L :
          rotIndex = 0;
          if(m_geo[3]->m_localRotation[0] < m_geo[3]->m_maxAngle){
            start = 3;
            dir += 1;
          }
      break;
      case Button::Action::KEY :
        writeKey();
      break;
      case Button::Action::FINISH :
        exit(writeOut());
      break;
      case Button::Action::COLOR_L :
        hueChange = 1;
      break;
      case Button::Action::COLOR_R :
        hueChange = -1;
      break;
      case Button::Action::COLOR_SET :
        m_timer3 = startTimer(data->dwellTime/5 * 1000);
      break;
      default :
        std::cout << "ERROR: button action" << std::endl;
      break;
    }

    if(hueChange){
      data->updateColor(hueChange);
      shader->use("buttonShader");
      shader->setRegisteredUniform("geoColor", data->geoColor);
    }

    m_geo[start]->m_localRotation[rotIndex] += data->rotateAngle * dir;
    for(unsigned int i = start; i<m_geo.size(); i++){
        m_geo[i]->m_rotation[rotIndex] += data->rotateAngle * dir;
    }

    m_action = Button::Action::NONE;

    shader->use("buttonShader");
    shader->setRegisteredUniform("currentTime", currentTime);
    update();
  }
  else if(_event->timerId() == m_timer2){
   m_frame++;
  }
  else if(_event->timerId() == m_timer3){
    m_colorSet = true;
    loadButtons();
    killTimer(m_timer3);
  }
}
Пример #7
0
void NGLScene::initializeGL()
{
  // we need to initialise the NGL lib which will load all of the OpenGL functions, this must
  // be done once we have a valid GL context but before we call any GL commands. If we dont do
  // this everything will crash
  ngl::NGLInit::instance();
  glClearColor(0.8, 0.9, 0.9, 1.0);			   // Grey Background
  // enable depth testing for drawing
  glEnable(GL_DEPTH_TEST);
  // enable multisampling for smoother drawing
  glEnable(GL_MULTISAMPLE);
  std::cout << "generating" << std::endl;

  ngl::ShaderLib *shader=ngl::ShaderLib::instance();
  Data *data = Data::instance();


  shader->createShaderProgram("geoShader");
  // now we are going to create empty shaders for Frag and Vert
  shader->attachShader("geoVertex",ngl::ShaderType::VERTEX);
  shader->attachShader("geoFragment",ngl::ShaderType::FRAGMENT);
  // attach the source
  shader->loadShaderSource("geoVertex","shaders/GeoVertex.glsl");
  shader->loadShaderSource("geoFragment","shaders/GeoFragment.glsl");
  // compile the shaders
  shader->compileShader("geoVertex");
  shader->compileShader("geoFragment");
  // add them to the program
  shader->attachShaderToProgram("geoShader","geoVertex");
  shader->attachShaderToProgram("geoShader","geoFragment");
  // now we have associated that data we can link the shader
  shader->linkProgramObject("geoShader");
  // and make it active ready to load values
  shader->use("geoShader");

  shader->setRegisteredUniform("simpleGhosting", data->simpleGhosting);



  // we are creating a shader called buttonShader
  shader->createShaderProgram("buttonShader");
  // now we are going to create empty shaders for Frag and Vert
  shader->attachShader("buttonVertex",ngl::ShaderType::VERTEX);
  shader->attachShader("buttonFragment",ngl::ShaderType::FRAGMENT);
  shader->attachShader("buttonGeometry", ngl::ShaderType::GEOMETRY);

  // attach the source
  shader->loadShaderSource("buttonVertex","shaders/ButtonVertex.glsl");
  shader->loadShaderSource("buttonFragment","shaders/ButtonFragment.glsl");
  shader->loadShaderSource("buttonGeometry", "shaders/ButtonGeometry.glsl");

  // compile the shaders
  shader->compileShader("buttonVertex");
  shader->compileShader("buttonFragment");
  shader->compileShader("buttonGeometry");

  // add them to the program
  shader->attachShaderToProgram("buttonShader","buttonVertex");
  shader->attachShaderToProgram("buttonShader","buttonFragment");
  shader->attachShaderToProgram("buttonShader","buttonGeometry");

  // now we have associated that data we can link the shader
  shader->linkProgramObject("buttonShader");
  // and make it active ready to load values
  shader->use("buttonShader");

  shader->setRegisteredUniform("clickedColor", data->clickedColor);
  shader->setRegisteredUniform("circleSize", data->circleSize);
  shader->setRegisteredUniform("dwellTime", data->dwellTime);
  shader->setRegisteredUniform("clickMovement", data->clickMovement);
  shader->setRegisteredUniform("borderSize", data->borderSize);
  shader->setRegisteredUniform("loadingBarSize", data->loadingBarSize);
  shader->setRegisteredUniform("borderColor", data->borderColor);
  shader->setRegisteredUniform("loadingBarColor", data->loadingBarColor);
  shader->setRegisteredUniform("mode", data->shaderMode);
  shader->setRegisteredUniform("animLength", data->animLength);
  shader->setRegisteredUniform("originalColor", data->baseColor);
  shader->setRegisteredUniform("hueChangeAmount", data->hueChangeAmount);
  shader->setRegisteredUniform("geoColor", data->geoColor);



  shader->createShaderProgram("progressShader");
  shader->attachShader("progressVertex",ngl::ShaderType::VERTEX);
  shader->attachShader("progressFragment",ngl::ShaderType::FRAGMENT);

  shader->loadShaderSource("progressVertex","shaders/ProgressVertex.glsl");
  shader->loadShaderSource("progressFragment","shaders/ProgressFragment.glsl");

  shader->compileShader("progressVertex");
  shader->compileShader("progressFragment");

  shader->attachShaderToProgram("progressShader","progressVertex");
  shader->attachShaderToProgram("progressShader","progressFragment");

  shader->linkProgramObject("progressShader");
  shader->use("progressShader");
  shader->setRegisteredUniform("frame", m_frame);
  shader->setRegisteredUniform("animLength", data->animLength);
  shader->setRegisteredUniform("backgroundColor", data->backgroundColor);
  shader->setRegisteredUniform("progressBarSize", data->progressBarSize);
  shader->setRegisteredUniform("progressBarColor", data->progressBarColor);
  shader->setRegisteredUniform("progressBarSelection", data->progressBarSelection);
  shader->setRegisteredUniform("progressBarBack", data->progressBarBack);
  shader->setRegisteredUniform("borderSize", data->borderSize);
  shader->setRegisteredUniform("borderColor", data->borderColor);


  m_view = ngl::lookAt(ngl::Vec3(5,1,0), ngl::Vec3(0,1,0), ngl::Vec3(0,1,0));

  m_geo.push_back(new Geo("geo/base.obj", 0.05, 360000));
  m_geo.push_back(new Geo("geo/lower.obj", 0.8, 90));
  m_geo.push_back(new Geo("geo/upper.obj", 0.8, 90));
  m_geo.push_back(new Geo("geo/hand.obj", 0.2, 90));

  for(auto &geo : m_geo){
    geo->m_mesh.createVAO();
  }

  createQuad();

  glGenVertexArrays(2, m_vaoIDs);

  glGenBuffers(3, m_vboIDs);

  //loadTextures();

  loadButtons();

  m_timer1 = startTimer(16);
}