Exemplo n.º 1
0
 void ApplySkill()
 {
     m_AttackInAir   = motionMgr.GetMaskState(PEActionMask.InAir);
     m_AttackInWater = (null != phyMotor && phyMotor.spineInWater);
     if (m_AttackInAir)
     {
         m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInAir);
     }
     else if (m_AttackInWater)
     {
         m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInWater);
     }
     else
     {
         m_AttackInMove   = null != move && move.velocity.magnitude > m_MoveAttackSpeed;
         m_AttackInSprint = null != move && move.velocity.magnitude > m_SprintAttackSpeed;
         if (m_AttackInSprint)
         {
             m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInSprint);
         }
         else if (m_AttackInMove)
         {
             m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillInMove);
         }
         else
         {
             m_SkillInst = skillCmpt.StartSkill(targetEntity, sword.m_AttackSkill[m_AttackModeIndex].m_SkillID);
         }
     }
 }
Exemplo n.º 2
0
 public override void ApplyAnim(string anim, SkRuntimeInfo info)
 {
     base.ApplyAnim(anim, info);
     if (anim == "Knock")
     {
         SkInst inst = info as SkInst;
         if (inst != null)
         {
             if (m_View != null && inst._colInfo != null && inst._colInfo.hitTrans != null && inst._colInfo.hitTrans.GetComponent <Rigidbody>() != null)
             {
                 //Vector3 direction = inst._colTarget.transform.position - inst._colCaster.transform.position;
                 RagdollHitInfo hitInfo = PETools.PE.CapsuleHitToRagdollHit(inst._colInfo);
                 if (m_View is BiologyViewCmpt)
                 {
                     (m_View as BiologyViewCmpt).ActivateRagdoll(hitInfo, true);
                 }
             }
         }
         else
         {
             Debug.LogError("[ApplyAnim] Unsupported SkRuntimeInfo type");
         }
     }
     else
     {
         if (m_Animator != null)
         {
             m_Animator.SetTrigger(anim);
         }
     }
 }
Exemplo n.º 3
0
 public override void OnHurtSb(SkInst inst, float dmg)
 {
     base.OnHurtSb(inst, dmg);
     if (m_MotionEquip != null && null != m_MotionEquip.Weapon && null != m_MotionEquip.Weapon.ItemObj)
     {
         Entity.SendMsg(EMsg.Battle_EquipAttack, m_MotionEquip.Weapon.ItemObj);
     }
 }
Exemplo n.º 4
0
 void ApplyForce(SkInst inst)
 {
     //TODO:llj
     if (null != m_Beat)
     {
         if (PETools.PEUtil.CanDamage(inst.Caster, inst.Target))
         {
             m_Beat.Beat(inst.Target, (null != inst._colInfo) ? inst._colInfo.hitTrans : null, inst._forceDirection, inst._forceMagnitude);
         }
     }
 }
Exemplo n.º 5
0
    private void ProcDigB45s(SkEntity caster)
    {
        SkInst      inst       = SkRuntimeInfo.Current as SkInst;
        IDigTerrain digTerrain = caster as IDigTerrain;
        IntVector4  digPos     = null;

        if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is Block45Man)))
        {
            return;
        }

        float damage = caster.GetAttribute((int)AttribType.Atk);
        float radius = caster.GetAttribute((int)AttribType.ResRange);
        float height = caster.GetAttribute((int)AttribType.ResRange);
        //		float resourceBonus = caster.GetAttribute((int)AttribType.ResBouns);
        //		bool returnResource = digPos.w == 1;

        PeEntity entity = caster != null?caster.GetComponent <PeEntity>() : null;

        if (entity != null && entity.monster != null)
        {
            radius = entity.bounds.extents.x + 1;
            height = entity.bounds.extents.y + 1;
        }

        if (null != inst && null != inst._colInfo)
        {
            int effecID = 0;
            if (radius < 3)
            {
                effecID = 258;
            }
            else if (radius < 5f)
            {
                effecID = 259;
            }
            else
            {
                effecID = 260;
            }
            Pathea.Effect.EffectBuilder.Instance.Register(effecID, null, inst._colInfo.hitPos, Quaternion.identity);
        }

        if (!GameConfig.IsMultiMode)
        {
            List <B45Block> removeList = new List <B45Block>();
            DigTerrainManager.DigBlock45(digPos.ToIntVector3(), damage * 0.2f, radius, height, ref removeList, false);
        }
        else
        {
            /// TODO : code for multiplayer
        }
    }
