Przeglądaj źródła

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 8 miesięcy temu
rodzic
commit
0dda877282
1 zmienionych plików z 27 dodań i 3 usunięć
  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;