void OnMouseDown()
    {
        GameObject g = (GameObject)Instantiate(mRecordingPropPrefab, Vector3.zero, Quaternion.identity);

        g.transform.parent = mScreen.transform;

        Vector2 mousePosition = uImage.GetManager().ScreenToGui(new Vector2(Input.mousePosition.x, Input.mousePosition.y));

        dfTextureSprite sprite = (dfTextureSprite)g.GetComponent(typeof(dfTextureSprite));
        // TODO: these numbers are hardcoded - copied from the unity gui - figure out how to get this programatically
        Vector2 top_left = new Vector2(mousePosition.x - 183, (0 - mousePosition.y) + 123);

        sprite.Position = new Vector2(top_left.x - (sprite.Size.x / 2), top_left.y + (sprite.Size.y / 2));
        sprite.Texture  = (Texture2D)Resources.Load("Props/" + uPurchasedProp.uProp.uID);
        sprite.Size     = new Vector2(sprite.Texture.width, sprite.Texture.height);

        RecordingProp r = (RecordingProp)g.GetComponent(typeof(RecordingProp));

        r.uPurchasedProp = uPurchasedProp;

        MovingArea p = g.GetComponentInChildren <MovingArea>();

        p.OnMouseDown();

        mProps.Remove(uPurchasedProp);
    }
 void Awake()
 {
     mScreenPanel = (dfPanel)GameObject.FindGameObjectWithTag("Screen").GetComponent(typeof(dfPanel));
     mSprite = GetComponent<dfTextureSprite>();
     if (mSprite == null) {
         mSprite = GetComponent<dfSlicedSprite>();
     }
     mProps = (dfScrollPanel)FindObjectOfType(typeof(dfScrollPanel));
     mRecordingProp = (RecordingProp)GetComponent (typeof(RecordingProp));
 }
    bool hasDroppedFirst = false;     // This tracks if this is our first drag - if so we can do something special on first drop

    void Awake()
    {
        mScreenPanel = (dfPanel)GameObject.FindGameObjectWithTag("Screen").GetComponent(typeof(dfPanel));
        mSprite      = GetComponent <dfTextureSprite>();
        if (mSprite == null)
        {
            mSprite = GetComponent <dfSlicedSprite>();
        }
        mProps         = (dfScrollPanel)FindObjectOfType(typeof(dfScrollPanel));
        mRecordingProp = (RecordingProp)GetComponent(typeof(RecordingProp));
    }
    [RPC] void StartPreparing()
    {
        if (Network.isServer)
        {
            // Set everyone to "not ready" so we can wait again after the recording stage
            foreach (Player player in mNetworkManager.players)
            {
                player.networkView.RPC("SetReady", RPCMode.All, false);
            }
        }

        mDialogueManager.EndDialogue();


        // First, instatiate all of the backdrops
        foreach (PurchasedBackdrop purchasedBackdrop in uPurchasedBackdrops)
        {
            GameObject g = (GameObject)Instantiate(mBackdropPrefab, Vector3.zero, Quaternion.identity);
            g.transform.parent = mScreen.transform;

            dfTextureSprite sprite = (dfTextureSprite)g.GetComponent(typeof(dfTextureSprite));
            sprite.Position = new Vector2(0, 550);
            sprite.Texture  = (Texture2D)Resources.Load("Props/" + purchasedBackdrop.uProp.uID);

            RecordingProp r = (RecordingProp)g.GetComponent(typeof(RecordingProp));
            r.uPurchasedProp = purchasedBackdrop;

            mBackdropMap.Add(purchasedBackdrop, g.GetComponent <AfternoonBackdrop>());
        }


        uRecording = false;
        Action finishedPreparing =
            () => {
            StartRecording();
        };

        mCountdown.StartCountdown(Game.PREPARING_COUNTDOWN, finishedPreparing);
    }
    void RecordProps()
    {
        // First loop through all of the recordable objects in screen to check if any have been added/removed
        RecordingProp[] currentRecordingProps = FindObjectsOfType <RecordingProp>().Where(rp => rp.GetType() != typeof(RecordingDialogue)).ToArray();

        // Get the IDs from all current props
        string[] currentIDs = (from prop in currentRecordingProps select prop.uPurchasedProp.uID).ToArray();

        // Check if any have been added
        foreach (string ID in currentIDs)
        {
            if (!mKnownPropIDs.Contains(ID))
            {
                // This is a new prop

                // Get the full prop information
                RecordingProp   p      = currentRecordingProps.Where(prop => prop.uPurchasedProp.uID == ID).First();
                dfTextureSprite sprite = (dfTextureSprite)p.gameObject.GetComponent(typeof(dfTextureSprite));

                float x_pos = sprite.Position.x;                // - (sprite.Width / 2);
                float y_pos = sprite.Position.y;                // + (sprite.Height / 2);
                mRecordingPlayer.networkView.RPC("RecordAction", RPCMode.All, new object[] { "InstantiationChange", RPCEncoder.Encode(new string[] { mTime.ToString(), p.uPurchasedProp.uProp.uID, p.uPurchasedProp.uID, x_pos.ToString(), y_pos.ToString(), sprite.Size.x.ToString(), sprite.Size.y.ToString(), sprite.ZOrder.ToString() }) });
                mKnownPositions[ID] = sprite.Position;
                mKnownZOrders[ID]   = sprite.ZOrder;
                mKnownSizes[ID]     = sprite.Size;
            }
        }

        // Check if any have been removed
        foreach (string ID in mKnownPropIDs)
        {
            if (!currentIDs.Contains(ID))
            {
                // This prop has been removed
                mRecordingPlayer.networkView.RPC("RecordAction", RPCMode.All, new object[] { "DestroyChange", RPCEncoder.Encode(new string[] { mTime.ToString(), ID }) });
            }
        }

        mKnownPropIDs = currentIDs;

        // Then check if any have moved position
        foreach (RecordingProp p in currentRecordingProps)
        {
            dfTextureSprite sprite = (dfTextureSprite)p.gameObject.GetComponent(typeof(dfTextureSprite));
            if (sprite.Position != mKnownPositions[p.uPurchasedProp.uID])
            {
                // The prop has moved
                mRecordingPlayer.networkView.RPC("RecordAction", RPCMode.All, new object[] { "PositionChange", RPCEncoder.Encode(new string[] { mTime.ToString(), p.uPurchasedProp.uID, sprite.Position.x.ToString(), sprite.Position.y.ToString() }) });
                mKnownPositions[p.uPurchasedProp.uID] = sprite.Position;
            }

            if (sprite.ZOrder != mKnownZOrders[p.uPurchasedProp.uID])
            {
                // The prop has moved ZOrder
                mRecordingPlayer.networkView.RPC("RecordAction", RPCMode.All, new object[] { "ZOrderChange", RPCEncoder.Encode(new string[] { mTime.ToString(), p.uPurchasedProp.uID, sprite.ZOrder.ToString() }) });
                mKnownZOrders[p.uPurchasedProp.uID] = sprite.ZOrder;
            }

            if (sprite.Size != mKnownSizes[p.uPurchasedProp.uID])
            {
                // The prop has changed size
                mRecordingPlayer.networkView.RPC("RecordAction", RPCMode.All, new object[] { "SizeChange", RPCEncoder.Encode(new string[] { mTime.ToString(), p.uPurchasedProp.uID, sprite.Size.x.ToString(), sprite.Size.y.ToString() }) });
                mKnownSizes[p.uPurchasedProp.uID] = sprite.Size;
            }
        }
    }
 void Awake()
 {
     mMovableProp   = transform.parent.GetComponent <MovableProp>();
     mRecordingProp = transform.parent.GetComponent <RecordingProp>();
 }