]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge remote branch 'refs/remotes/origin/esteel/anim/slider'
authorRudolf Polzer <divverent@alientrap.org>
Sun, 23 May 2010 14:46:47 +0000 (16:46 +0200)
committerRudolf Polzer <divverent@alientrap.org>
Sun, 23 May 2010 14:46:47 +0000 (16:46 +0200)
qcsrc/menu/anim/animation.c
qcsrc/menu/anim/animhost.c
qcsrc/menu/item/slider.c
qcsrc/menu/item/textslider.c
qcsrc/menu/xonotic/slider.c
qcsrc/menu/xonotic/slider_decibels.c
qcsrc/menu/xonotic/textslider.c

index 1019fdacb3ec706b25c45b5734e7c081bcb85493..d6fb114c2c4a9c113ccaaa5cd7732a093679c03c 100644 (file)
@@ -106,6 +106,7 @@ void finishAnimAnimation(entity me)
 {
        me.value = me.delta + me.startValue;
        me.finished = TRUE;
+       me.setter(me.object, me.value);
 }
 
 void setterDummy(entity obj, float objValue)
index 1052e2a1bcb99e6b91306fcbc2bbe4833fa1a806..41a26d5e0dace443b32be76b912810c04d4e9a38 100644 (file)
@@ -2,8 +2,14 @@
 CLASS(AnimHost) EXTENDS(Object)
        METHOD(AnimHost, addAnim, void(entity, entity))
        METHOD(AnimHost, removeAnim, void(entity, entity))
+       METHOD(AnimHost, removeAllAnim, void(entity))
+       METHOD(AnimHost, removeObjAnim, void(entity, entity))
        METHOD(AnimHost, stopAllAnim, void(entity))
+       METHOD(AnimHost, stopObjAnim, void(entity, entity))
+       METHOD(AnimHost, resumeAllAnim, void(entity))
+       METHOD(AnimHost, resumeObjAnim, void(entity, entity))
        METHOD(AnimHost, finishAllAnim, void(entity))
+       METHOD(AnimHost, finishObjAnim, void(entity, entity))
        METHOD(AnimHost, tickAll, void(entity))
        ATTRIB(AnimHost, firstChild, entity, NULL)
        ATTRIB(AnimHost, lastChild, entity, NULL)
@@ -61,6 +67,31 @@ void removeAnimAnimHost(entity me, entity other)
                me.lastChild = p;
 }
 
+void removeAllAnimAnimHost(entity me)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               tmp = e;
+               e = tmp.prevSibling;
+               me.removeAnim(me, tmp);
+       }
+}
+
+void removeObjAnimAnimHost(entity me, entity obj)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       tmp = e;
+                       e = tmp.prevSibling;
+                       me.removeAnim(me, tmp);
+               }
+       }
+}
+
 void stopAllAnimAnimHost(entity me)
 {
        entity e;
@@ -70,6 +101,39 @@ void stopAllAnimAnimHost(entity me)
        }
 }
 
+void stopObjAnimAnimHost(entity me, entity obj)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       e.stopAnim(e);
+               }
+       }
+}
+
+void resumeAllAnimAnimHost(entity me)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               e.resumeAnim(e);
+       }
+}
+
+void resumeObjAnimAnimHost(entity me, entity obj)
+{
+       entity e;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       e.resumeAnim(e);
+               }
+       }
+}
+
 void finishAllAnimAnimHost(entity me)
 {
        entity e, tmp;
@@ -78,7 +142,22 @@ void finishAllAnimAnimHost(entity me)
                tmp = e;
                e = tmp.prevSibling;
                me.removeAnim(me, tmp);
-               e.finishAnim(tmp);
+               tmp.finishAnim(tmp);
+       }
+}
+
+void finishObjAnimAnimHost(entity me, entity obj)
+{
+       entity e, tmp;
+       for(e = me.firstChild; e; e = e.nextSibling)
+       {
+               if (e.object == obj)
+               {
+                       tmp = e;
+                       e = tmp.prevSibling;
+                       me.removeAnim(me, tmp);
+                       tmp.finishAnim(tmp);
+               }
        }
 }
 
index f71bb32da9703c561d0a8d72caec4bfe9551b606..eeac0edd844ba43d3e1e25ae197cd2188eda9bd6 100644 (file)
@@ -13,10 +13,13 @@ CLASS(Slider) EXTENDS(Label)
        METHOD(Slider, valueToText, string(entity, float))
        METHOD(Slider, toString, string(entity))
        METHOD(Slider, setValue, void(entity, float))
+       METHOD(Slider, setSliderValue, void(entity, float))
        METHOD(Slider, showNotify, void(entity))
        ATTRIB(Slider, src, string, string_null)
        ATTRIB(Slider, focusable, float, 1)
        ATTRIB(Slider, value, float, 0)
+       ATTRIB(Slider, animated, float, 1)
+       ATTRIB(Slider, sliderValue, float, 0)
        ATTRIB(Slider, valueMin, float, 0)
        ATTRIB(Slider, valueMax, float, 0)
        ATTRIB(Slider, valueStep, float, 0)
