Пример #1
0
        public static StatementBlock LoadChildBlocks(XmlElement element, BlockEditor blockEditor)
        {
            XmlNodeList blockElements = element.SelectNodes("Block");

            if (blockElements.Count <= 0)
            {
                return(null);
            }

            var firstBlock = LoadBlock(blockElements[0] as XmlElement, blockEditor) as StatementBlock;
            var prevBlock  = firstBlock;

            for (int i = 1; i < blockElements.Count; i++)
            {
                if (prevBlock is PrevStatementBlock)
                {
                    var block = LoadBlock(blockElements[i] as XmlElement, blockEditor) as StatementBlock;
                    (prevBlock as PrevStatementBlock).NextConnectHole.StatementBlock = block;

                    prevBlock = block;
                }
                else
                {
                    throw new Exception("Statement를 붙일 수 없습니다.");
                }
            }

            return(firstBlock);
        }
Пример #2
0
    public override void OnInspectorGUI()
    {
        DrawBlockSet(blockSet);
        EditorGUILayout.Separator();

        if (selectedBlock != null)
        {
            BlockEditor.DrawBlockEditor(selectedBlock, blockSet);

            if (materialEditor == null || materialEditor.target != selectedBlock.Material)
            {
                materialEditor = (MaterialEditor)CreateEditor(selectedBlock.Material);
            }

            if (materialEditor != null)
            {
                materialEditor.DrawHeader();
                materialEditor.OnInspectorGUI();
            }
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(blockSet);
        }
    }
Пример #3
0
 private void OnGUI()
 {
     if (Block != null)
     {
         BlockEditor.DrawBlockEditor(Block);
     }
 }
Пример #4
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var functionName = element.GetAttribute("FunctionName");
            var block        = new FunctionBlock(new GFunction(functionName));

            return(block);
        }
Пример #5
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var command = BlockUtils.LoadGCommand(element);
            var block   = new EventBlock(command);

            return(block);
        }
Пример #6
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var friendlyName = element.GetAttribute("FriendlyName");
            var variableName = element.GetAttribute("VariableName");

            return(new VariableBlock(friendlyName, new GVariable(variableName)));
        }
Пример #7
0
    public override void OnInspectorGUI()
    {
        EditorGUIUtility.LookLikeControls();

        Mode oldMode = mode;

        mode = (Mode)BlockEditorUtils.Toolbar(mode);
        EditorGUILayout.Separator();
        if (mode != oldMode)
        {
            EditorGUIUtility.keyboardControl = 0;
        }

        if (mode == Mode.AtlasSet)
        {
            DrawAtlasesList(blockSet);
            if (blockSet.GetAtlas(selectedAtlas) != null)
            {
                DrawAtlasEditor(blockSet.GetAtlas(selectedAtlas));
            }
        }
        if (mode == Mode.BlockSet)
        {
            DrawBlockSet(blockSet);
            EditorGUILayout.Separator();

            if (blockSet.GetBlock(selectedBlock) != null)
            {
                BlockEditor.DrawBlockEditor(blockSet.GetBlock(selectedBlock), blockSet);
            }
        }
        if (mode == Mode.XML)
        {
            if (oldMode != mode)
            {
                xml = blockSet.Data;
            }

            xmlScrollPosition = GUILayout.BeginScrollView(xmlScrollPosition);
            GUIStyle style = new GUIStyle(GUI.skin.box);
            style.alignment = TextAnchor.UpperLeft;
            xml             = EditorGUILayout.TextArea(xml, GUILayout.ExpandWidth(true));
            blockSet.Data   = xml;
            GUILayout.EndScrollView();

            if (GUILayout.Button("Import"))
            {
                OCBlockSetImport.Import(blockSet, blockSet.Data);
                GUI.changed = true;
            }
        }

        if (GUI.changed)
        {
            string data = BlockSetExport.Export(blockSet);
            blockSet.Data = data;
            EditorUtility.SetDirty(blockSet);
        }
    }
Пример #8
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            LengthBlock block = new LengthBlock();
            XmlNode     node  = element.SelectSingleNode("Holes/Hole/Block");

            block.StringHole1.StringBlock = LoadBlock(node as XmlElement, blockEditor) as ObjectBlock;

            return(block);
        }
 public bool Publish(string part, int index)
 {
     Log.Add($"try to publish #{index} on '{part}'");
     if (!new MultiPermissionsApp(BlockBuilder, App.AppId, Log).EnsureAll(GrantSets.WritePublished, out var exp))
     {
         throw exp;
     }
     return(BlockEditor.Publish(part, index));
 }