Exemplo n.º 6
0
        public override void ApplyRepelEff(SkRuntimeInfo info)
        {
            base.ApplyRepelEff(info);
            SkInst inst = info as SkInst;

            if (inst != null)
            {
                ApplyForce(inst);
            }
            else
            {
                Debug.LogError("[ApplySpEff] Unsupported SkRuntimeInfo type");
            }
        }
Exemplo n.º 7
0
        public void RegisterEffectFromSkill(int id, SkRuntimeInfo info, Transform caster)
        {
            EffectData data = EffectData.GetEffCastData(id);

            if (data != null)
            {
                SkInst inst = info as SkInst;
                if (inst != null && data.m_posStr == "0")
                {
                    Register(id, info, (inst._colInfo != null ? inst._colInfo.hitPos : caster.position), Quaternion.identity);
                }
                else
                {
                    Register(id, info, caster);
                }
            }
        }
Exemplo n.º 8
0
        void OnEndAction()
        {
            if (null != skillCmpt && null != m_SkillInst && skillCmpt.IsSkillRunning(m_SkillInst.SkillID))
            {
                skillCmpt.CancelSkillById(m_SkillInst.SkillID);
            }

            motionMgr.SetMaskState(PEActionMask.SwordAttack, false);
            m_WaitInput       = false;
            m_TstAttack       = false;
            m_SkillInst       = null;
            m_AttackTargetDir = Vector3.zero;

            if (null != phyMotor)
            {
                phyMotor.CancelMoveRequest();
                phyMotor.desiredMovementDirection = Vector3.zero;
            }

            if (null != m_AttackTrigger)
            {
                m_AttackTrigger.ClearHitInfo();
                m_AttackTrigger.onHitTrigger -= OnHitTrigger;
                m_AttackTrigger.active        = false;
                m_AttackTrigger = null;
            }
            else if (null != m_AttackCol)
            {
                m_AttackCol.enabled = false;
                m_AttackCol         = null;
            }

            if (null != ikCmpt)
            {
                ikCmpt.aimActive = false;
                if (null != ikCmpt.m_IKAimCtrl)
                {
                    ikCmpt.m_IKAimCtrl.EndSyncAimAxie();
                }
            }

            anim.speed = 1f;

            DestroyEffect();
        }
Exemplo n.º 9
0
            public override GameObject Create()
            {
                if (m_EffectData == null)
                {
                    return(null);
                }

                //GameObject proto = AssetsLoader.Instance.LoadPrefabImm(data.m_path) as GameObject;
                GameObject proto = Instance.GetEffect(m_EffectData.m_path);

                if (proto != null)
                {
                    GameObject effect = Instantiate(proto, position, rotation) as GameObject;
                    //effect.AddComponent<DestroyTimer>().m_LifeTime = data.m_liveTime;
                    if (m_EffectData.m_liveTime > -PETools.PEMath.Epsilon)
                    {
                        GameObject.DestroyObject(effect, m_EffectData.m_liveTime);
                    }

                    if (m_Data != null)
                    {
                        MonoBehaviour[] behaviours = effect.GetComponentsInChildren <MonoBehaviour>();

                        foreach (MonoBehaviour behaviour in behaviours)
                        {
                            SkInst          inst     = m_Data as SkInst;
                            ISkEffectEntity skEffect = behaviour as ISkEffectEntity;
                            if (inst != null && skEffect != null && !skEffect.Equals(null))
                            {
                                skEffect.Inst = inst;
                            }
                        }
                    }

                    if (null != parent)
                    {
                        effect.transform.parent = parent;
                    }

                    OnSpawned(effect);
                    return(effect);
                }

                return(null);
            }