@@ -43,8 +46,19 @@ ENDCLASS(Slider)
 #ifdef IMPLEMENTATION
 void setValueSlider(entity me, float val)
 {
+       if (me.animated) {
+               anim.stopObjAnim(anim, me);
+               anim.removeObjAnim(anim, me);
+               makeHostedEasing(me, setSliderValueSlider, easingQuadInOut, 1, me.sliderValue, val);
+       } else {
+               me.setSliderValue(me, val);
+       }
        me.value = val;
 }
+void setSliderValueSlider(entity me, float val)
+{
+       me.sliderValue = val;
+}
 string toStringSlider(entity me)
 {
        return strcat(ftos(me.value), " (", me.valueToText(me, me.value), ")");
@@ -70,6 +84,7 @@ void configureSliderVisualsSlider(entity me, float sz, float theAlign, float the
 void configureSliderValuesSlider(entity me, float theValueMin, float theValue, float theValueMax, float theValueStep, float theValueKeyStep, float theValuePageStep)
 {
        me.value = theValue;
+       me.sliderValue = theValue;
        me.valueStep = theValueStep;
        me.valueMin = theValueMin;
        me.valueMax = theValueMax;
@@ -137,9 +152,14 @@ float keyDownSlider(entity me, float key, float ascii, float shift)
 float mouseDragSlider(entity me, vector pos)
 {
        float hit;
-       float v;
+       float v, animed;
        if(me.disabled)
                return 0;
+
+       anim.finishObjAnim(anim, me);
+       animed = me.animated;
+       me.animated = false;
+
        if(me.pressed)
        {
                hit = 1;
@@ -157,6 +177,9 @@ float mouseDragSlider(entity me, vector pos)
                else
                        me.setValue(me, me.previousValue);
        }
+
+       me.animated = animed;
+
        return 1;
 }
 float mousePressSlider(entity me, vector pos)
@@ -236,9 +259,9 @@ void drawSlider(entity me)
        if(me.disabled)
                draw_alpha *= me.disabledAlpha;
        draw_ButtonPicture('0 0 0', strcat(me.src, "_s"), eX * (1 - me.textSpace) + eY, me.color2, 1);
-       if(almost_in_bounds(me.valueMin, me.value, me.valueMax))
+       if(almost_in_bounds(me.valueMin, me.sliderValue, me.valueMax))
        {
-               controlLeft = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth);
+               controlLeft = (me.sliderValue - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth);
                if(me.disabled)
                        draw_Picture(eX * controlLeft, strcat(me.src, "_d"), eX * me.controlWidth + eY, me.colorD, 1);
                else if(me.pressed)
@@ -253,4 +276,4 @@ void drawSlider(entity me)
        drawLabel(me);
        me.text = string_null; // TEMPSTRING!
 }
-#endif
\ No newline at end of file
+#endif
index 628c8a579b86d6a48d2c34a0e60d38b0872f071a..b6a345481171b949904913e5010a6c57ac24bc08 100644 (file)
@@ -37,10 +37,10 @@ void setValueFromIdentifierTextSlider(entity me, string id)
        for(i = 0; i < me.nValues; ++i)
                if(me.valueToIdentifier(me, i) == id)
                {
-                       me.value = i;
+                       setValueSlider( me, i );
                        return;
                }
-       me.value = -1;
+       setValueSlider( me, -1 );
 }
 string getIdentifierTextSlider(entity me)
 {
index 13ea0f2dd0c34390196a88900e12e8e385d392be..134557da7dcd9bd1c12065e89f213d78fea799d1 100644 (file)
@@ -53,7 +53,7 @@ void setValueXonoticSlider(entity me, float val)
 {
        if(val != me.value)
        {
-               me.value = val;
+               setValueSlider( me, val );
                me.saveCvars(me);
        }
 }
@@ -62,7 +62,7 @@ void loadCvarsXonoticSlider(entity me)
        if not(me.cvarName)
                return;
 
-       me.value = cvar(me.cvarName);
+       me.setValue( me, cvar(me.cvarName) );
 }
 void saveCvarsXonoticSlider(entity me)
 {
index 20beec911e6144f7c42cda41986a423e8c82d31a..ba7cffc22f049b99564ca11fb7582225716b90db 100644 (file)
@@ -25,11 +25,11 @@ void loadCvarsXonoticDecibelsSlider(entity me)
 
        v = cvar(me.cvarName);
        if(v >= 0.98)
-               me.value = 0;
+               setValueSlider( me, 0 );
        else if(v < 0.0005)
-               me.value = -1000000;
+               setValueSlider( me, -1000000 );
        else
-               me.value = 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10);
+               setValueSlider( me, 0.1 * floor(0.5 + 10.0 * log10(cvar(me.cvarName)) * 10) );
 }
 void saveCvarsXonoticDecibelsSlider(entity me)
 {
index d4786a7910aa7e43fbe1f915090abc8bee1fad54..2236bc51fe362b88705c10b353e0e57b6e5ef7fe 100644 (file)
@@ -46,7 +46,7 @@ void setValueXonoticTextSlider(entity me, float val)
 {
        if(val != me.value)
        {
-               me.value = val;
+               setValueSlider( me, val );
                me.saveCvars(me);
        }
 }