Beispiel #1
0
 /// <summary>
 /// 对于有召唤物的 处理
 /// </summary>
 /// <param name="Info"></param>
 void KickSummonPet(FlyCollisionInfo Info)
 {
     if (Info.SummonPet != null)
     {
         //MapBoat._Mapboat.GetWorldPos(m_vhitJumpPos).x
         if (Info.SummonPet.transform.position.x <= m_Owner.m_thisT.position.x)
         {
             Info.HitDir = WalkDir.WALKLEFT;
         }
         else
         {
             Info.HitDir = WalkDir.WALKRIGHT;
         }
         Pet pet = Info.SummonPet.GetComponentInChildren <LifeProperty>().GetLife() as Pet;
         if (pet != null && pet.PetMoveAI is PetFly1002)
         {
             if ((pet.PetMoveAI as PetFly1002).m_bHitFloor)
             {
                 //m_vhitJumpPos = pet.m_Skin.tRoot.localPosition;
                 pet.m_Skin.tRoot.position = U3DUtil.SetY(pet.m_Skin.tRoot.position, m_Owner.m_Skin.tRoot.position.y);
                 (pet.PetMoveAI as PetFly1002).KickBomb(Info.HitDir);
             }
             else
             {
                 Info.m_flyFallStandState = AnimatorState.FlyFallStand00200;
                 Object.Destroy(Info.SummonPet);
             }
         }
     }
 }
Beispiel #2
0
    /// <summary>
    /// 炮战撞击后的处理 临时屏蔽掉
    /// </summary>
    /// <param name="Info"></param>
    public void FireCombatOver(FlyCollisionInfo Info)
    {
        if (Info == null)
        {
            return;
        }
        GetFlyInfo();
#if UNITY_EDITOR_LOG
        FileLog.write(m_Owner.SceneID, "FireCombatOver  " + CurrentAction);
#endif
        if (CurrentAction is GridActionDophineFly)
        {
            CurrentAction.SetDone();
        }
        if (CurrentAction == null || (CurrentAction is FireActionCmd) == false)
        {
            CurrentAction = FireActionCmdFactory.Create(m_Owner, m_FlyDir, m_Owner.m_Attr.Flyspeed, m_bDolphineFly);
            if (Info.flyCollisionAction == FlyCollisionAction.FlyDirectional || Info.flyCollisionAction == FlyCollisionAction.PauseContinueFlyDirectional)
            {
                CurrentAction.m_Duration = 600;
            }
            FireActionCmd FireAction = CurrentAction as FireActionCmd;
            FireAction.SetCollisionInfo(Info, HitJump, FallEnd);
            return;
        }
        else if (CurrentAction is FireActionCmd)
        {
            FireActionCmd FireAction = CurrentAction as FireActionCmd;
            FireAction.SetCollisionInfo(Info, HitJump, FallEnd);
            if (Info.flyCollisionAction == FlyCollisionAction.FlyDirectional || Info.flyCollisionAction == FlyCollisionAction.PauseContinueFlyDirectional)
            {
                CurrentAction.m_Duration = 600;
            }
        }
    }