Пример #10
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var block = new LoopInfinityBlock();

            XmlNode childList = element.SelectSingleNode("ChildBlocks");

            block.ChildConnectHole.StatementBlock = LoadChildBlocks(childList as XmlElement, blockEditor);

            return(block);
        }
Пример #11
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var block = new SetBlock();

            XmlNodeList nodeList = element.SelectNodes("Holes/Hole");

            block.SettableObjectHole.SettableObjectBlock = LoadBlock(nodeList[0].SelectSingleNode("Block") as XmlElement, blockEditor) as SettableObjectBlock;
            block.ObjectHole.ObjectBlock = LoadBlock(nodeList[1].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;
            return(block);
        }
Пример #12
0
 public void OnDrag(PointerEventData eventData)
 {
     if (Input.touchCount < 2 && !_draggingBlock)
     {
         _camera.transform.position -= _camera.ScreenToWorldPoint(eventData.delta) - _camera.ScreenToWorldPoint(Vector3.zero);
     }
     if (eventData.button == PointerEventData.InputButton.Left && Input.touchCount < 2)
     {
         BlockEditor.OnBlockDrag();
     }
 }
Пример #13
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            StringCatBlock block = new StringCatBlock();

            XmlNodeList elementList = element.SelectNodes("Holes/Hole");

            block.StringHole1.StringBlock = LoadBlock(elementList[0].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;
            block.StringHole2.StringBlock = LoadBlock(elementList[1].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;

            return(block);
        }
Пример #14
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            double number;
            var    constNumber = element.GetAttribute("Number");

            if (!double.TryParse(constNumber, out number))
            {
                number = 0;
            }

            return(new NumberConstBlock(number));
        }
Пример #15
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var block = new LoopNBlock();

            XmlNode node = element.SelectSingleNode("Holes/Hole/Block");

            block.NumberHole.NumberBlock = LoadBlock(node as XmlElement, blockEditor) as ObjectBlock;

            XmlNode childList = element.SelectSingleNode("ChildBlocks");

            block.ChildConnectHole.StatementBlock = LoadChildBlocks(childList as XmlElement, blockEditor);

            return(block);
        }
Пример #16
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            GCommand command = BlockUtils.LoadGCommand(element);

            ObjectCallBlock block       = new ObjectCallBlock(command);
            XmlNodeList     elementList = element.SelectNodes("Holes/Hole");

            for (int i = 0; i < block.HoleList.Count; i++)
            {
                BlockUtils.ConnectToHole(block.HoleList[i], LoadBlock(elementList[i].SelectSingleNode("Block") as XmlElement, blockEditor));
            }

            return(block);
        }
Пример #17
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            GCommand command = BlockUtils.LoadGCommand(element);

            VoidCallBlock block       = new VoidCallBlock(command);
            XmlNodeList   elementList = element.SelectNodes("Holes/Hole");
            var           holeList    = block.HoleList.Where(e => !(e is NextConnectHole));

            for (int i = 0; i < holeList.Count(); i++)
            {
                BlockUtils.ConnectToHole(block.HoleList[i], LoadBlock(elementList[i].SelectSingleNode("Block") as XmlElement, blockEditor));
            }

            return(block);
        }
Пример #18
0
    public void OnBeginDrag(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left || Input.touchCount > 1)
        {
            return;
        }
        _dragging = true;

        Utils.GetInputCoords(out var x, out var y);
        if (FieldMatrix.Get(x, y, out _draggedBlock))
        {
            _draggingBlock = true;
            _draggedBlock.logic.BeginDrag(eventData);
            BlockEditor.OnBlockDragStart(_draggedBlock);
        }
    }
Пример #19
0
    public void OnEndDrag(PointerEventData eventData)
    {
        if (eventData.button != PointerEventData.InputButton.Left || Input.touchCount > 1)
        {
            return;
        }
        _dragging      = false;
        _draggingBlock = false;

        BlockEditor.OnBlockDragEnd();

        if (_draggedBlock != null)
        {
            _draggedBlock.logic.EndDrag(eventData);
        }
    }
