/// <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); }
private BlockView BuildBlockView(Block block) { BlockView view = BlockViewFactory.CreateView(block); view.InToolbox = false; view.ActivateCountText(false); view.ViewTransform.SetParent(m_CodingArea, false); view.XY = block.XY; foreach (Block childBlock in block.ChildBlocks) { BuildBlockView(childBlock); Connection connection = null; if (childBlock.PreviousConnection != null) { connection = childBlock.PreviousConnection.TargetConnection; } else if (childBlock.OutputConnection != null) { connection = childBlock.OutputConnection.TargetConnection; } if (connection != null) { connection.FireUpdate(Connection.UpdateState.Connected); } } return(view); }
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); }