Beispiel #3
0
    /// <summary>
    /// 跳跃出生Action,该状态下不拥有炮战技能 临时屏蔽掉
    /// </summary>
    public void HitJump(FlyCollisionInfo Info)
    {
        m_Owner.m_Skill = null;
        m_Owner.m_Skin.EnableColider(ColiderType.Fire, false);
        MapGrid mg = MapGrid.GetMG(Info.FlyfallSTandGridPos);

        if (mg == null)
        {
            Debug.Log("获取格子失败" + Info.FlyfallSTandGridPos);
            return;
        }

        Int2    pos = Int2.zero;
        Vector3 vHitLifeMGridPos = MapGrid.GetMG(Info.FlyfallSTandGridPos).pos;

        m_vhitJumpPos = new Vector3(Info.vhitPos.x, vHitLifeMGridPos.y, vHitLifeMGridPos.z);
        Int2  BornPos        = new Int2(Info.FlyfallSTandGridPos.Unit, Info.FlyfallSTandGridPos.Layer);
        float fGridDisatance = Vector3.Distance(m_vhitJumpPos, vHitLifeMGridPos);

        // Info.HitDir = Info.bLeft ? WalkDir.WALKRIGHT : WalkDir.WALKLEFT;

        if (fGridDisatance > 0)
        {
            BornPos.Unit += (int)(fGridDisatance / MapGrid.m_width);
            mg            = MapGrid.GetMG(BornPos);
            if (mg == null)
            {
                BornPos = new Int2(Info.FlyfallSTandGridPos.Unit, Info.FlyfallSTandGridPos.Layer);
            }
        }

        if (Info.m_bFlyFallStandSmooth)
        {
            m_vhitJumpPos = MapGrid.GetMG(BornPos).pos;
        }

        KickSummonPet(Info);

        if (m_bDolphineFly)
        {
            Info.m_flyFallStandState = AnimatorState.FlyFallStand00200;
        }
        else
        {
            RepulseOthers(MapGrid.GetMG(BornPos));
        }
        RolePos = BornPos;

#if UNITY_EDITOR_LOG
        FileLog.write(m_Owner.SceneID, "Born  " + RolePos);
#endif
        CurrentAction = BornActionCmdFactory.Create(m_Owner, m_vhitJumpPos, Info.HitDir, m_Owner.ActionFlyToWalk, Info.m_flyFallStandState, Info.m_bFlyFallStandSmooth);
    }
Beispiel #4
0
    public override void ColliderProc(Collision collision)
    {
        if (m_bBeKicked)
        {
            return;
        }
        LifeProperty lp = collision.gameObject.GetComponent <LifeProperty>();

        if (lp == null)
        {
            return;
        }
        IggFloor floor = collision.gameObject.GetComponent <LifeProperty>().GetLife() as IggFloor;

        if (floor != null)
        {
            m_fLiveCounter = 0;
            if (floor.isDead)
            {
                return;
            }

            if (m_Owner.m_Skill != null)
            {
                Life             lifeM = m_Owner.GetCollisionGo(collision);
                FlyCollisionInfo Info  = new FlyCollisionInfo();
                (m_Owner.m_Skill as FireSkill).FlyInfo = Info;
                Info = (m_Owner.m_Skill as FireSkill).FireTrigger(collision, lifeM, m_Owner, true, true, m_Owner.m_listCollisionGoID.Count, FlyDir.Bottom);
                if (!floor.isDead && lifeM != null)
                {
                    m_fFallSpeed = 0;
                    m_Owner.m_Skin.tRoot.parent        = BattleEnvironmentM.GetLifeMBornNode(true);
                    m_Owner.m_Skin.tRoot.localPosition = U3DUtil.SetZ(m_Owner.m_Skin.tRoot.localPosition, 0.2f);
                    //设置蹦蹦的Y位置
                    m_Owner.m_Skin.tRoot.position = U3DUtil.SetY(m_Owner.m_Skin.tRoot.position, floor.GetMapGrid().WorldPos.y);
                    m_bHitFloor = true;
                    m_petState  = Pet1002State.waitKick;
                    m_flyState  = AnimatorState.FlyAttack01100;
                }
            }
        }
    }
Beispiel #5
0
 /// <summary>
 /// 设置炮战信息
 /// </summary>
 /// <param name="FlyDir">发生炮战前的飞行方向</param>
 /// <param name="FlySpeed">发生炮战前的飞行速度</param>
 public virtual void SetCollisionInfo(FlyCollisionInfo Info, EventCallBack BornEvent, DoneCallBack FallEndEvent)
 {
             #if UNITY_EDITOR_LOG
     FileLog.write(m_LifePrent.SceneID, "SetCollisionInfo");
             #endif
     if (Info == null)
     {
         return;
     }
     m_CollisionInfo = Info;
     m_BornEvent     = BornEvent;
     m_FallEndEvent  = FallEndEvent;
             #if UNITY_EDITOR_LOG
     FileLog.write(m_LifePrent.SceneID, m_CollisionInfo.flyCollisionAction + "," + m_CollisionInfo.FlyfallSTandGridPos);
             #endif
     if (m_CollisionInfo.flyCollisionAction == FlyCollisionAction.FlyDirectional)
     {
         RolePlayAnimation(AnimatorState.Fly00000);
     }
     else if (m_CollisionInfo.flyCollisionAction == FlyCollisionAction.PauseContinueFlyDirectional)
     {
         PauseContinueFlight(m_CollisionInfo.bVertical);
     }
     else if (m_CollisionInfo.flyCollisionAction == FlyCollisionAction.DropInBoat)
     {
         Info.bVertical = false;
         ForceRoleFallDir(Info.droppos);
     }
     else if (m_CollisionInfo.flyCollisionAction == FlyCollisionAction.DropOutBoat)
     {
         HitFall(1.0f, m_CollisionInfo.bLeft, Info.droppos);
     }
     else if (m_CollisionInfo.flyCollisionAction == FlyCollisionAction.FlyFallStand)
     {
         FlyReboundAction(Info.bVertical);
         if (m_BornEvent != null)
         {
             m_BornEvent(m_CollisionInfo);
         }
     }
 }
