소스 검색

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 달 전
부모
커밋
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;