Ejemplo n.º 1
0
        /// <summary>
        /// Create a new block view in toolbox
        /// </summary>
        protected BlockView NewBlockView(Block block, Transform parent, int index = -1)
        {
            mWorkspace.RemoveTopBlock(block);

            BlockView view = BlockViewFactory.CreateView(block);

            view.InToolbox = true;
            view.ViewTransform.SetParent(parent, false);

            if (index >= 0)
            {
                view.ViewTransform.SetSiblingIndex(index);
            }

            //add mask
            GameObject maskObj = new GameObject("ToolboxMask");

            maskObj.transform.SetParent(view.ViewTransform, false);
            RectTransform maskTrans = maskObj.AddComponent <RectTransform>();

            maskTrans.sizeDelta = view.Size;
            Image maskImage = maskObj.AddComponent <Image>();

            maskImage.color = new Color(1, 1, 1, 0);
            UIEventListener.Get(maskObj).onBeginDrag = data => PickBlockView(view);
            if (!BlockViewSettings.Get().MaskedInToolbox)
            {
                maskTrans.SetAsFirstSibling();
            }

            view.ActivateCountText(view.InToolbox);
            view.UpdateCount();

            return(view);
        }
Ejemplo n.º 2
0
        protected void PickBlockView(BlockView blockView)
        {
            if (!blockView.enabled)
            {
                return;
            }
            if (mPickedBlockView != null)
            {
                Debug.LogError("Toolbox-PickBlockView: Already picked a block view.");
                return;
            }

            // compute the local position of the block view in coding area
            Vector3 localPos = BlocklyUI.WorkspaceView.CodingArea.InverseTransformPoint(blockView.ViewTransform.position);

            // clone a new block view for coding area
            mPickedBlockView = BlocklyUI.WorkspaceView.CloneBlockView(blockView, new Vector2(localPos.x, localPos.y));
            if (mPickedBlockView.InToolbox)
            {
                return;
            }
            mPickedBlockView.OnBeginDrag(null);
            mPickedBlockView.ActivateCountText(false);

            //if the max number of blocks have been used disable the block
            if (Block.blocksAvailable.ContainsKey(blockView.BlockType) && Block.blocksAvailable[blockView.BlockType] > 0)
            {
                Block.blocksAvailable[blockView.BlockType]--;
                if (Block.blocksAvailable[blockView.BlockType] <= 0)
                {
                    blockView.ChangeBgColor(Color.grey);
                    blockView.enabled = false;
                }
            }
            blockView.UpdateCount();

            OnPickBlockView();

            string  id   = GameManager.Instance.GetBlockId(mPickedBlockView.Block);
            XmlNode dom  = Xml.BlockToDomWithXY(mPickedBlockView.Block, false);
            string  text = UBlockly.Xml.DomToText(dom);

            text = GameManager.Instance.ChangeCodeIDs(text);


            TrackerAsset.Instance.setVar("block_type", mPickedBlockView.Block.Type);
            TrackerAsset.Instance.setVar("code", "\r\n" + text);

            TrackerAsset.Instance.setVar("action", "create");
            TrackerAsset.Instance.setVar("level", GameManager.Instance.GetCurrentLevelName().ToLower());
            TrackerAsset.Instance.GameObject.Interacted(id);
        }
Ejemplo n.º 3
0
        protected void SetBlockCount(BlockView block)
        {
            //Deactivate the block if it's not in the active list
            bool   active    = false;
            string blockType = block.BlockType;

            if (activeCategories != null && mActiveCategory != null && activeCategories.ContainsKey(mActiveCategory.ToLower()))
            {
                CategoryBlocks info = activeCategories[mActiveCategory.ToLower()];
                active = info.activate == (info.activeBlocks.ContainsKey(blockType));
                int value = (Block.blocksAvailable.ContainsKey(blockType) ? Block.blocksAvailable[blockType] : Int16.MaxValue);
                if (value <= 0)
                {
                    block.enabled = false;
                    block.ChangeBgColor(Color.grey);
                }
            }
            block.gameObject.SetActive(allActive || active);
            block.UpdateCount();
        }