Просмотр исходного кода

Update guiProgressCtrl.cc

This adds better support for instantly setting a progress bar. It also adds callbacks onDisplayChange, which is called anytime the progress bar animation changes the size of the progress bar, and onProgressComplete, which is called at the end of an animation.
Peter Robinson 11 месяцев назад
Родитель
Сommit
0dda877282
1 измененных файлов с 27 добавлено и 3 удалено
  1. 27 3
      engine/source/gui/guiProgressCtrl.cc

+ 27 - 3
engine/source/gui/guiProgressCtrl.cc

@@ -77,11 +77,21 @@ void GuiProgressCtrl::setCurrentProgress(F32 target)
 
 void GuiProgressCtrl::setCurrentProgress(F32 target, S32 time)
 {
-	mAnimationLength = time;
-
    //validate the value
    target = mClampF(target, 0.f, 1.f);
 
+   if (time == 0)
+   {
+	   mCurrent = target;
+	   setProcessTicks(false);
+	   F32 old = mCurrent;
+	   
+	   if (isMethod("onDisplayChange") && old != mCurrent)
+		   Con::executef(this, 2, "onDisplayChange", Con::getFloatArg(mCurrent));
+   }
+
+	mAnimationLength = time;
+
    if (target != mCurrent)
    {
 		mStart = mCurrent;
@@ -95,7 +105,14 @@ void GuiProgressCtrl::setCurrentProgress(F32 target, S32 time)
 
 void GuiProgressCtrl::resetProgress()
 {
-	setCurrentProgress(0.0f);
+	F32 old = mCurrent;
+	mCurrent = 0.0f;
+	setProcessTicks(false);
+
+	if (isMethod("onDisplayChange") && old != mCurrent)
+		Con::executef(this, 2, "onDisplayChange", Con::getFloatArg(mCurrent));
+
+	setUpdate();
 }
 
 void GuiProgressCtrl::onRender(Point2I offset, const RectI &updateRect)
@@ -141,6 +158,9 @@ void GuiProgressCtrl::processTick()
 	if (!shouldWeContinue)
 	{
 		setProcessTicks(false);
+
+		if (isMethod("onProgressComplete"))
+			Con::executef(this, 1, "onProgressComplete");
 	}
 }
 
@@ -149,8 +169,12 @@ bool GuiProgressCtrl::animateProgressBar()
 	F32 progress = getProgress(32.0f);
 
 	setUpdate();
+	F32 old = mCurrent;
 	mCurrent = processValue(progress, mStart, mEnd);
 
+	if (isMethod("onDisplayChange") && old != mCurrent)
+		Con::executef(this, 2, "onDisplayChange", Con::getFloatArg(mCurrent));
+
 	if (mAnimationProgress >= 1.0f)
 	{
 		mAnimationProgress = 1.0f;