コード例 #1
0
        public override void Trigger()
        {
            IBaseActionProperty         property         = m_Context.GetObject <IBaseActionProperty>();
            AddBindLinkTargetEffectData data             = GetData <AddBindLinkTargetEffectData>();
            IBindNodeActionProperty     bindNodeProperty = m_Context.GetObject <IBindNodeActionProperty>();

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

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

            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(), data.NodeIndex);
            }


            foreach (var tran in bindTransforms)
            {
                if (actionTarget.TargetType == ActionTargetType.Entity)
                {
                    if (data.TargetSelection.Value.TargetSecondType == Eternity.FlatBuffer.Enums.TargetSecondType.Entity)
                    {
                        EffectActionUtil.CreateEffect(data.Address, tran, property.IsMain(), actionTarget.TargetEntity, Vector3.zero);
                    }
                    else
                    {
                        EffectActionUtil.CreateEffect(data.Address, tran, property.IsMain(), actionTarget.TargetEntity, actionTarget.TargetEntityHitPositionOffet);
                    }
                }
                else
                {
                    EffectActionUtil.CreateEffect(data.Address, tran, property.IsMain(), actionTarget.TargetPosition);
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// 获取最远点
        /// </summary>
        /// <param name="context"></param>
        /// <param name="selectionData"></param>
        /// <returns></returns>
        private static void GetFarthestPostionActionTarget(ref ActionTarget actionTarget, IContext context, Vector3 calculateDirection)
        {
            IBaseActionProperty baseActionProperty = context.GetObject <IBaseActionProperty>();

            if (baseActionProperty.IsMain())
            {
                SkillData           skillData        = context.GetObject <SkillData>();
                MainCameraComponent mainCamComponent = context.GetObject <MainCameraComponent>();

                if (mainCamComponent == null)
                {
                    actionTarget = null;
                    return;
                }
                //最远点
                Vector3 distantPoint = Vector3.zero;


                Vector3 playerPosition = baseActionProperty.GetRootTransform().position;             //玩家位置
                Vector3 CamPosition    = mainCamComponent.GetPosition();                             //摄像机位置

                Vector3 cameDir       = calculateDirection; /*mainCamComponent.GetForward()*/        //摄像机方向向量
                Vector3 camera2Player = playerPosition - CamPosition;                                //摄像机到玩家的向量
                Vector3 verticalPos   = CamPosition + Vector3.Dot(camera2Player, cameDir) * cameDir; //垂线坐标 = 摄像机坐标+ camera2Player在cameDir投影距离 * cameDir向量
                Vector3 Play2VerticaN = (verticalPos - playerPosition).normalized;                   //玩家到垂线点 的单位向量
                float   Play2VerticaD = Vector3.Distance(verticalPos, playerPosition);               //玩家跟垂线点的距离

                float MaxDis = skillData.BaseData.Value.MaxDistance;
                if (MaxDis > Play2VerticaD)
                {
                    distantPoint = Mathf.Sqrt(MaxDis * MaxDis - Play2VerticaD * Play2VerticaD) * cameDir + verticalPos; //最远点 = 三角函数求得垂线点到最远点向量+ 垂线点坐标
                }
                else
                {
                    distantPoint = playerPosition + Play2VerticaN * MaxDis;//垂线上找到距离是 MaxDis 的坐标
                }
                actionTarget.TargetType     = ActionTargetType.Position;
                actionTarget.TargetPosition = distantPoint;
            }
            else
            {
                SkillData skillData      = context.GetObject <SkillData>();
                Vector3   playerPosition = baseActionProperty.GetRootTransform().position;
                float     d = skillData.BaseData.Value.MaxDistance;

                Vector3 distantPoint = playerPosition + calculateDirection * d;
                actionTarget.TargetType     = ActionTargetType.Position;
                actionTarget.TargetPosition = distantPoint;

                //Leyoutech.Utility.DebugUtility.LogError("第三方最远点方向", string.Format("计算最远点 ---->self = {0} , calculateDirection = {1},  PlayPos = {2}  , distantPoint = {3}",
                //    baseActionProperty.EntityId(),
                //    calculateDirection,
                //    playerPosition,
                //    distantPoint
                //    ));
            }
        }
コード例 #3
0
        public override void Trigger()
        {
            IBaseActionProperty property = m_Context.GetObject <IBaseActionProperty>();

            if (!property.IsMain())
            {
                return;
            }

            //通知准星Size变化
            property.SendEvent(ComponentEventName.PostWeaponFire, null);
        }
コード例 #4
0
        public override void Trigger()
        {
            PlayPointSoundData data = GetData <PlayPointSoundData>();

            IBaseActionProperty baseActionProperty = m_Context.GetObject <IBaseActionProperty>();

            if (baseActionProperty.IsMain())
            {
                WwiseUtil.PlaySound(data.MainSoundID, false, data.Position.Value.ToVector3());
            }
            else
            {
                WwiseUtil.PlaySound(data.ThirdPartSoundID, false, data.Position.Value.ToVector3());
            }
        }
コード例 #5
0
        public override void Trigger()
        {
            PlayEntityPositionSoundData data = GetData <PlayEntityPositionSoundData>();

            IBaseActionProperty baseActionProperty = m_Context.GetObject <IBaseActionProperty>();
            Vector3             entityPosition     = baseActionProperty.GetRootTransform().position;

            if (baseActionProperty.IsMain())
            {
                WwiseUtil.PlaySound(data.MainSoundID, false, entityPosition);
            }
            else
            {
                WwiseUtil.PlaySound(data.ThirdPartSoundID, false, entityPosition);
            }
        }
コード例 #6
0
        public override void Trigger()
        {
            EmitSelectionData       emitSelectionData  = m_Context.GetObject <SkillRunningData>().EmitSelectoin;
            IBindNodeActionProperty bindNodeProperty   = m_Context.GetObject <IBindNodeActionProperty>();
            IBaseActionProperty     baseActionProperty = m_Context.GetObject <IBaseActionProperty>();
            PlayEmitSoundData       nodeData           = GetData <PlayEmitSoundData>();

            EmitData[] emitDatas = emitSelectionData.GetEmits(nodeData.EmitIndex);
            if (emitDatas != null && emitDatas.Length > 0)
            {
                foreach (var emitData in emitDatas)
                {
                    List <Transform> bindTransforms = null;
                    if (bindNodeProperty.GetPresentation() == null)
                    {
                        Leyoutech.Utility.DebugUtility.LogWarning("查找挂点", string.Format("bindNodeProperty.GetPresentation() == null ,Entity = {0} ,ItemId = {1} " +
                                                                                        "模型未加载完毕,挂点脚本未被赋值!, 此时挂点作 root 处理",
                                                                                        baseActionProperty.EntityId(),
                                                                                        baseActionProperty.GetItemID()));

                        bindTransforms = new List <Transform>();
                        bindTransforms.Add(baseActionProperty.GetRootTransform());
                    }
                    else
                    {
                        bindTransforms = bindNodeProperty.GetPresentation().GetBindNode(emitData.NodeType.ToLaunchPoint(), emitData.NodeIndex);
                    }


                    foreach (var tran in bindTransforms)
                    {
                        if (baseActionProperty.IsMain())
                        {
                            WwiseUtil.PlaySound(nodeData.MainSoundID, false, tran);
                        }
                        else
                        {
                            WwiseUtil.PlaySound(nodeData.ThirdPartSoundID, false, tran);
                        }
                    }
                }
            }
            else
            {
            }
        }
コード例 #7
0
        public override void Trigger()
        {
            //AccumulationForceReleaseData data = GetData<AccumulationForceReleaseData>();

            //蓄力技能强势释放
            IBaseActionProperty baseActionProperty = m_Context.GetObject <IBaseActionProperty>();

            if (!baseActionProperty.IsMain())
            {
                return;
            }

            //通知准星Size变化
            baseActionProperty.SendEvent(ComponentEventName.CoerceSkillButtonUp, null);

            TimelineTrackGroup trackGroup = m_Context.GetObject <TimelineTrackGroup>();

            trackGroup.Pause();
        }
コード例 #8
0
        public override void Trigger()
        {
            IBaseActionProperty property = m_Context.GetObject <IBaseActionProperty>();

            if (!property.IsMain())
            {
                return;
            }

            AffectCDData cdData    = GetData <AffectCDData>();
            SkillData    skillData = m_Context.GetObject <SkillData>();

            PlayerSkillProxy skillProxy = GameFacade.Instance.RetrieveProxy(ProxyName.PlayerSkillProxy) as PlayerSkillProxy;

            for (int i = 0; i < cdData.CdDatasLength; ++i)
            {
                CdData data = cdData.CdDatas(i).Value;
                skillProxy.AddCD(skillData.Id, data.CdType, data.CdTime);
            }
        }
コード例 #9
0
        public override void Trigger()
        {
            PlayEntityBindSoundData data               = GetData <PlayEntityBindSoundData>();
            IBindNodeActionProperty bindNodeProperty   = m_Context.GetObject <IBindNodeActionProperty>();
            IBaseActionProperty     baseActionProperty = 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 处理",
                                                                                baseActionProperty.EntityId(),
                                                                                baseActionProperty.GetItemID()));

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


            foreach (var tran in bindTransforms)
            {
                if (baseActionProperty.IsMain())
                {
                    WwiseUtil.PlaySound(data.MainSoundID, false, tran);
                }
                else
                {
                    WwiseUtil.PlaySound(data.ThirdPartSoundID, false, tran);
                }
            }
        }
