public bool DropToConnector(BlueprintEntityPin oppositionPin)
    {
        var connector = BlueprintConnector.current;

        // if having a same pin type at two head, remove them.
        if (pinType == BlueprintEntityPinType.In)
        {
            if (connector.b != null)
            {
                Destroy(connector.gameObject);
                BlueprintConnector.current = null;
                return(false);
            }
            connector.SetEntityB(entity, this);
        }
        else
        {
            if (connector.a != null)
            {
                Destroy(connector.gameObject);
                BlueprintConnector.current = null;
                return(false);
            }
            connector.SetEntityA(entity, this);
        }
        // create block connector
        var blockConnector = connector.CreateBlockConnector();

        if (dropToConnectorCallback != null)
        {
            dropToConnectorCallback.Invoke(blockConnector);
        }
        if (oppositionPin.dropToConnectorCallback != null)
        {
            oppositionPin.dropToConnectorCallback.Invoke(blockConnector);
        }
        Debug.Log(blockConnector.a);
        Debug.Log(blockConnector.b);
        oppositionPin.blueprintConnector
              = blueprintConnector
              = connector;
        BlueprintConnector.current = null;
        return(true);
    }
 void Start()
 {
     _parentTransform = transform.parent.parent;
     _connectorPrefab = Resources.Load <BlueprintConnector>(connectorResPath);
     _pinImage        = GetComponent <Image>();
 }