Пример #1
0
        /// <summary>
        /// 复制图元
        /// </summary>
        /// <returns>复制的图元</returns>
        public override SlotContainer Clone()
        {
            AIActionsGraphElement aiActionsGraphElement = new AIActionsGraphElement(location, elementSize);

            CopyData(this, aiActionsGraphElement);

            return(aiActionsGraphElement);
        }
Пример #2
0
        /// <summary>
        /// 创建缩略的图元
        /// </summary>
        /// <param name="graphType">图元类型</param>
        /// <param name="centerLocation">图元中心位置</param>
        /// <param name="elementSize">图元大小</param>
        /// <param name="moveSize">图元的移动大小</param>
        /// <returns>图元对象</returns>
        private GraphElement CreateAbbreviateGraphElement(GraphType graphType, Point centerLocation)
        {
            GraphElement abbreviateGraphElement = null;

            switch (graphType)
            {
                case GraphType.ConditionNode: // 条件结点
                    {
                        abbreviateGraphElement = new ConditionGraphElement(centerLocation - graphSetting.ConditionNodeMoveOffset, graphSetting.ConditionNodeElementSize);
                        moveOffset = graphSetting.ConditionNodeMoveOffset;

                        break;
                    }
                case GraphType.ActionNode: // 动作结点
                    {
                        abbreviateGraphElement = new ActionGraphElement(centerLocation - graphSetting.ActionNodeMoveOffset, graphSetting.ActionNodeElementSize);
                        moveOffset = graphSetting.ActionNodeMoveOffset;

                        break;
                    }
                case GraphType.EventNode: // 事件结点
                    {
                        abbreviateGraphElement = new EventGraphElement(centerLocation - graphSetting.EventNodeMoveOffset, graphSetting.EventNodeElementSize);
                        moveOffset = graphSetting.EventNodeMoveOffset;

                        break;
                    }
                case GraphType.AIStateNode: // AI状态结点
                    {
                        abbreviateGraphElement = new AIStateGraphElement(centerLocation - graphSetting.AIStateNodeMoveOffset, graphSetting.AIStateNodeElementSize);
                        moveOffset = graphSetting.AIStateNodeMoveOffset;

                        break;
                    }
                case GraphType.AIActionNode: // AI动作结点
                    {
                        abbreviateGraphElement = new AIActionGraphElement(centerLocation - graphSetting.AIActionNodeMoveOffset, graphSetting.AIActionsNodeElementSize);
                        moveOffset = graphSetting.AIActionNodeMoveOffset;

                        break;
                    }
                case GraphType.AIActionsNode: // AI动作组结点
                    {
                        abbreviateGraphElement = new AIActionsGraphElement(centerLocation - graphSetting.AIActionsNodeMoveOffset, graphSetting.AIActionsNodeElementSize);
                        moveOffset = graphSetting.AIActionsNodeMoveOffset;

                        break;
                    }
                case GraphType.InnerChart: // 子绘图结点
                    {
                        abbreviateGraphElement = new InnerChart(centerLocation - graphSetting.InnerChartMoveOffset, graphSetting.InnerChartElementSize);
                        moveOffset = graphSetting.InnerChartMoveOffset;

                        break;
                    }
                case GraphType.InterfaceNode: // 接口结点
                    {
                        abbreviateGraphElement = new InterfaceGraphElement(centerLocation - graphSetting.InterfaceNodeMoveOffset, graphSetting.InterfaceNodeElementSize);
                        moveOffset = graphSetting.InterfaceNodeMoveOffset;

                        break;
                    }
            }

            if (abbreviateGraphElement != null)
            {
                abbreviateGraphElement.Refresh();
            }

            return abbreviateGraphElement;
        }