コード例 #10
0
        public override void DoEnter()
        {
            EmitSelectionData emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;

            // IBaseActionProperty property = m_Context.GetObject<IBaseActionProperty>();
            // AddEmitLinkTargetDurationEffectData data = GetData<AddEmitLinkTargetDurationEffectData>();
            EmitData[] emitDatas = emitSelectionData.GetEmits(aeeData.EmitIndex);
            if (emitDatas == null || emitDatas.Length == 0)
            {
                Leyoutech.Utility.DebugUtility.LogWarning("AddEmitLinkTargetDurationEffectAction", "AddEmitLinkTargetDurationEffectAction::DoEnter->emitData not found");
                return;
            }

            actionTarget = SelectionTargetUtil.GetActionTarget(m_Context, aeeData.TargetSelection.Value);
            if (actionTarget == null || actionTarget.TargetType == ActionTargetType.None)
            {
                Leyoutech.Utility.DebugUtility.LogWarning("AddEmitLinkTargetDurationEffectAction", "AddEmitLinkTargetDurationEffectAction::DoEnter->target not found");
                return;
            }

            IBindNodeActionProperty bindNodeProperty = m_Context.GetObject <IBindNodeActionProperty>();

            for (int i = 0; i < emitDatas.Length; ++i)
            {
                EmitData emitData = emitDatas[i];

                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(emitData.NodeType.ToLaunchPoint(), emitData.NodeIndex);
                }

                foreach (var tran in bindTransforms)
                {
                    EffectController effect = null;
                    if (actionTarget.TargetType == ActionTargetType.Entity)
                    {
                        if (aeeData.TargetSelection.Value.TargetSecondType == Eternity.FlatBuffer.Enums.TargetSecondType.Entity)
                        {
                            effect = EffectActionUtil.CreateEffect(aeeData.Address, tran, property.IsMain(), actionTarget.TargetEntity, Vector3.zero);
                        }
                        else
                        {
                            effect = EffectActionUtil.CreateEffect(aeeData.Address, tran, property.IsMain(), actionTarget.TargetEntity, actionTarget.TargetEntityHitPositionOffet);
                        }
                    }
                    else
                    {
                        effect = EffectActionUtil.CreateEffect(aeeData.Address, tran, property.IsMain(), actionTarget.TargetPosition);
                    }
                    if (effect != null)
                    {
                        effects.Add(effect);
                    }
                }
            }
        }