Beispiel #6
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        //Info.bVertical = m_bVertical;
        Info.FlyfallSTandGridPos = GetMapPos();
        Info.lifemCollision      = this;
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        bool result = ApplyDamage(sInfo, null);

        if (!m_isDead)
        {
            Info.FlyfallSTandGridPos = m_Attr.Pos;
            Info.bVertical           = false;
            Info.flyCollisionAction  = FlyCollisionAction.DropInBoat;
            //Debug.Log("not dead " + Info.flyCollisionAction + "," + Info.FlyfallSTandGridPos);
            Info.bApplyDamage = false;
        }
        else
        {
            Info.FlyfallSTandGridPos = m_Attr.Pos;
            Info.bVertical           = false;
            Info.flyCollisionAction  = FlyCollisionAction.FlyDirectional;
            //Debug.Log(" dead " + Info.flyCollisionAction + "," +Info.FlyfallSTandGridPos);
            Info.bApplyDamage = false;
        }
    }
Beispiel #7
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        Role.WakeEnemy(this);
        Info.bVertical           = true;
        Info.bLeft               = true;
        Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
        Info.lifemCollision      = this;
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        ApplyDamage(sInfo, null);
        if (isDead)   //破了
        //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003021", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
        {
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000291", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, 90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            //go.transform.Rotate(new Vector3(0,0,90),Space.Self);
            Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
            Info.bApplyDamage       = true;
            //EffectM.LoadEffect(EffectM.sPath, "zamen_02", transform.position, null);
        }
        else          //没破
        {
            shake();
            //GameObject go = SkillEffects._instance.LoadEffect("effect/prefab/", "1003011", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, 1f);
            GameObjectActionExcute     gae        = EffectM.LoadEffect(EffectM.sPath, "2000281", MapGrid.GetMG(Info.FlyfallSTandGridPos).WorldPos, BattleEnvironmentM.GetLifeMBornNode(true));
            GameObjectActionEffectInit effectinit = new GameObjectActionEffectInit();
            effectinit.SetRotation(new Vector3(0, 0, 90));
            gae.AddAction(effectinit);
            GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
            gae.AddAction(ndEffect);
            //go.transform.Rotate(new Vector3(0,0,90),Space.Self);

            /*if (flydir == FlyDir.Left || flydir == FlyDir.LeftTop || flydir == FlyDir.LeftBottom)
             * {
             *  Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             *  //设置左右板信息,并非移动方向
             *  Info.HitDir = WalkDir.WALKLEFT;
             *  Info.bApplyDamage = false;
             *
             * }
             * else if (flydir == FlyDir.Right || flydir == FlyDir.RightTop || flydir == FlyDir.RightBottom || flydir == FlyDir.Top || flydir == FlyDir.Bottom)
             * {
             *  Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             *  Info.bApplyDamage = false;
             * }
             * else
             * {
             *  if(m_DefenceColider.IsInRightCollider(collision.collider))
             *  {
             *          Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             *          Info.bApplyDamage = false;
             *  }
             *  else if(m_DefenceColider.IsInLeftCollider(collision.collider))
             *  {
             *          Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             *          //设置左右板信息,并非移动方向
             *          Info.HitDir = WalkDir.WALKLEFT;
             *          Info.bApplyDamage = false;
             *  }
             * }*/

            Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
            for (int i = Layer; i >= 0; i--)
            {
                MapGrid g = MapGrid.GetMG(i, StartUnit);
                if (g != null && (g.Type != GridType.GRID_HOLE && g.Type != GridType.GRID_HOLESTAIR))
                {
                    Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                    break;
                }
            }

            Info.droppos = new Vector3(-1f, 0, 0);
            GameObjectActionExcute       gae1      = EffectM.LoadEffect(EffectM.sPath, "zamen_01", m_thisT.position, null);
            GameObjectActionDelayDestory ndEffect1 = new GameObjectActionDelayDestory(1f);
            gae1.AddAction(ndEffect1);
        }
    }