Exemplo n.º 10
0
        protected virtual void CastSkill(SkEntity skEntity, PECapsuleHitResult hitResult)
        {
            if (PETools.PEUtil.IsVoxelOrBlock45(skEntity))
            {
                if (m_SkillTerrainID > 0)
                {
                    SkInst skillinst = StartSkill(skEntity, m_SkillTerrainID, null, false);
                    if (skillinst != null)
                    {
                        skillinst._colInfo = hitResult;
                        skillinst.Start();
                    }
                }
            }
            else
            {
                if (m_SkillID > 0)
                {
                    SkInst skillinst = StartSkill(skEntity, m_SkillID, null, false);
                    if (skillinst != null)
                    {
                        skillinst._colInfo = hitResult;
                        skillinst.Start();
                    }
                }
            }

            if (null != onCastSkill)
            {
                onCastSkill(skEntity);
            }

            if (null != skEntity && null != onHitSkEntity)
            {
                onHitSkEntity(skEntity);
            }
        }
Exemplo n.º 11
0
        protected override void OnAnimEvent(string eventParam)
        {
            if (null != sword && motionMgr.IsActionRunning(ActionType))
            {
                string[] subStrs = eventParam.Split('_');

                bool fpEvent      = subStrs[0] == "FP";
                bool tpEvent      = subStrs[0] == "TP";
                bool specialEvent = (fpEvent || tpEvent);

                if (specialEvent && fpEvent != firstPersonAttack)
                {
                    return;
                }

                string effectEvent = specialEvent ? subStrs[1] : subStrs[0];

                switch (effectEvent)
                {
                case "AnimEffect":
                    StartEffect(Convert.ToInt32(specialEvent ? subStrs[2] : subStrs[1]));
                    break;

                case "StartAttack":
                    if (null != m_SkillInst)
                    {
                        m_SkillInst.SkipWaitPre = true;
                    }
//					m_AttackApplied = true;
                    ActiveCol(specialEvent ? subStrs[2] : subStrs[1]);
                    m_Farmcount = Time.frameCount;
                    break;

                case "WeightInputStart":
                    m_WaitInput = true;
                    break;

                case "WeightInputEnd":
                    m_WaitInput = false;
                    break;

                case "EndAttack":
                    m_WaitInput = false;
                    motionMgr.StartCoroutine(OnEndAttack());
                    break;

                case "MonsterEndAttack":
                    if (null != m_SkillInst)
                    {
                        m_SkillInst.SkipWaitAll = true;
                    }
                    break;

                case "EndAction":
                case "OnEndFullAnim":
                    if (Time.time - m_LastAtackTime >= 0.3f)                    //for recive event right after combo
                    {
                        m_EndAction  = true;
                        m_CombAttack = false;

                        if (null != m_SkillInst && null != skillCmpt)
                        {
                            skillCmpt.CancelSkillById(m_SkillInst.SkillID);
                            m_SkillInst = null;
                        }
                    }
                    break;
                }
            }
        }