コード例 #11
0
        public override void Trigger()
        {
            IBaseActionProperty         property = m_Context.GetObject <IBaseActionProperty>();
            AddEntityPositionEffectData data     = GetData <AddEntityPositionEffectData>();

            EffectActionUtil.CreateEffect(data.Address, property.GetRootTransform().position, property.IsMain());
        }
コード例 #12
0
        public override void DoEnter()
        {
            EmitSelectionData   emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;
            IBaseActionProperty property          = m_Context.GetObject <IBaseActionProperty>();

            AddEmitDurationEffectData data = GetData <AddEmitDurationEffectData>();

            EmitData[] emitDatas = emitSelectionData.GetEmits(data.EmitIndex);
            IBindNodeActionProperty bindNodeProperty = m_Context.GetObject <IBindNodeActionProperty>();

            for (int i = 0; emitDatas != null && i < emitDatas.Length; i++)
            {
                EmitData emitData = emitDatas[i];

                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(emitData.NodeType.ToLaunchPoint(), emitData.NodeIndex);
                }


                foreach (var tran in bindTransforms)
                {
                    EffectController effect = EffectActionUtil.CreateEffect(data.Address, tran, property.IsMain());
                    effects.Add(effect);
                }
            }
        }
コード例 #13
0
        public override void Trigger()
        {
            EmitSelectionData       emitSelectionData = m_Context.GetObject <SkillRunningData>().EmitSelectoin;
            IBaseActionProperty     property          = m_Context.GetObject <IBaseActionProperty>();
            IBindNodeActionProperty bindNodeProperty  = m_Context.GetObject <IBindNodeActionProperty>();

            AddEmitEffectData data = GetData <AddEmitEffectData>();

            bool    isChangeEffectToward = false;
            Vector3 targetPosition       = Vector3.zero;

            if (data.IsTowardToTarget)
            {
                isChangeEffectToward = true;
                ActionTarget actionTarget = SelectionTargetUtil.GetActionTarget(m_Context, data.TargetSelection.Value);
                if (actionTarget == null || actionTarget.TargetType == ActionTargetType.None)
                {
                    Leyoutech.Utility.DebugUtility.LogWarning("AddBindLinkTargetEffectAction", "AddBindLinkTargetEffectAction::Trigger->target not found");
                    isChangeEffectToward = false;
                }
                else if (actionTarget.TargetType == ActionTargetType.Position)
                {
                    targetPosition = actionTarget.TargetPosition;
                }
                else if (actionTarget.TargetType == ActionTargetType.Entity)
                {
                    targetPosition = actionTarget.TargetEntity.position;
                }
            }

            EmitData[] emitDatas = emitSelectionData.GetEmits(data.EmitIndex);//获取发射口  index= -1,表示所有发射口
            if (emitDatas != null && emitDatas.Length > 0)
            {
                for (int i = 0; emitDatas != null && i < emitDatas.Length; i++)
                {
                    EmitData emitData = emitDatas[i];

                    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(emitData.NodeType.ToLaunchPoint(), emitData.NodeIndex);
                    }


                    foreach (var tran in bindTransforms)
                    {
                        EffectController effect = EffectActionUtil.CreateEffect(data.Address, tran, property.IsMain());
                        if (isChangeEffectToward)
                        {
                            Vector3 dir = (targetPosition - tran.position).normalized;
                            effect.CachedTransform.forward = dir;
                        }
                    }
                }
            }
            else
            {
            }
        }