Exemplo n.º 1
0
Point2I GuiColorPickerCtrl::findColor(const ColorF & color, const Point2I& offset, const Point2I& resolution, GBitmap& bmp)
{
   RectI rect;
   Point2I ext = getExtent();
   if (mDisplayMode != pDropperBackground)
   {
      ext.x -= 3;
      ext.y -= 2;
      rect = RectI(Point2I(1, 1), ext);
   }
   else
   {
      rect = RectI(Point2I(0, 0), ext);
   }

   Point2I closestPos(-1, -1);

   /* Debugging
   char filename[256];
   dSprintf( filename, 256, "%s.%s", "colorPickerTest", "png" );

   // Open up the file on disk.
   FileStream fs;
   if ( !fs.open( filename, Torque::FS::File::Write ) )
   Con::errorf( "GuiObjectView::saveAsImage() - Failed to open output file '%s'!", filename );
   else
   {
   // Write it and close.
   bmp.writeBitmap( "png", fs );

   fs.close();
   }
   */

   ColorI tmp;
   U32 buf_x;
   U32 buf_y;
   ColorF curColor;
   F32 val(10000.0f);
   F32 closestVal(10000.0f);
   bool closestSet = false;

   for (S32 x = rect.point.x; x <= rect.extent.x; x++)
   {
      for (S32 y = rect.point.y; y <= rect.extent.y; y++)
      {
         buf_x = offset.x + x + 1;
         buf_y = (resolution.y - (offset.y + y + 1));
         buf_y = resolution.y - buf_y;

         //Get the color at that position
         bmp.getColor(buf_x, buf_y, tmp);
         curColor = (ColorF)tmp;

         //Evaluate how close the color is to our desired color
         val = mFabs(color.red - curColor.red) + mFabs(color.green - curColor.green) + mFabs(color.blue - curColor.blue);

         if (!closestSet)
         {
            closestVal = val;
            closestPos.set(x, y);
            closestSet = true;
         }
         else if (val < closestVal)
         {
            closestVal = val;
            closestPos.set(x, y);
         }
      }
   }

   return closestPos;
}
Exemplo n.º 2
0
void MainState::initFight(unsigned lvl) {
    log().log("Initialize main state.");

    while (_entities.root().firstChild().isValid())
        _entities.destroyEntity(_entities.root().firstChild());

    _fight.reset(new Fight(log(), *this, _rules, _player, lvl));

    _damagePos[0] = Vector3(567, _camera.viewBox().max().y() - 120, .5);
    _damagePos[1] = Vector3(517, _camera.viewBox().max().y() - 120, .5);
    _damagePos[2] = Vector3(470, _camera.viewBox().max().y() -  92, .5);
    _damagePos[3] = Vector3(417, _camera.viewBox().max().y() -  78, .5);
    _damagePos[4] = Vector3(120, _camera.viewBox().max().y() -  70, .5);

    _bg = _entities.createEntity(_entities.root(), "bg");
    _sprites.addComponent(_bg);
    _bg.sprite()->setSprite(&_bgSprite);
    _bg.place(Transform(Translation(Vector3(0, _camera.viewBox().max().y() - 480, -.99))));


    _boss = createSprite(&_bossSprite[0],
                         Vector3(240, _camera.viewBox().max().y() - 240, -.815),
                         Vector2(-1, 1), "Boss");
//	_boss = createSprite(&_bossSprite[1],
//	                     Vector3(240, _camera.viewBox().max().y() - 240, -.815),
//	                     Vector2(-1, 1), "Boss");
//	_boss = createSprite(&_bossSprite[2],
//	                     Vector3(220, _camera.viewBox().max().y() - 240, -.815),
//	                     Vector2(-1, 1), "Boss");

    Vector3 bhpPos(10, _camera.viewBox().max().y() - 22, 0);
    Vector3 bhpOffset(0, -22, 0);
    for(unsigned i = 0; i < 3; ++i) {
        _bossHealthFull[2-i] = createHealthBar(bhpPos + i * bhpOffset, 1);
    }

    Vector3 closestPos(_camera.viewBox().max().x() - 30,
                       _camera.viewBox().max().y() - 240, -.8);
    Vector3 offset(-50, 14, -.01);

//	Vector3 namePos(250, 94, -0.01);
    Vector3 namePos(250, 22, -0.01);
//	Vector3 nameOffset(0, -24, 0);
    Vector3 nameOffset(0, 24, 0);
    Vector3 statusPos = namePos + Vector3(110, -4, 0);
    Vector3 statusOffset(16, 0, 0);
    Vector3 hpPos = namePos + Vector3(160, -8, 0);

    _maxPcHp = 0;
    for(PC& pc: _fight->party) {
        _maxPcHp = std::max(_maxPcHp, pc.hp);
    }
    for(unsigned pc = 0; pc < 4; ++pc) {
        _pc[pc] = createSprite(&_pcSprite[pc], closestPos + pc * offset,
                               Vector2(-1, 1), _fight->party[pc].name.c_str());
        createText(_fight->party[pc].name, namePos + pc * nameOffset);
        _pcMenu->setLabel(3 - pc, _fight->party[pc].name);

        _pcStatus[pc*NB_REAL_STATUS + 0] =
            createSprite(&_statusSprite, statusPos + pc * nameOffset + 0 * statusOffset);
        _pcStatus[pc*NB_REAL_STATUS + 0].sprite()->setIndex(0);
        _pcStatus[pc*NB_REAL_STATUS + 0].sprite()->setColor(Vector4(1, 1, 1, 0));

        _pcStatus[pc*NB_REAL_STATUS + 1] =
            createSprite(&_statusSprite, statusPos + pc * nameOffset + 1 * statusOffset);
        _pcStatus[pc*NB_REAL_STATUS + 1].sprite()->setIndex(1);
        _pcStatus[pc*NB_REAL_STATUS + 1].sprite()->setColor(Vector4(1, 1, 1, 0));

        _pcStatus[pc*NB_REAL_STATUS + 2] =
            createSprite(&_statusSprite, statusPos + pc * nameOffset + 2 * statusOffset);
        _pcStatus[pc*NB_REAL_STATUS + 2].sprite()->setIndex(2);
        _pcStatus[pc*NB_REAL_STATUS + 2].sprite()->setColor(Vector4(1, 1, 1, 0));

        _pcHealthFull[pc] = createHealthBar(hpPos + pc * nameOffset,
                                            float(_fight->party[pc].hp) / _maxPcHp);
    }
    _pcMenu->layout();

    _game->audio()->playMusic(_music1);

    updateMenu();
}