浏览代码

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