void FinishRewind()
 {
     var trackkerOld = trackker;
     if (!trackker.isFirst) trackker = trackker.BEFORE;
     if (trackker.AFTER != null) trackker.AFTER.killChain();
     helperInstantiateTrackker();
 }
 public void init(float time=0, float veloX=0, float veloY= 0, MovementTrackker b = null)
 {
     this.time = time;
     before = b;
     velocity = new Vector2(veloX, veloY);
     isFirst = (b == null);
 }
 void helperInstantiateTrackker()
 {
     var o = Instantiate(PREFAB_TRACKKER, transform.position, Quaternion.identity) as GameObject;
     var t = o.GetComponent<MovementTrackker>();
     if (trackker != null) trackker.AFTER = t;
     t.init(timeElapsed,rigidbody2D.velocity.x,rigidbody2D.velocity.y, trackker);
     trackker = t;
 }
    void UpdateRewind()
    {
        timeElapsed -= Time.deltaTime * 5.0f;
        timeElapsed = Mathf.Max(0, timeElapsed);
        for (int trackkerValid = trackker.isTimeValid(timeElapsed);
            !trackker.isFirst && trackkerValid != 0;
            trackkerValid = trackker.isTimeValid(timeElapsed))
        {
            Debug.Log(trackker.isTimeValid(timeElapsed));
            if (trackkerValid == 1) throw new System.NotImplementedException("REWIND ERROR");
            else if (trackkerValid == -1) trackker = trackker.BEFORE;
        }
        var pos = trackker.getPosAt(timeElapsed);
        var speed = trackker.getSpeedAt(timeElapsed);

        //transform.position = new Vector3(pos.x, pos.y, transform.position.z);
        if(isValid(pos))transform.position = pos;
        if (isValid(speed)) rigidbody2D.velocity = speed;
        else rigidbody2D.velocity = Vector2.zero;
        //Debug.Log(trackker.getPosAt(timeElapsed));
    }