// Receiver callback
 public void Released()
 {
     // Receiver has released our lock
     Receiver = null;
 }
        // Sender target lock
        public bool LockTarget( BeltReceiverComponent targ )
        {
            // Unlock old target
            if( ( Receiver != null )&&( targ != Receiver ) )
                Receiver.Unlock( this );

            // Lock new target
            if( targ.Lock( this ) ){
                Receiver = targ;
                return true;
            }
            return false;
        }
        public override void PostExposeData()
        {
            base.PostExposeData();

            Scribe_Values.LookValue( ref CurrentState, "CurrentState", TeleportState.Default, true );

            if( CurrentState == TeleportState.Default ){
                Receiver = null;
            } else {

                IntVec3 pos = IntVec3.Invalid;

                if( Receiver != null )
                    pos = Receiver.parent.Position;

                Scribe_Values.LookValue( ref pos, "receiver", IntVec3.Invalid, true );

                if( pos == IntVec3.Invalid ){
                    Receiver = null;
                } else {
                    Receiver = Manager.GetReceiverAtPos( pos );
                }
            }
        }