public void AddBlockOnContextMenuItem(MenuButton sender) { switch (_addBlockStep) { case AddBlockSteps.ChoiceInsertType: { if (!_addInsertTypeMenuButtons.ContainsKey(sender)) { return; } _addInsertInside = _addInsertTypeMenuButtons[sender]; _contextMenu.ClearContextMenu(); SetAddTypeMenuItems(); _addBlockStep = AddBlockSteps.ChoiceBlockType; } break; case AddBlockSteps.ChoiceBlockType: { if (!_addTypeMenuButtons.ContainsKey(sender)) { return; } _addType = _addTypeMenuButtons[sender]; _contextMenu.ClearContextMenu(); SetAddBlocksMenuItems(); _addBlockStep = AddBlockSteps.ChoiceBlock; } break; case AddBlockSteps.ChoiceBlock: { if (!_addBlockMenuButtons.ContainsKey(sender)) { return; } _contextMenu.gameObject.SetActive(false); _addBlockData = _addBlockMenuButtons[sender]; _treePanel.AddBlock(_addTarget, _addBlockData, _addInsertInside); _editPanel.CurrentTool = EditTools.Cursor; _addBlockStep = AddBlockSteps.SetBlockData; } break; } }
private IAlgorithmBlock CreateBlockData(BlockData data) { IAlgorithmBlock result = null; switch (data.type) { case BlockType.Begin: { BeginBlock block = new BeginBlock(); block.Data = data; result = block; } break; case BlockType.Action: { ActionBlock block = new ActionBlock(); block.Data = data; block.Name = data.name; result = block; } break; case BlockType.If: { IfBlock block = new IfBlock(); block.Data = data; result = block; } break; case BlockType.While: { WhileBlock block = new WhileBlock(); block.Data = data; result = block; } break; case BlockType.Set: { SetBlock block = new SetBlock(); block.Data = data; result = block; } break; } return(result); }
private void SetAddBlocksMenuItems() { _addBlockMenuButtons = new Dictionary <MenuButton, IAlgorithmBlock>(); foreach (BlockData itData in _resourceProvider.BlockDatas) { if (itData.type != _addType) { continue; } IAlgorithmBlock blockData = CreateBlockData(itData); MenuButton button = _contextMenu.AddButton(itData.name); _addBlockMenuButtons.Add(button, blockData); } }
private AlgorithmBlockUI CreateBlock(IAlgorithmBlock blockData) { AlgorithmBlockUI result = null; if (blockData.Type == BlockType.Set) { result = Instantiate(_resourceProvider.SetBlockPrefab, _content); } else { result = Instantiate(_resourceProvider.AlgorithmBlockPrefab, _content); } result.BlockData = blockData; return(result); }
public void AddBlock(AlgorithmBlockUI beforeBlock, IAlgorithmBlock newBlockData, bool isInside) { int index = _blocks.IndexOf(beforeBlock) + 1; AlgorithmBlockUI newBlock = CreateBlock(newBlockData); if (isInside) { if (beforeBlock.InnerBlock != null) { newBlock.NextBlock = beforeBlock.InnerBlock; beforeBlock.InnerBlock.MainPrevBlock = newBlock; } beforeBlock.InnerBlock = newBlock; } else { if (beforeBlock.NextBlock != null) { newBlock.NextBlock = beforeBlock.NextBlock; beforeBlock.NextBlock.MainPrevBlock = newBlock; } beforeBlock.NextBlock = newBlock; index = FindOutsidePosition(beforeBlock); } _blocks.Insert(index, newBlock); newBlock.MainPrevBlock = beforeBlock; newBlock.IsInsidePrevBlock = isInside; newBlock.RefreshAnData(); SetContentSiblings(); RefreshTreeBlocksListeners(); OnTreeChanged?.Invoke(_blocks); }
private void ExecuteBlock(IAlgorithmBlock block) { if (block == null) { Debug.Log("IsDone"); IsDone = true; return; } if (block.Type == BlockType.Action) { if (_procedures.ContainsKey(block.Data.name)) { _procedures[block.Data.name].Invoke(); } return; } else if (block.Type == BlockType.Set) { SetBlock setBlock = block as SetBlock; if (setBlock != null) { if (setBlock.Variable.Type == AlgorithmizmModels.Math.ValueType.Bool) { BoolVariable boolVariable = setBlock.Variable as BoolVariable; boolVariable.IsTrue = ((IBoolean)setBlock.Value).IsTrue; } else if (setBlock.Variable.Type == AlgorithmizmModels.Math.ValueType.Number) { FloatVariable boolVariable = setBlock.Variable as FloatVariable; boolVariable.Value = ((INumber)setBlock.Value).Value; } } } }
public void ExecuteNext() { _currentBlock = _currentBlock?.Next; ExecuteBlock(_currentBlock); }
public void StartAlgorithm() { IsDone = false; _currentBlock = Algorithm?.BeginBlock; ExecuteNext(); }