void testGetPoint() { FTTesselation tesselation(1); CPPUNIT_ASSERT(tesselation.PointCount() == 0); tesselation.AddPoint(10, 3, 0.7); tesselation.AddPoint(-53, 2000, 23); tesselation.AddPoint(77, -2.4, 765); tesselation.AddPoint(117.5, 0.02, -99); CPPUNIT_ASSERT(tesselation.PointCount() == 4); CPPUNIT_ASSERT(tesselation.Point(2) == FTPoint(77, -2.4, 765)); CPPUNIT_ASSERT(tesselation.Point(20) != FTPoint(77, -2.4, 765)); }
void testAddPoint() { FTTesselation tesselation(1); CPPUNIT_ASSERT(tesselation.PointCount() == 0); tesselation.AddPoint(10, 3, 0.7); tesselation.AddPoint(-53, 2000, 23); tesselation.AddPoint(77, -2.4, 765); tesselation.AddPoint(117.5, 0.02, -99); CPPUNIT_ASSERT(tesselation.PointCount() == 4); tesselation.AddPoint(10, 3, -0.87); tesselation.AddPoint(117.5, 0.02, 34.76); tesselation.AddPoint(0.27, 44.4, 3000); tesselation.AddPoint(10, 3, 0); CPPUNIT_ASSERT(tesselation.PointCount() == 8); }
size_t FadeNodeAnimator::animate( bool _update, size_t _quad_count, MyGUI::VectorQuadData& _data, float _time, MyGUI::IVertexBuffer* _buffer, MyGUI::ITexture* _texture, const MyGUI::RenderTargetInfo& _info, const MyGUI::IntCoord& _coord, bool& _isAnimate ) { addTime(_time); if (mDestroy && mAlpha == 0) { return _quad_count; } _isAnimate = true; _quad_count = tesselation( _quad_count, _data, _texture, _info, _coord); size_t index = 0; switch (mFadeType) { case 0: // random squares for (; index < _quad_count; ++index) { float alpha = pow(mAlpha, mSpeed[index]); unsigned int colour = 0xFFFFFF | ((unsigned int)(alpha * 255.0f) << 24); _data[index].vertex[MyGUI::QuadData::CornerLT].colour = colour; _data[index].vertex[MyGUI::QuadData::CornerRT].colour = colour; _data[index].vertex[MyGUI::QuadData::CornerLB].colour = colour; _data[index].vertex[MyGUI::QuadData::CornerRB].colour = colour; } break; case 1: // random not-squares case 2: // from center case 3: // TV for (int y = 0; y < getCountY() + 1; ++y) { for (int x = 0; x < getCountX() + 1; ++x) { index = x + y * getCountX(); float speed = 1.0f; if (mFadeType == 1) // random not-squares { speed = (float)mSpeed[index % (getCountX() * getCountY())]; } if (mFadeType == 2) // from center { float x1 = float(x - getCountX() / 2) / getCountX() * 2; float y1 = float(y - getCountY() / 2) / getCountY() * 2; speed = sqrt(x1 * x1 + y1 * y1); } if (mFadeType == 3) // TV { float x1 = float(x - getCountX() / 2) / getCountX() * 2; float y1 = float(y - getCountY() / 2) / getCountY() * 2; speed = sqrt(x1 * x1 * x1 * x1 + y1 * y1); } float alpha = pow(mAlpha, speed); unsigned int colour = 0xFFFFFF | ((unsigned int)(alpha * 255.0f) << 24); if ( x < getCountX() && y < getCountY() ) _data[index].vertex[MyGUI::QuadData::CornerLT].colour = colour; if ( x > 0 && y < getCountY() ) _data[index - 1].vertex[MyGUI::QuadData::CornerRT].colour = colour; if ( x < getCountX() && y > 0 ) _data[index - getCountX()].vertex[MyGUI::QuadData::CornerLB].colour = colour; if ( x > 0 && y > 0 ) _data[index - getCountX() - 1].vertex[MyGUI::QuadData::CornerRB].colour = colour; } } break; } return _quad_count; }
size_t WobbleNodeAnimator::animate( bool _update, size_t _quad_count, MyGUI::VectorQuadData& _data, float _time, MyGUI::IVertexBuffer* _buffer, MyGUI::ITexture* _texture, const MyGUI::RenderTargetInfo& _info, const MyGUI::IntCoord& _coord, bool& _isAnimate ) { if (mDestroy) { return _quad_count; } // проверяем смещения виджета if (mOldCoord.empty()) { mOldCoord = _coord; } else if (mOldCoord.size() != _coord.size() && mOldCoord.point() != _coord.point()) { mInertiaPoint.set(0.5, 0.5); mInertiaMode = false; addInertia(MyGUI::FloatPoint(_coord.left-mOldCoord.left, _coord.top-mOldCoord.top)); } else if (mOldCoord.size() != _coord.size()) { mInertiaMode = true; addInertia(MyGUI::FloatPoint(_coord.width - mOldCoord.width, _coord.height-mOldCoord.height)); } else if (mOldCoord.point() != _coord.point()) { const MyGUI::IntPoint& point = MyGUI::InputManager::getInstance().getMousePosition(); mInertiaPoint = MyGUI::FloatPoint((float)(point.left - _coord.left) / (float)_coord.width , (float)(point.top - _coord.top) / (float)_coord.height); mInertiaMode = false; addInertia(MyGUI::FloatPoint(_coord.left-mOldCoord.left, _coord.top-mOldCoord.top)); } mOldCoord = _coord; addTime(_time); bool anim_update = squaredLength(mDragOffset) >= 0.3f; if (!anim_update) { return _quad_count; } _isAnimate = true; _quad_count = tesselation( _quad_count, _data, _texture, _info, _coord); buildQuadVertex(_data); return _quad_count; }