Пример #20
0
        public static BaseBlock LoadBlock(XmlElement element, BlockEditor blockEditor)
        {
            if (element == null)
            {
                return(null);
            }

            var blockTypeString = element.GetAttribute("BlockType");
            var blockType       = Type.GetType(blockTypeString);

            var baseBlock = blockType.GetMethod("LoadBlockFromXml")?.Invoke(null, new object[] { element, blockEditor }) as BaseBlock;

            blockEditor.AddBlock(baseBlock);
            blockEditor.DetachFromCanvas(baseBlock);

            return(baseBlock);
        }
Пример #21
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            var block = new IfElseBlock();

            XmlNode node = element.SelectSingleNode("Holes/Hole/Block");

            block.LogicHole.LogicBlock = LoadBlock(node as XmlElement, blockEditor) as ObjectBlock;

            XmlNode childList = element.SelectSingleNode("IfChildBlocks");

            block.IfChildConnectHole.StatementBlock = LoadChildBlocks(childList as XmlElement, blockEditor);

            childList = element.SelectSingleNode("ElseChildBlocks");
            block.ElseChildConnectHole.StatementBlock = LoadChildBlocks(childList as XmlElement, blockEditor);

            return(block);
        }
    public void DecodeLevel(ABLevel level)
    {
        foreach (OBjData gameObj in level.pigs)
        {
            Vector2    pos      = new Vector2(gameObj.x, gameObj.y);
            Quaternion rotation = Quaternion.Euler(0, 0, gameObj.rotation);

            GameObject pig = InstantiateGameObject(ABWorldAssets.PIGS[gameObj.type]);
            pig.transform.parent   = GameObject.Find("Blocks").transform;
            pig.transform.position = pos;
            pig.transform.rotation = rotation;
        }

        _birdsAdded = 0;
        foreach (BirdData gameObj in level.birds)
        {
            CreateBird(gameObj.type);
            _birdsAdded++;
        }

        foreach (BlockData gameObj in level.blocks)
        {
            Vector2    pos      = new Vector2(gameObj.x, gameObj.y);
            Quaternion rotation = Quaternion.Euler(0, 0, gameObj.rotation);

            GameObject block = InstantiateGameObject(ABWorldAssets.BLOCKS[gameObj.type]);
            block.transform.parent   = GameObject.Find("Blocks").transform;
            block.transform.position = pos;
            block.transform.rotation = rotation;

            MATERIALS material = (MATERIALS)Enum.Parse(typeof(MATERIALS), gameObj.material);
            BlockEditor.UpdateBlockMaterial(block.GetComponent <ABBlock>(), material);
        }

        foreach (OBjData gameObj in level.platforms)
        {
            Vector2    pos      = new Vector2(gameObj.x, gameObj.y);
            Quaternion rotation = Quaternion.Euler(0, 0, gameObj.rotation);

            GameObject platform = InstantiateGameObject(ABWorldAssets.PLATFORM);
            platform.transform.parent   = GameObject.Find("Platforms").transform;
            platform.transform.position = pos;
            platform.transform.rotation = rotation;
        }
    }