Beispiel #8
0
    /// <summary>
    /// 撞击处理
    /// </summary>
    /// <param name="Damage">撞击伤害</param>
    /// <param name="dir">撞击方向</param>
    /// <param name="Info">返回撞击信息</param>
    /// <returns></returns>
    public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
    {
        Role.WakeEnemy(this);
        Info.bVertical           = true;
        Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
        SkillReleaseInfo sInfo = new SkillReleaseInfo();

        sInfo.m_InterruptSkill = false;
        sInfo.m_MakeStatus     = new List <StatusType> ();
        sInfo.m_bImmunity      = false;
        sInfo.m_Damage         = Damage;
        sInfo.Result           = AttackResult.Fire;
        ApplyDamage(sInfo, null);
        if (isDead)   //破了
        {
            Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
            Info.bApplyDamage       = true;
            EffectM.LoadEffect(EffectM.sPath, "zamen_02", m_thisT.position, null);
        }
        else          //没破
        {
            Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
            Info.bApplyDamage       = false;
            GameObjectActionExcute       gae1      = EffectM.LoadEffect(EffectM.sPath, "zamen_01", m_thisT.position, null);
            GameObjectActionDelayDestory ndEffect1 = new GameObjectActionDelayDestory(1f);
            gae1.AddAction(ndEffect1);
        }
    }
Beispiel #9
0
 public void  SetFlyCollisionInfo(FlyCollisionInfo info)
 {
     m_FlyCollisionInfo = info;
 }
Beispiel #10
0
 public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
 {
 }