Пример #3
0
        /// <summary>
        /// 执行命令
        /// </summary>
        /// <param name="o">当前对象</param>
        /// <returns>是否执行成功</returns>
        public override bool Execute(object o)
        {
            bool success = true;
            object[] args = o as object[];
            int id = graphManager.AllocateGraphElementID();
            Point p = (Point)args[0];
            string typeString = args[1] as string;
            GraphSetting graphSetting = GraphSetting.GetGraphSetting();

            // 保存命令执行前的数据
            if (firstCommand) // 只有第一条命令保存执行前的数据
            {
                SaveBeforeExecute(flowChartManager.GetArguments());
            }   

            switch (typeString)
            {
                case "ConditionNode": // 条件结点
                    {
                        ConditionGraphElement conditionGraphElement = new ConditionGraphElement(p, graphSetting.ConditionNodeElementSize);                        
                        InitSlotContainer(conditionGraphElement, id, "条件结点");

                        break;
                    }
                case "ActionNode": // 动作结点
                    {
                        ActionGraphElement actionGraphElement = new ActionGraphElement(p, graphSetting.ActionNodeElementSize);
                        InitSlotContainer(actionGraphElement, id, "动作结点");

                        break;
                    }
                case "EventNode": // 事件结点
                    {
                        EventGraphElement eventGraphElement = new EventGraphElement(p, graphSetting.EventNodeElementSize);                        
                        InitSlotContainer(eventGraphElement, id, "事件结点");

                        break;
                    }
                case "AIStateNode": // ai状态结点
                    {
                        AIStateGraphElement aiStateGraphElement = new AIStateGraphElement(p, graphSetting.AIStateNodeElementSize);                        
                        InitSlotContainer(aiStateGraphElement, id, "AI状态结点");

                        break;
                    }
                case "AIActionNode": // ai动作结点
                    {
                        AIActionGraphElement aiActionGraphElement = new AIActionGraphElement(p, graphSetting.AIActionNodeElementSize);                        
                        InitSlotContainer(aiActionGraphElement, id, "AI动作结点");

                        break;
                    }
                case "AIActionsNode": // ai动作组结点
                    {
                        AIActionsGraphElement aiActionsGraphElement = new AIActionsGraphElement(p, graphSetting.AIActionsNodeElementSize);                        
                        InitSlotContainer(aiActionsGraphElement, id, "AI动作组结点");

                        break;
                    }
                case "InnerChart": // 子绘图结点
                    {
                        InnerChart innerChart = new InnerChart(p, graphSetting.InnerChartElementSize);                        
                        InitSlotContainer(innerChart, id, "子绘图结点");

                        break;
                    }
                case "InterfaceNode": // 接口结点
                    {
                        InterfaceGraphElement interfaceGraphElement = new InterfaceGraphElement(p, graphSetting.InterfaceNodeElementSize);                        
                        InitSlotContainer(interfaceGraphElement, id, "接口结点");

                        break;
                    }
            }
            
            if (success) // 保存命令执行后的数据
            {
                flowChartManager.ContentChanged = true;                
                SaveAfterExecute(flowChartManager.GetArguments());
            }

            return success;
        }
Пример #4
0
        /// <summary>
        /// 获取动作组的元数据链表
        /// </summary>
        /// <param name="dataManager">数据管理器</param>
        /// <param name="aiActionsGraphElement">动作组图元</param>
        /// <returns>动作组的元数据链表</returns>
        private List<FlowChartMetaData> GetActionsMetaDataList(DataManager dataManager, AIActionsGraphElement aiActionsGraphElement)
        {
            object data = dataManager.GetCompileData(aiActionsGraphElement);

            List<object> actions = CodeProviderClass.SplitMultiActionIntoSingle(data);
            List<FlowChartMetaData> actionsMetaDataList = new List<FlowChartMetaData>();

            // 把显示文本拆分
            List<string> displayTextList = new List<string>();
            string[] tempArray = aiActionsGraphElement.Text.Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string s in tempArray)
            {
                displayTextList.Add(s.TrimEnd(new char[] { '\r' }).TrimStart(new char[] { '◆', ' ' }));
            }

            for (int i = 0; i < actions.Count; i++)
            {
                FlowChartMetaData actionMetaData = new FlowChartMetaData(maxID, actions[i], "AIActionNode");
                actionMetaData.DisplayText = displayTextList[i];
                actionsMetaDataList.Add(actionMetaData);
                maxID++;
            }

            for (int i = 0; i < actions.Count - 1; i++)
            {
                FlowChartMetaData actionMetaData = actionsMetaDataList[i];
                FlowChartMetaData nextMetaData = actionsMetaDataList[i + 1];

                FlowChartMetaData lineMetaData;
                int returnValueCount = CodeProviderClass.GetActionRetCount(actions[i]);

                for (int j = 1; j <= returnValueCount; j++)
                {
                    lineMetaData = new FlowChartMetaData(maxID, j.ToString(), "AILine");
                    lineMetaData.DisplayText = j.ToString();
                    actionMetaData.AddNextMetaData(lineMetaData);
                    lineMetaData.AddPreviousMetaData(actionMetaData);
                    lineMetaData.AddNextMetaData(nextMetaData);
                    nextMetaData.AddPreviousMetaData(lineMetaData);

                    maxID++;
                }
            }

            return actionsMetaDataList;
        }
Пример #5
0
        /// <summary>
        /// 复制图元
        /// </summary>
        /// <returns>复制的图元</returns>
        public override SlotContainer Clone()
        {
            AIActionsGraphElement aiActionsGraphElement = new AIActionsGraphElement(location, elementSize);
            CopyData(this, aiActionsGraphElement);

            return aiActionsGraphElement;
        }