/// <summary>
        /// 随机发射点索引结果
        /// </summary>
        /// <param name="obj"></param>
        public void OnRandomEmitNodeResult(IComponentEvent obj)
        {
            RandomEmitNodeResult result = obj as RandomEmitNodeResult;

            if (result == null)
            {
                return;
            }

            EmitSelectionData emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;//发射口选择数据

            EmitData[] emitDatas = new EmitData[result.emitNode.IndexList.Count];
            for (int i = 0; i < result.emitNode.IndexList.Count; ++i)
            {
                emitDatas[i] = new EmitData()
                {
                    NodeType  = (BindNodeType)result.emitNode.NodeType,
                    NodeIndex = result.emitNode.IndexList[i],
                };
            }
            emitSelectionData.AddOrUpdateEmit(result.emitNode.AssignIndex, emitDatas);

            //恢复时间轴
            DoResumeSkill();
        }
Example #2
0
        public override void Trigger()
        {
            EmitSelectionData emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;

            FixedEmitNodeData nodeData = GetData <FixedEmitNodeData>();
            EmitData          emitData = new EmitData()
            {
                NodeType  = nodeData.NodeType,
                NodeIndex = nodeData.NodeIndex,
            };

            emitSelectionData.AddOrUpdateEmit(nodeData.AssignIndex, emitData);
        }
Example #3
0
        public override void Trigger()
        {
            EmitSelectionData       emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;
            TargetNearEmitNodeData  nodeData          = GetData <TargetNearEmitNodeData>();
            IBindNodeActionProperty bindNodeProperty  = m_Context.GetObject <IBindNodeActionProperty>();
            IBaseActionProperty     property          = m_Context.GetObject <IBaseActionProperty>();


            List <Transform> bindTransforms = null;

            if (bindNodeProperty.GetPresentation() == null)
            {
                Leyoutech.Utility.DebugUtility.LogWarning("查找挂点", string.Format("bindNodeProperty.GetPresentation() == null ,Entity = {0} ,ItemId = {1} " +
                                                                                "模型未加载完毕,挂点脚本未被赋值!, 此时挂点作 root 处理",
                                                                                property.EntityId(),
                                                                                property.GetItemID()));

                bindTransforms = new List <Transform>();
                bindTransforms.Add(property.GetRootTransform());
            }
            else
            {
                bindTransforms = bindNodeProperty.GetPresentation().GetBindNode(nodeData.NodeType.ToLaunchPoint(), -1);
            }



            ActionTarget actionTarget = SelectionTargetUtil.GetActionTarget(m_Context, nodeData.TargetSelection.Value);

            if (actionTarget == null || actionTarget.TargetType == ActionTargetType.None)
            {
                Leyoutech.Utility.DebugUtility.LogWarning("TargetNearEmitNodeAction", "TargetNearEmitNodeAction::Trigger->target not found");
                return;
            }

            Vector3 targetPosition = Vector3.zero;

            if (actionTarget.TargetType == ActionTargetType.Entity)
            {
                targetPosition = actionTarget.TargetEntity.position;
            }
            else
            {
                targetPosition = actionTarget.TargetPosition;
            }
            List <BindTransformDistanceData> distances = new List <BindTransformDistanceData>();

            for (int i = 0; i < bindTransforms.Count; ++i)
            {
                float distance = Vector3.Distance(bindTransforms[i].position, targetPosition);
                distances.Add(new BindTransformDistanceData()
                {
                    Index    = i,
                    Distance = distance,
                });
            }

            distances.Sort((item1, item2) =>
            {
                return(item1.Distance.CompareTo(item2.Distance));
            });
            int emitDataCount = nodeData.Count;

            if (emitDataCount > distances.Count)
            {
                Leyoutech.Utility.DebugUtility.LogError("Action", "TargetNearEmitNodeAction::Trigger->the number of emit in config is less than the count of the node.");
                emitDataCount = distances.Count;
            }

            EmitData[] emitDatas = new EmitData[emitDataCount];
            for (int i = 0; i < nodeData.Count && i < distances.Count; ++i)
            {
                emitDatas[i] = new EmitData()
                {
                    NodeType  = nodeData.NodeType,
                    NodeIndex = distances[i].Index,
                };
            }

            emitSelectionData.AddOrUpdateEmit(nodeData.AssignIndex, emitDatas);
        }
        public override void Trigger()
        {
            AutoRangeEmitNodeData data = GetData <AutoRangeEmitNodeData>();

            IBaseActionProperty     property          = m_Context.GetObject <IBaseActionProperty>();
            IBindNodeActionProperty bindNodeProperty  = m_Context.GetObject <IBindNodeActionProperty>();
            EmitSelectionData       emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;

            List <Transform> bindTransforms = null;

            if (bindNodeProperty.GetPresentation() == null)
            {
                Leyoutech.Utility.DebugUtility.LogWarning("查找挂点", string.Format("bindNodeProperty.GetPresentation() == null ,Entity = {0} ,ItemId = {1}" +
                                                                                "模型未加载完毕,挂点脚本未被赋值!, 此时挂点作 root 处理",
                                                                                property.EntityId(),
                                                                                property.GetItemID()
                                                                                ));

                bindTransforms = new List <Transform>();
                bindTransforms.Add(property.GetRootTransform());
            }
            else
            {
                bindTransforms = bindNodeProperty.GetPresentation().GetBindNode(data.NodeType.ToLaunchPoint(), -1);
            }


            if (bindTransforms == null || bindTransforms.Count == 0)
            {
                Debug.LogError("AutoRangeEmitNodeAction::Trigger->bind node is null");
                return;
            }
            List <int> orgIndex = new List <int>();

            for (int i = 0; i < bindTransforms.Count; ++i)
            {
                orgIndex.Add(i);
            }
            if (data.Count > orgIndex.Count)
            {
                for (int i = 0; i < data.Count - orgIndex.Count; ++i)
                {
                    Random.InitState((int)DateTime.Now.Ticks);
                    int index = Random.Range(0, orgIndex.Count);
                    orgIndex.Add(index);
                }
            }

            List <EmitData> emitDatas = new List <EmitData>();

            for (int i = 0; i < data.Count; ++i)
            {
                Random.InitState((int)DateTime.Now.Ticks);
                int index = Random.Range(0, orgIndex.Count);
                orgIndex.RemoveAt(orgIndex.IndexOf(index));

                EmitData emitData = new EmitData()
                {
                    NodeType  = data.NodeType,
                    NodeIndex = index,
                };

                emitDatas.Add(emitData);
            }

            emitSelectionData.AddOrUpdateEmit(data.AssignIndex, emitDatas.ToArray());
        }