Exemplo n.º 12
0
            public override GameObject Create()
            {
                if (m_EffectData == null || _bone == null)
                {
                    return(null);
                }

                //GameObject proto = AssetsLoader.Instance.LoadPrefabImm(data.m_path) as GameObject;
                GameObject proto = Instance.GetEffect(m_EffectData.m_path);

                if (proto != null)
                {
                    //StartCoroutine(InstantiateCoroutine(proto, bone, data.m_Axis, data.m_liveTime, data.m_bind));
                    Quaternion rot = Quaternion.identity;
                    if (m_EffectData.m_Rot)
                    {
                        rot = _bone.rotation;
                    }

                    GameObject effect = Instantiate(proto, _bone.position, rot) as GameObject;
                    //effect.AddComponent<DestroyTimer>().m_LifeTime = data.m_liveTime;
                    if (m_EffectData.m_liveTime > -PETools.PEMath.Epsilon)
                    {
                        GameObject.DestroyObject(effect, m_EffectData.m_liveTime);
                    }

                    if (m_EffectData.m_bind)
                    {
                        EffectLateupdateHelper lateU = effect.GetComponent <EffectLateupdateHelper>();
                        if (null != lateU)
                        {
                            lateU.Init(_bone);

                            if (m_EffectData.m_posStr == "CenterPos")
                            {
                                PeEntity entity = _rootTrans.GetComponentInParent <PeEntity>();
                                if (entity != null)
                                {
                                    lateU.local = entity.bounds.center;

                                    HitEffectScale scaleEffect = effect.GetComponent <HitEffectScale>();
                                    if (scaleEffect != null)
                                    {
                                        scaleEffect.Scale = entity.maxRadius * 2.0f;

                                        if (entity.peTrans != null)
                                        {
                                            scaleEffect.EmissionScale = entity.peTrans.bound.size;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (m_Data != null)
                    {
                        Profiler.BeginSample("GetMono");
                        MonoBehaviour[] behaviours = effect.GetComponentsInChildren <MonoBehaviour>();
                        Profiler.EndSample();

                        foreach (MonoBehaviour behaviour in behaviours)
                        {
                            SkInst          inst     = m_Data as SkInst;
                            ISkEffectEntity skEffect = behaviour as ISkEffectEntity;
                            if (inst != null && skEffect != null && !skEffect.Equals(null))
                            {
                                skEffect.Inst = inst;
                            }
                        }
                    }

                    OnSpawned(effect);
                    return(effect);
                }

                return(null);
            }
Exemplo n.º 13
0
    private void ProcDigVoxels(SkEntity caster)
    {
        SkInst      inst       = SkRuntimeInfo.Current as SkInst;
        IDigTerrain digTerrain = caster as IDigTerrain;
        IntVector4  digPos     = null;

        if (null == digTerrain || (digPos = digTerrain.digPosType) == IntVector4.Zero || (inst != null && !(inst._target is VFVoxelTerrain)))
        {
            return;
        }

        float      damage         = caster.GetAttribute((int)AttribType.Atk) * (1f + caster.GetAttribute((int)AttribType.ResDamage));
        float      radius         = caster.GetAttribute((int)AttribType.ResRange);
        float      resourceBonus  = caster.GetAttribute((int)AttribType.ResBouns);
        float      height         = caster.GetAttribute((int)AttribType.ResDamage);
        bool       returnResource = digPos.w == 1;
        IntVector3 intPos         = digPos.XYZ;

        if (!GameConfig.IsMultiMode)
        {
            //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x, intPos.y, intPos.z);
            List <VFVoxel> removeList = new List <VFVoxel>();
            DigTerrainManager.DigTerrain(intPos,
                                         damage * (returnResource ? 5f : 1f),
                                         radius,
                                         height,
                                         ref removeList, returnResource);
            if (returnResource)
            {
                bool bGetSpItems = false;
                if (caster is SkAliveEntity)
                {
                    SkAliveEntity    alive = (SkAliveEntity)caster;
                    SkillTreeUnitMgr mgr   = alive.Entity.GetCmpt <SkillTreeUnitMgr>();
                    bGetSpItems = mgr.CheckMinerGetRare();
                }
                Dictionary <int, int> itemGet = DigTerrainManager.GetResouce(removeList, resourceBonus, bGetSpItems);
                if (itemGet.Count > 0)
                {
                    List <int> itemsArray = new List <int>(itemGet.Count * 2);
                    foreach (int intemID in itemGet.Keys)
                    {
                        itemsArray.Add(intemID);
                        itemsArray.Add(itemGet[intemID]);
                    }
                    caster.Pack += itemsArray.ToArray();
                }
            }
        }
        else
        {
            if (caster != null && caster._net != null)
            {
                //VFVoxel getVoxel = VFVoxelTerrain.self.Voxels.SafeRead(intPos.x,intPos.y, intPos.z);

                bool bGetSpItems = false;
                if (returnResource)
                {
                    if (caster is SkAliveEntity)
                    {
                        SkAliveEntity    alive = (SkAliveEntity)caster;
                        SkillTreeUnitMgr mgr   = alive.Entity.GetCmpt <SkillTreeUnitMgr>();
                        bGetSpItems = mgr.CheckMinerGetRare();
                    }
                }

                DigTerrainManager.DigTerrainNetwork((SkNetworkInterface)(caster._net), intPos, damage * (returnResource ? 5f : 1f),
                                                    radius, resourceBonus, returnResource, bGetSpItems, 0.3f);
            }
        }
    }
Exemplo n.º 14
0
 public override void OnGetHurt(SkInst inst, float dmg)
 {
     base.OnGetHurt(inst, dmg);
     Entity.SendMsg(EMsg.Battle_BeAttacked, dmg, inst.Caster);
 }