Esempio n. 1
0
 /// <summary>
 /// 部件逻辑
 /// </summary>
 public void RunPartsAI()
 {
     for (int i = 0; i < Ship.PartsList.Count; ++i)
     {
         var part      = Ship.PartsList[i];
         var enemyList = TargetSelector.FindTarget(part, CampType);
         if (enemyList.Count == 0)
         {
             part.PartState = PartState.Idle;
             continue;
         }
         part.PartState = PartState.Guard;
         proto.PartFireEvent partFireEvent = new proto.PartFireEvent();
         partFireEvent.partid = part.Id;
         for (int enemyIndex = 0; enemyIndex < enemyList.Count; ++enemyIndex)
         {
             EnemyInfo enemyInfo = enemyList[enemyIndex];
             if (enemyInfo.InAttackRange)
             {
                 part.PartState = PartState.Attack;
             }
             if (!part.IsCoolDownFinished())
             {
                 continue;
             }
             part.StartCoolDown();
             partFireEvent.add_fireinfo(PartFire(part, enemyInfo.EnemyShip));
         }
         if (partFireEvent.fireinfo_size() != 0)
         {
             BehaviorMsg_.add_partfireevent(partFireEvent);
         }
     }
 }
Esempio n. 2
0
    /// <summary>
    /// 战斗回调
    /// </summary>
    /// <param name="obj"></param>
    private void BattleSys_EventOnFightFrameInfo(proto.S2CFightFrameInfo obj)
    {
        if (UserStatusPanel.Instance != null)
        {
            UserStatusPanel.Instance.ShowTime(obj.fighttick / 1000);
        }

        for (int i = 0; i < obj.underattacklist_size(); i++)
        {
            proto.UnderAttackInfo underAttackInfo = obj.underattacklist(i);
            TeamDisplay           display         = GetTeamDisplay(underAttackInfo.unitid);
            display.ModifyHp(underAttackInfo);
        }

        for (int i = 0; i < obj.behaviorsequences_size(); i++)
        {
            proto.UnitBehavior unit    = obj.behaviorsequences(i);
            TeamDisplay        display = GetTeamDisplay(unit.unitid);
            if (unit.breakaway)
            {
                display.BreakAway();
                continue;
            }

            if (unit.has_position())
            {
                display.Move(((float)unit.position.posx) / 10000f, ((float)unit.position.posz) / 10000f, unit.position.movetype);
            }
            // 部件开火信息表
            for (int eventIndex = 0; eventIndex < unit.partfireevent_size(); eventIndex++)
            {
                proto.PartFireEvent fireEvent = unit.partfireevent(eventIndex);
                if (fireEvent == null)
                {
                    Debug.LogError("PartFireEvent is null");
                    continue;
                }
                display.ShipFire(fireEvent);
            }
        }

        for (int i = 0; i < obj.useskill_size(); i++)
        {
            proto.UseSkill skill = obj.useskill(i);
            if (skill.skillstage == Def.SkillStage.Sing && EventOnSkillSing != null)
            {
                EventOnSkillSing(skill.skillid);
            }
            else if (skill.skillstage == Def.SkillStage.Casting && EventOnSkillTrigger != null)
            {
                EventOnSkillTrigger(skill.skillid);
            }
            TeamDisplay display = GetTeamDisplay(skill.unitid);
            display.UseSkill(skill);
        }
    }
Esempio n. 3
0
    /// <summary>
    /// 舰船开火
    /// </summary>
    /// <param name="skill"></param>
    public void ShipFire(proto.PartFireEvent fireEvent)
    {
        if (Trans_ == null)
        {
            return;
        }
        Part part = GetPart(fireEvent.partid);

        if (part == null)
        {
            Debug.LogError("can't find part:" + fireEvent.partid);
            return;
        }
        CastPartFire(fireEvent, part);
    }
Esempio n. 4
0
 public void ShipFire(proto.PartFireEvent fireEvent)
 {
     if (ShipList_.Count == 1)
     {
         ShipList_[0].ShipFire(fireEvent);
         return;
     }
     for (int i = 0; i < ShipList_.Count; i++)
     {
         if (ShipList_[i] == null)
         {
             continue;
         }
         Global.Instance.StartCoroutine(ShipFireIE(ShipList_[i], fireEvent));
     }
 }
Esempio n. 5
0
 /// <summary>
 /// 部件开火
 /// </summary>
 /// <param name="fireEvent"></param>
 /// <param name="part"></param>
 private void CastPartFire(proto.PartFireEvent fireEvent, Part part)
 {
     ShowCast(part);
     // 范围攻击,只生成一个子弹
     if (part.partType == SpellType.AOE)
     {
         List <BulletTarget> targetList = new List <BulletTarget>();
         for (int i = 0; i < fireEvent.fireinfo_size(); i++)
         {
             proto.PartFireInfo info   = fireEvent.fireinfo(i);
             TeamDisplay        target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid);
             if (target == null)
             {
                 continue;
             }
             BulletTarget bulletTarget = new BulletTarget();
             bulletTarget.delayFrame = info.delayframe;
             bulletTarget.Target     = target;
             targetList.Add(bulletTarget);
         }
         ClientParts parts = Team_.GetPartsByID(part.partID);
         ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero);
         return;
     }
     // 个体攻击,每个对象都生成子弹
     for (int i = 0; i < fireEvent.fireinfo_size(); i++)
     {
         proto.PartFireInfo info   = fireEvent.fireinfo(i);
         TeamDisplay        target = BattleSceneDisplayManager.Instance.GetTeamDisplay(info.targetid);
         if (target == null)
         {
             continue;
         }
         List <BulletTarget> targetList   = new List <BulletTarget>();
         BulletTarget        bulletTarget = new BulletTarget();
         bulletTarget.delayFrame = info.delayframe;
         bulletTarget.Target     = target;
         targetList.Add(bulletTarget);
         ClientParts parts = Team_.GetPartsByID(part.partID);
         ShowBullet(parts, targetList, part.partType, part.attackPoint, part.bulletPath, part.hitEffect, Vector3.zero);
     }
 }
Esempio n. 6
0
    private IEnumerator ShipFireIE(ShipDisplay display, proto.PartFireEvent fireEvent)
    {
        yield return(new WaitForSeconds(Random.Range(0f, 1f)));

        display.ShipFire(fireEvent);
    }