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); + } +}