Beispiel #11
0
 /// <summary>
 /// 撞击处理
 /// </summary>
 /// <param name="Damage">撞击伤害</param>
 /// <param name="dir">撞击方向</param>
 /// <param name="Info">返回撞击信息</param>
 /// <returns></returns>
 public override void CollisionProcByFire(Collision collision, int Damage/*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir)
 {
     //惊醒防御方
     Role.WakeEnemy(this);
     Info.bVertical = m_bVertical;
     Info.FlyfallSTandGridPos = new Int2(StartUnit, Layer);
     Info.lifemCollision = this;
     
     SkillReleaseInfo sInfo = new SkillReleaseInfo();
     sInfo.m_InterruptSkill = false;
     sInfo.m_MakeStatus = new List<StatusType> ();
     sInfo.m_bImmunity = false;
     sInfo.m_Damage = Damage;
     sInfo.Result = AttackResult.Fire;
     ApplyDamage(sInfo, null);
     
     //........................................................................
     // 需要继续查..........................
     if (m_DefenceColider == null) {
         isDead = true;
     }
     //........................................................................
     
     if (isDead) { //穿了
     
         GameObjectActionExcute gae = EffectM.LoadEffect(EffectM.sPath, "2000291", collision.contacts[0].point, BattleEnvironmentM.GetLifeMBornNode(true));
         GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
         gae.AddAction(ndEffect);
         Info.flyCollisionAction = FlyCollisionAction.PauseContinueFlyDirectional;
         Info.bApplyDamage = true;
         MakeHole();
     } else {
         if (Info.bReleaseSkill) {
             shake(collision.contacts[0].point);
             SetDamageTexture();
             GameObjectActionExcute gae = EffectM.LoadEffect(EffectM.sPath, "2000281", collision.contacts[0].point, BattleEnvironmentM.GetLifeMBornNode(true));
             GameObjectActionDelayDestory ndEffect = new GameObjectActionDelayDestory(1f);
             gae.AddAction(ndEffect);
         }
         if (flydir == FlyDir.LeftTop || flydir == FlyDir.RightTop || flydir == FlyDir.Top) {
             if (m_FloorType == FloorType.bottom) {
                 Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
             } else {
                 Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
             }
             
             Info.bApplyDamage = false;
         } else if (flydir == FlyDir.LeftBottom || flydir == FlyDir.RightBottom || flydir == FlyDir.Bottom) {
             Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
             Info.bApplyDamage = false;
         } else {
             if (m_FloorType == FloorType.top) {
                 Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
                 Info.bApplyDamage = false;
             } else if (m_DefenceColider.IsInBottomCollider(collision.collider)) {
                 if (m_FloorType == FloorType.bottom) {
                     Info.flyCollisionAction = FlyCollisionAction.DropOutBoat;
                 } else {
                     Info.flyCollisionAction = FlyCollisionAction.DropInBoat;
                 }
                 Info.bApplyDamage = false;
             } else if (m_DefenceColider.IsInTopCollider(collision.collider)) { //从上往下撞
                 Info.flyCollisionAction = FlyCollisionAction.FlyFallStand;
                 Info.bApplyDamage = false;
             }
         }
     }
 }
Beispiel #12
0
    /// <summary>
    /// 飞行角色的碰撞处理
    /// </summary>
    public override void ColliderProc(Collision collision)
    {
        //NGUIUtil.DebugLog("flyCollisionAction=" + m_FlyInfo.flyCollisionAction, "red");

        if (m_FlyInfo != null)   //当掉落船外后不再处理碰撞
        {
            if (m_FlyInfo.flyCollisionAction == FlyCollisionAction.DropOutBoat)
            {
                return;
            }
        }
        FlyDir dir = FlyDir.none;

        if (CurrentAction is GridActionCmdFly)
        {
            dir = (CurrentAction as GridActionCmdFly).GetDir();
        }
        else if (CurrentAction is GridActionDophineFly)
        {
            dir = (CurrentAction as GridActionDophineFly).GetDir();
        }
        else if (CurrentAction is FireActionCmd)
        {
            dir = (CurrentAction as FireActionCmd).GetDir();
        }
        if (m_bDolphineFly && (dir == FlyDir.Top || dir == FlyDir.LeftTop || dir == FlyDir.RightTop))
        {
            return;
        }
        Life lifeM = GetCollisionGo(collision);

        if (lifeM == null || lifeM.m_Core.m_Camp == LifeMCamp.ATTACK)
        {
            return;
        }

#if UNITY_EDITOR_LOG
        FileLog.write(m_Owner.SceneID, "ColliderProc  " + collision.gameObject + lifeM.SceneID + ",  " + collision.contacts[0].point + "," + dir);
#endif
        //计算撞击方向
        Vector3 target = collision.contacts[0].point;
        Vector3 start  = m_Owner.m_thisT.position;
        Vector2 HitDir = new Vector2(target.x - start.x, target.y - start.y);

        bool bReleaseSkill = true;
        bReleaseSkill = !m_bDolphineFly;  //海豚顶飞,炮战技能不释放
        bool bApplyDamage = bReleaseSkill;
        if (m_Owner.m_Skill != null)
        {
            if (m_bDolphineFly == false)
            {
                bApplyDamage = m_FlyInfo.bApplyDamage;
            }
            (m_Owner.m_Skill as FireSkill).FlyInfo = m_FlyInfo;
        }
        Vector3 vHitWorldPos = new Vector3(target.x, target.y, target.z);

        HitSound(lifeM, m_Owner);
        HitShakeBoat();
#if UNITY_EDITOR_LOG
        FileLog.write(m_Owner.SceneID, "ColliderProc  " + dir + "," + CurrentAction);
#endif
        FlyCollisionInfo Info = m_Owner.FireTrigger(collision, lifeM, m_Owner, bReleaseSkill, bApplyDamage, m_listCollisionGoID.Count, dir);
        if (Info != null && Info.lifemCollision != null)
        {
            Info.HitDir  = HitDir.x > 0 ? WalkDir.WALKRIGHT : WalkDir.WALKLEFT;
            Info.vhitPos = BattleEnvironmentM.World2LocalPos(target);
            FireCombatOver(Info);
        }
    }