/// <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); } } } }
/// <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; } } }
/// <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); }
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; } } } }
/// <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); } } }
/// <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; } }
/// <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); } }
/// <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); } }
public void SetFlyCollisionInfo(FlyCollisionInfo info) { m_FlyCollisionInfo = info; }
public override void CollisionProcByFire(Collision collision, int Damage /*,Vector2 dir*/, ref FlyCollisionInfo Info, FlyDir flydir) { }
/// <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; } } } }
/// <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); } }