public FreeDragState (SharedStateData stateData) : base(stateData)
        {
			
			this.stateData = stateData;
			heightMaker = UnityEngine.Object.Instantiate<BuilderHeightMarker>(ScriptableSingleton<AssetManager>.Instance.builderHeightMarkerGO);
			heightMaker.attachedTo = stateData.Selected.transform;
			heightMaker.heightChangeDelta = .1f;


            TrackNode trackNode = stateData.Selected.gameObject.GetComponent<TrackNode> ();
            var previousSegment = trackNode.trackSegmentModify.GetPreviousSegment (true);
            Transform p3hook = null;

            if (trackNode.nodePoint == TrackNode.NodeType.P1) {
                p3hook = previousSegment.GetLastCurve.P3.transform;

            } else if (trackNode.nodePoint == TrackNode.NodeType.P2) {   
                p3hook = trackNode.trackCurve.P3.transform;
            }

            if (p3hook != stateData.Selected.transform && p3hook != null) {
                p3HeightMarker = UnityEngine.Object.Instantiate<BuilderHeightMarker> (ScriptableSingleton<AssetManager>.Instance.builderHeightMarkerGO);
                p3HeightMarker.attachedTo = p3hook;
                p3HeightMarker.heightChangeDelta = .01f;
            }
            


        }
        public FreeDragWithSmoothing (SharedStateData stateData) : base(stateData)
        {
            this.stateData = stateData;

            heightMarker = UnityEngine.Object.Instantiate<BuilderHeightMarker>(ScriptableSingleton<AssetManager>.Instance.builderHeightMarkerGO);
            heightMarker.attachedTo = stateData.Selected.transform;
            heightMarker.heightChangeDelta = .01f;

        }