diff --git a/Assets/Plugins/GoKit/GoTweenConfig.cs b/Assets/Plugins/GoKit/GoTweenConfig.cs
index fae96f6..0dcf06f 100644
--- a/Assets/Plugins/GoKit/GoTweenConfig.cs
+++ b/Assets/Plugins/GoKit/GoTweenConfig.cs
@@ -310,6 +310,272 @@ public GoTweenConfig floatProp( string propertyName, float endValue, bool isRela
return this;
}
+ #endregion
+
+ #region attenuated shake generic properties
+
+ ///
+ /// shake generic vector2 tween
+ ///
+ public GoTweenConfig shakeVector2Prop( string propertyName, Vector2 endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector2TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector3 tween
+ ///
+ public GoTweenConfig shakeVector3Prop( string propertyName, Vector3 endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector4 tween
+ ///
+ public GoTweenConfig shakeVector4Prop( string propertyName, Vector4 endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector4TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector3 path tween
+ ///
+ public GoTweenConfig shakeVector3PathProp( string propertyName, GoSpline path, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3PathTweenProperty( propertyName, path, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector3.x tween
+ ///
+ public GoTweenConfig shakeVector3XProp( string propertyName, float endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3XTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector3.y tween
+ ///
+ public GoTweenConfig shakeVector3YProp( string propertyName, float endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3YTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic vector3.z tween
+ ///
+ public GoTweenConfig shakeVector3ZProp( string propertyName, float endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3ZTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic color tween
+ ///
+ public GoTweenConfig shakeColorProp( string propertyName, Color endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new ColorTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic integer tween
+ ///
+ public GoTweenConfig shakeIntProp( string propertyName, int endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new IntTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// shake generic float tween
+ ///
+ public GoTweenConfig shakeFloatProp( string propertyName, float endValue, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new FloatTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedShakeTweenProperty( genericProp, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+ #endregion
+
+ #region attenuated oscillate generic properties
+
+ ///
+ /// oscillate generic vector2 tween
+ ///
+ public GoTweenConfig oscillateVector2Prop( string propertyName, Vector2 endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector2TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector3 tween
+ ///
+ public GoTweenConfig oscillateVector3Prop( string propertyName, Vector3 endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector4 tween
+ ///
+ public GoTweenConfig oscillateVector4Prop( string propertyName, Vector4 endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector4TweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector3 path tween
+ ///
+ public GoTweenConfig oscillateVector3PathProp( string propertyName, GoSpline path, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3PathTweenProperty( propertyName, path, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector3.x tween
+ ///
+ public GoTweenConfig oscillateVector3XProp( string propertyName, float endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3XTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector3.y tween
+ ///
+ public GoTweenConfig oscillateVector3YProp( string propertyName, float endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3YTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic vector3.z tween
+ ///
+ public GoTweenConfig oscillateVector3ZProp( string propertyName, float endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new Vector3ZTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic color tween
+ ///
+ public GoTweenConfig oscillateColorProp( string propertyName, Color endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new ColorTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic integer tween
+ ///
+ public GoTweenConfig oscillateIntProp( string propertyName, int endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new IntTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
+
+ ///
+ /// oscillate generic float tween
+ ///
+ public GoTweenConfig oscillateFloatProp( string propertyName, float endValue, float period, bool isRelative = true, int frameMod = 1 )
+ {
+ var genericProp = new FloatTweenProperty( propertyName, endValue, isRelative );
+ var prop = new AttenuatedOscillateTweenProperty( genericProp, period, frameMod );
+ _tweenProperties.Add( prop );
+
+ return this;
+ }
+
#endregion
#endregion
diff --git a/Assets/Plugins/GoKit/properties/abstracts/AbstractDoubleTweenProperty.cs b/Assets/Plugins/GoKit/properties/abstracts/AbstractDoubleTweenProperty.cs
new file mode 100644
index 0000000..675ac66
--- /dev/null
+++ b/Assets/Plugins/GoKit/properties/abstracts/AbstractDoubleTweenProperty.cs
@@ -0,0 +1,54 @@
+using UnityEngine;
+using System.Collections;
+
+
+public abstract class AbstractDoubleTweenProperty : AbstractTweenProperty
+{
+ protected AbstractTweenProperty _tweenProperty;
+
+ ///
+ /// reference another tween property
+ ///
+ public AbstractDoubleTweenProperty( AbstractTweenProperty tweenPorperty ) : base( true )
+ {
+ _tweenProperty = tweenPorperty;
+ }
+
+
+ #region Object overrides
+
+ public override int GetHashCode()
+ {
+ return base.GetHashCode();
+ }
+
+
+ public override bool Equals( object obj )
+ {
+ if (base.Equals(obj)) {
+ return _tweenProperty.Equals(((AbstractDoubleTweenProperty)obj)._tweenProperty);
+ }
+ return false;
+ }
+
+ #endregion
+
+ public override void init( GoTween owner )
+ {
+ base.init(owner);
+ //Init owner of _tweenProperty and force ease type to linear
+ _tweenProperty.setEaseType(GoEaseType.Linear);
+ _tweenProperty.init(owner);
+ }
+
+ public override bool validateTarget( object target )
+ {
+ return _tweenProperty.validateTarget(target);
+ }
+
+
+ public override void prepareForUse()
+ {
+ _tweenProperty.prepareForUse();
+ }
+}
diff --git a/Assets/Plugins/GoKit/properties/attenuated/AttenuatedOscillateTweenProperty.cs b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedOscillateTweenProperty.cs
new file mode 100644
index 0000000..763c4a7
--- /dev/null
+++ b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedOscillateTweenProperty.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+
+
+public class AttenuatedOscillateTweenProperty : AttenuatedTweenProperty
+{
+
+ ///
+ /// you can oscilate any AbstractTweenProperty.
+ /// frameMod allows you to specify what frame count the shakes should occur on. for example, a frameMod of 3 would mean that only when
+ /// frameCount % 3 == 0 will the shake occur
+ ///
+ public AttenuatedOscillateTweenProperty( AbstractTweenProperty tweenPorperty, float period, int frameMod = 1 ) : base( tweenPorperty, (t,b,c,d) => b+c*Mathf.Sin(t*2*Mathf.PI/period) ,frameMod )
+ {
+ }
+}
+
diff --git a/Assets/Plugins/GoKit/properties/attenuated/AttenuatedShakeTweenProperty.cs b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedShakeTweenProperty.cs
new file mode 100644
index 0000000..2a3e006
--- /dev/null
+++ b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedShakeTweenProperty.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+using System.Collections;
+
+
+
+public class AttenuatedShakeTweenProperty : AttenuatedTweenProperty
+{
+
+ ///
+ /// you can shake any AbstractTweenProperty.
+ /// frameMod allows you to specify what frame count the shakes should occur on. for example, a frameMod of 3 would mean that only when
+ /// frameCount % 3 == 0 will the shake occur
+ ///
+ public AttenuatedShakeTweenProperty( AbstractTweenProperty tweenPorperty, int frameMod = 1 ) : base( tweenPorperty, (t,b,c,d) => b+Random.Range(-c,c) ,frameMod )
+ {
+ }
+}
+
diff --git a/Assets/Plugins/GoKit/properties/attenuated/AttenuatedTweenProperty.cs b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedTweenProperty.cs
new file mode 100644
index 0000000..8117026
--- /dev/null
+++ b/Assets/Plugins/GoKit/properties/attenuated/AttenuatedTweenProperty.cs
@@ -0,0 +1,59 @@
+using UnityEngine;
+using System;
+using System.Collections;
+using System.Reflection;
+
+
+public class AttenuatedTweenProperty : AbstractDoubleTweenProperty
+{
+ protected int _frameCount;
+ protected int _frameMod;
+ protected Func _attenuatedEaseFunction;
+
+
+ ///
+ /// you can atenuate any AbstractTweenProperty.
+ /// an attenuated tween property always ends at the same position it started.
+ /// an be for shaking or oscilating a property for example
+ /// frameMod allows you to specify what frame count the shakes should occur on. for example, a frameMod of 3 would mean that only when
+ /// frameCount % 3 == 0 will the shake occur
+ ///
+ public AttenuatedTweenProperty( AbstractTweenProperty tweenPorperty, Func attenuatedEaseFunction, int frameMod = 1 ) : base( tweenPorperty )
+ {
+ _frameMod = frameMod;
+ _attenuatedEaseFunction = attenuatedEaseFunction;
+ }
+
+
+ #region Object overrides
+
+ public override int GetHashCode()
+ {
+ return base.GetHashCode();
+ }
+
+ #endregion
+
+ public override void prepareForUse()
+ {
+ base.prepareForUse();
+ _frameCount = 0;
+ }
+
+
+ public override void tick( float totalElapsedTime )
+ {
+ // should we skip any frames?
+ if( _frameMod > 1 && ++_frameCount % _frameMod != 0 )
+ return;
+
+ // _ownerTween is supposed to have a GoEaseLinear easeType
+ // in this case _easeFunction is just used to attenuated the _attenuatedEaseFunction
+ // _attenuatedEaseFunction contains the main effect (oscillation, shake, etc...)
+
+ var attenuatedElapsedTime=_ownerTween.duration-_easeFunction(totalElapsedTime, 0, _ownerTween.duration, _ownerTween.duration);
+ var easedTime=_attenuatedEaseFunction(totalElapsedTime,0f,attenuatedElapsedTime,_ownerTween.duration);
+
+ _tweenProperty.tick(easedTime);
+ }
+}