Пример #23
0
        public static CurrentEditState GetCurrentEditState(DocumentModifier docMdf)
        {
            var       blkTb = docMdf.acTransaction.GetObject(docMdf.acDataBase.BlockTableId, OpenMode.ForRead) as BlockTable;
            EditState state;;

            if (docMdf.acDataBase.TileMode)
            {
                // Model布局是活动的,且你正工作在ModelSpace(可能是文档模型空间,也可能是块编辑器或块的在位编辑空间)

                state = EditState.InModel;
                var btr = docMdf.acTransaction.GetObject(blkTb[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
                // 判断是否在块编辑器中编辑某一个对象
                var  be = new BlockEditor();
                bool inBlockEditorMode = be.IsInBlockEditor; // 当前界面是否位于块编辑模式
                if (inBlockEditorMode)
                {
                    var btrName = be.BlockName; // 当前正在编辑的块定义的名称
                    state = EditState.InBlockEditor;
                }
                return(new CurrentEditState(blkTb, btr, state));
            }
            else
            {
                var nCurVport = (Int16)(Autodesk.AutoCAD.ApplicationServices.Core.Application.GetSystemVariable("CVPORT"));
                if (nCurVport == 2)
                {
                    // Model之外的布局是活动的,且你正工作在浮动视口。
                    state = EditState.InViewport;
                    var btr = docMdf.acTransaction.GetObject(blkTb[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
                    return(new CurrentEditState(blkTb, btr, state));
                }
                else
                {
                    // Model之外的布局是活动的,且你正工作在图纸空间。
                    state = EditState.InLayout;
                    var layouts = docMdf.acDataBase.LayoutDictionaryId.GetObject(OpenMode.ForRead) as DBDictionary;
                    var lo      = docMdf.acTransaction.GetObject(layouts.GetAt(LayoutManager.Current.CurrentLayout), OpenMode.ForRead) as Layout;
                    var btr     = docMdf.acTransaction.GetObject(lo.BlockTableRecordId, OpenMode.ForRead) as BlockTableRecord;
                    return(new CurrentEditState(blkTb, btr, state));
                }
            }
        }
Пример #24
0
        private void BaseBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            var block       = sender as VariableBlock;
            var copiedBlock = Activator.CreateInstance(block.GetType(), new object[] { block.FriendlyName, block.GVariable }) as BaseBlock;

            BlockEditor.AddBlock(copiedBlock);

            var masterPosition = e.GetPosition(BlockEditor.Master);
            var blockPosition  = e.GetPosition(block as BaseBlock);

            copiedBlock.Position = new Point
            {
                X = masterPosition.X - blockPosition.X,
                Y = masterPosition.Y - blockPosition.Y
            };

            BlockEditor.StartBlockMove(copiedBlock, blockPosition);

            e.Handled = true;
        }
Пример #25
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            ControlPropertyBlock block = new ControlPropertyBlock();

            var controlName = element.GetAttribute("SelectedControlName");
            var eventName   = element.GetAttribute("SelectedEventName");

            if (controlName.Length > 0)
            {
                var control = blockEditor.GControlList[controlName];
                block.ControlName.SelectedItem = control;

                if (eventName.Length > 0)
                {
                    var evt = control.Exports.Where(e => e.FullName == eventName);
                    block.EventName.SelectedItem = evt;
                }
            }

            return(block);
        }
Пример #26
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            GateBlock block;

            GGate.GateType gateType;

            var gateTypeString = element.GetAttribute("Gate");

            if (Enum.TryParse(gateTypeString, out gateType))
            {
                block = new GateBlock(gateType);
            }

            block = new GateBlock();

            XmlNodeList elementList = element.SelectNodes("Holes/Hole");

            block.LogicHole1.LogicBlock = LoadBlock(elementList[0].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;
            block.LogicHole2.LogicBlock = LoadBlock(elementList[1].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;

            return(block);
        }
Пример #27
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            ComputeBlock block;

            GCompute.OperatorType operatorType;

            var gateTypeString = element.GetAttribute("Gate");

            if (!Enum.TryParse(gateTypeString, out operatorType))
            {
                operatorType = GCompute.OperatorType.PLUS;
            }

            block = new ComputeBlock(operatorType);

            XmlNodeList elementList = element.SelectNodes("Holes/Hole");

            block.NumberHole1.NumberBlock = LoadBlock(elementList[0].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;
            block.NumberHole2.NumberBlock = LoadBlock(elementList[1].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;

            return(block);
        }
Пример #28
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            ControlEventBlock block = new ControlEventBlock();

            block.BlockEditor = blockEditor;

            var controlName = element.GetAttribute("SelectedControlName");
            var eventName   = element.GetAttribute("SelectedEventName");

            if (controlName.Length > 0)
            {
                var control = blockEditor.GControlList[controlName];
                block.ControlName.SelectedItem = control;

                var evtList = control.Exports.Where(e => e.ObjectType == typeof(void));
                var evt     = evtList.Where(e => e.FullName == eventName).First();
                if (eventName.Length > 0)
                {
                    block.EventName.SelectedItem = evt;
                }
            }

            return(block);
        }
Пример #29
0
        public static BaseBlock LoadBlockFromXml(XmlElement element, BlockEditor blockEditor)
        {
            CompareBlock block;

            GCompare.ConditionType conditionType;

            var conditionTypeString = element.GetAttribute("Condition");

            if (Enum.TryParse(conditionTypeString, out conditionType))
            {
                block = new CompareBlock(conditionType);
            }
            else
            {
                block = new CompareBlock();
            }

            XmlNodeList elementList = element.SelectNodes("Holes/Hole");

            block.ObjectHole1.ObjectBlock = LoadBlock(elementList[0].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;
            block.ObjectHole2.ObjectBlock = LoadBlock(elementList[1].SelectSingleNode("Block") as XmlElement, blockEditor) as ObjectBlock;

            return(block);
        }
    void OnGUI()
    {
        EditorGUILayout.BeginHorizontal();

        _birdsOps = (BIRDS)EditorGUILayout.EnumPopup("", _birdsOps);
        if (GUILayout.Button("Create Bird", GUILayout.Width(80), GUILayout.Height(20)))
        {
            CreateBird(_birdsOps.ToString());
        }

        EditorGUILayout.EndVertical();

        // Pigs section
        EditorGUILayout.BeginHorizontal();

        _pigsOps = (PIGS)EditorGUILayout.EnumPopup("", _pigsOps);

        if (GUILayout.Button("Create Pig", GUILayout.Width(80), GUILayout.Height(20)))
        {
            GameObject pig = InstantiateGameObject(ABWorldAssets.PIGS[_pigsOps.ToString()]);
            pig.transform.parent = GameObject.Find("Blocks").transform;
        }

        EditorGUILayout.EndVertical();

        // Blocks section
        EditorGUILayout.BeginHorizontal();

        _blocksOps = (BLOCKS)EditorGUILayout.EnumPopup("", _blocksOps);
        _material  = (MATERIALS)EditorGUILayout.EnumPopup("", _material);

        if (GUILayout.Button("Create Block", GUILayout.Width(80), GUILayout.Height(20)))
        {
            GameObject block = InstantiateGameObject(ABWorldAssets.BLOCKS[_blocksOps.ToString()]);
            block.transform.parent = GameObject.Find("Blocks").transform;

            BlockEditor.UpdateBlockMaterial(block.GetComponent <ABBlock>(), _material);
        }

        EditorGUILayout.EndHorizontal();

        if (GUILayout.Button("Create Platform"))
        {
            GameObject platform = InstantiateGameObject(ABWorldAssets.PLATFORM);
            platform.transform.parent = GameObject.Find("Platforms").transform;
        }

        EditorGUILayout.BeginHorizontal();

        if (GUILayout.Button("Load Level"))
        {
            LoadLevel();
        }

        if (GUILayout.Button("Save Level"))
        {
            SaveLevel();
        }

        if (GUILayout.Button("Delete Level"))
        {
            if (EditorUtility.DisplayDialog("Delete Level",
                                            "Are you sure you want to delete this level?", "Yes", "Cancel"))
            {
                CleanLevel();
            }
        }

        if (GUILayout.Button("New Level"))
        {
            if (EditorUtility.DisplayDialog("Create New Level",
                                            "Are you sure you want to create a new level? This operation will " +
                                            "not save the current level in the scene", "Yes", "Cancel"))
            {
                CleanLevel();

                Vector3    landscapePos = ABWorldAssets.LANDSCAPE.transform.position;
                GameObject landscape    = InstantiateGameObject(ABWorldAssets.LANDSCAPE);
                landscape.transform.position = landscapePos;
                landscape.transform.parent   = GameObject.Find("GameWorld").transform;

                Vector3    backgroundPos = ABWorldAssets.BACKGROUND.transform.position;
                GameObject background    = InstantiateGameObject(ABWorldAssets.BACKGROUND);
                background.transform.position = backgroundPos;
                background.transform.parent   = GameObject.Find("Camera").transform;

                GameObject slingshot = InstantiateGameObject(ABWorldAssets.SLINGSHOT);
                slingshot.transform.position = ABConstants.SLING_STANDARD_POS;
                slingshot.transform.parent   = GameObject.Find("GameWorld").transform;

                GameObject.Find("Camera").GetComponent <ABGameplayCamera> ()._maxWidth = ABConstants.CAMERA_STANDARD_MAX_WIDTH;
                GameObject.Find("Camera").GetComponent <ABGameplayCamera> ()._minWidth = ABConstants.CAMERA_STANDARD_MIN_WIDTH;
            }
        }



        EditorGUILayout.EndHorizontal();
    }