// GET: /AccountInfo/
        public ActionResult AccountInformation(string id)
        {
            Response.Cookies.Remove("UserId");
//
            Account            a           = logic.Get(id);
            List <Membership>  mems        = a.Memberships.ToList();
            List <TeamDisplay> teamDisplay = new List <TeamDisplay>();

            foreach (Membership m in mems)
            {
                if (m.Status.IsMember())
                {
                    Team        team = tLogic.Get(m.TeamId);
                    TeamDisplay td   = new TeamDisplay(team.Name, m.Status, team.Id);
                    teamDisplay.Add(td);
                }
            }
            AccountInformationViewModel aivm = new AccountInformationViewModel();

            aivm.Birthdate      = a.Birthdate;
            aivm.EarnedBadges   = EarnedBadges(a);
            aivm.FullName       = a.FullName;
            aivm.Height         = a.Height;
            aivm.PictureUrl     = a.PictureUrl;
            aivm.PreferredName  = a.PreferredName;
            aivm.Sex            = a.Sex;
            aivm.Teams          = teamDisplay;
            aivm.UnearnedBadges = UnearnedBadges(a);
            aivm.Weight         = a.Weight;
            aivm.Zip            = a.Zip;
            return(View(aivm));
        }
Example #2
0
    /// <summary>
    /// 最近的建筑
    /// </summary>
    /// <param name="list"></param>
    /// <returns></returns>
    private static List <TeamDisplay> GetClosestBuilding(Transform shipTrans, List <TeamDisplay> list)
    {
        List <TeamDisplay> result  = new List <TeamDisplay>();
        List <TeamDisplay> all     = GetAllBuilding(list);
        float       resultDistance = float.MaxValue;
        float       distance       = float.MaxValue;
        TeamDisplay trans          = null;

        for (int i = 0; i < list.Count; i++)
        {
            Transform tempTrans = all[i].GetTeamGo().transform;
            // 获取距离最远的
            distance = GetDistance(shipTrans, tempTrans);
            if (resultDistance > distance)
            {
                resultDistance = distance;
                trans          = all[i];
            }
        }
        if (trans != null)
        {
            result.Add(trans);
        }
        return(result);
    }
Example #3
0
    /// <summary>
    /// 能量最低的船
    /// </summary>
    /// <param name="list"></param>
    /// <returns></returns>
    private static List <TeamDisplay> GetEnergyLowestShip(List <TeamDisplay> list)
    {
        List <TeamDisplay> result = new List <TeamDisplay>();
        float       tempValue     = float.MaxValue;
        TeamDisplay trans         = null;

        for (int i = 0; i < list.Count; i++)
        {
            // 获取能量最低的
            ClientShip ship = list[i].GetShip();
            if (ship == null)
            {
                continue;
            }
            if (tempValue > ship.Energy)
            {
                tempValue = ship.Energy;
                trans     = list[i];
            }
        }
        if (trans != null)
        {
            result.Add(trans);
        }
        return(result);
    }
Example #4
0
    public static BattleShipInfo Create(Transform parentTrans, TeamDisplay team, string name, float radius, bool isPlayer, bool isAdvancedShip)
    {
        GameObject go = new GameObject("BattleShipInfo_" + (isPlayer ? "Player" : "Enemy"));

        go.transform.parent           = UIManager.SceneUICanvas.transform;
        go.transform.localPosition    = new Vector3(99999, 99999, 99999);
        go.transform.localEulerAngles = Vector3.zero;
        go.transform.localScale       = Vector3.one;
        string prefabName;

        if (isPlayer)
        {
            prefabName = isAdvancedShip ? "battleshipinfo_ad_p" : "battleshipinfo_low_p";
        }
        else
        {
            prefabName = isAdvancedShip ? "battleshipinfo_ad_e" : "battleshipinfo_low_e";
        }

        Global.CreateUI(prefabName, go);
        BattleShipInfo uiScript = go.AddComponent <BattleShipInfo>();

        uiScript.Init(parentTrans, team, name, radius);
        return(uiScript);
    }
Example #5
0
    private static bool IsInSkillRange(Transform trans1, TeamDisplay ship2, proto.SkillReference reference)
    {
        int       vol    = ship2.GetShip().Reference.vol;
        Transform trans2 = ship2.GetTeamGo().transform;

        return(IsInSkillRange(trans1, trans2, reference, vol));
    }
Example #6
0
    private IEnumerator ShowAOE(List <BulletTarget> targetList, Vector3 position, ClientSkill skill)
    {
        if (skill.Prop.skill_select_type != Def.SkillSelectType.PlayerSelect)
        {
            StartCoroutine(UpdatePosition());
            CoroutineJoin join = new CoroutineJoin(AssetLoader.Instance);
            for (int i = 0; i < targetList.Count; i++)
            {
                BulletTarget bulletTarget = targetList[i];
                TeamDisplay  target       = bulletTarget.Target;
                if (target == null)
                {
                    continue;
                }
                join.StartSubtask(ShowHurtEffect(target, bulletTarget.delayFrame));
            }
            yield return(join.WaitForAll());
        }
        else
        {
            Global.ShowHurtEffect(null, HurtEffect_, position);
        }
        yield return(null);

        StartCoroutine(WaitAndDestroy(true, 2f));
    }
Example #7
0
    /// <summary>
    /// 在list里找到和shipTrans最远的船
    /// </summary>
    /// <param name="shipTrans"></param>
    /// <param name="list"></param>
    /// <returns></returns>
    private static List <TeamDisplay> GetFarthestShip(Transform shipTrans, List <TeamDisplay> list)
    {
        List <TeamDisplay> result = new List <TeamDisplay>();

        if (list == null)
        {
            return(result);
        }
        float       resultDistance = 0;
        float       distance       = 0;
        TeamDisplay trans          = null;

        for (int i = 0; i < list.Count; i++)
        {
            Transform tempTrans = list[i].GetTeamGo().transform;
            // 获取距离最远的
            distance = GetDistance(shipTrans, tempTrans);
            if (resultDistance < distance)
            {
                resultDistance = distance;
                trans          = list[i];
            }
        }
        if (trans != null)
        {
            result.Add(trans);
        }
        return(result);
    }
Example #8
0
    private IEnumerator ShowHurtEffect(TeamDisplay targetTeam, float delayFrame)
    {
        yield return(new WaitForSeconds(FightServiceDef.FRAME_INTERVAL_TIME_F * delayFrame));

        ShipDisplay targetShip = targetTeam.GetHurtShip();

        if (targetTeam == null)
        {
            yield break;
        }
        if (AttackTrans_ == null)
        {
            yield break;
        }
        if (targetShip == null)
        {
            yield break;
        }
        Transform trans = targetShip.GetTransformByName(targetShip.GetHitPoint(AttackTrans_.position.x, SpellType_));

        if (trans == null)
        {
            trans = targetShip.Trans;
        }
        Global.ShowHurtEffect(trans, HurtEffect_, trans.position);
    }
Example #9
0
    /// <summary>
    /// 通过id得到所属队伍
    /// </summary>
    /// <param name="fightID"></param>
    /// <returns></returns>
    public TeamDisplay GetTeamDisplay(int fightID)
    {
        Dictionary <int, TeamDisplay> list = GetTeamDisplayList(fightID);
        TeamDisplay result = null;

        list.TryGetValue(fightID, out result);
        return(result);
    }
Example #10
0
    private IEnumerator CreateShip(bool bPlayer, ClientShip clientShip)
    {
        if (clientShip == null)
        {
            Debug.LogError("can't create,clientShip is null");
            yield break;
        }
        Ship ship = AssetLoader.GetShipDefine(clientShip.Reference.model_res);

        if (ship == null)
        {
            Debug.LogError("can't create ship,id is:" + clientShip.Reference.id + ",modelres is:" + clientShip.Reference.model_res);
            yield break;
        }

        TeamDisplay       display  = new TeamDisplay();
        List <GameObject> shipList = new List <GameObject>();
        int stackNum = 1;

        if (clientShip.Reference.stack)
        {
            stackNum = clientShip.Reference.stack_num;
        }
        for (int i = 0; i < stackNum; i++)
        {
            GameObject shipGo = AssetLoader.GetInstantiatedGameObject(ship.ModelPath);
            if (!shipGo)
            {
                yield return(StartCoroutine(AssetLoader.PreloadShipModel(ship)));

                shipGo = AssetLoader.GetInstantiatedGameObject(ship.ModelPath);
            }
            AssetLoader.ReplaceShader(shipGo);
            shipGo.name = (bPlayer ? "PlayerShip" : "EnemyShip") + clientShip.InFightID;
            if (clientShip.IsCommanderShip())
            {
                shipGo.name += "_Commander";
            }
            AssetLoader.SetShowParts(ship, shipGo);

            Animation animation = shipGo.GetComponent <Animation>();
            if (animation != null)
            {
                animation.cullingType = AnimationCullingType.AlwaysAnimate;
            }
            shipList.Add(shipGo);
        }

        display.Init(clientShip, ship, shipList, bPlayer);
        if (bPlayer)
        {
            PlayerTeamDisplayList.Add(clientShip.InFightID, display);
        }
        else
        {
            EnemyTeamDisplayList.Add(clientShip.InFightID, display);
        }
    }
Example #11
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);
        }
    }
Example #12
0
    /// <summary>
    /// 检查旗舰的范围显示是否需要重置
    /// </summary>
    public static void CheckCommanderAttackRange()
    {
        TeamDisplay team = GetCommanderShipTeam();

        if (team == null)
        {
            return;
        }
        team.CheckSkillRange();
    }
Example #13
0
    public void FoldSkillPanel()
    {
        TeamDisplay display = BattleSceneDisplayManager.GetCommanderShipTeam();

        if (display == null)
        {
            return;
        }
        PanelAnim_.SetTrigger("skill_panel_hide");
        BattleSceneDisplayManager.ResetSkill();
    }
Example #14
0
    /// <summary>
    /// 显示旗舰技能范围
    /// </summary>
    public static void ShowCommanderShipSkillRange()
    {
        TeamDisplay team = GetCommanderShipTeam();

        if (team == null)
        {
            return;
        }
        team.ShowRange(false);
        team.ShowSkillRange(true, SelectedSkillIndex);
        Instance.CheckCommanderShipSkillTarget();
    }
Example #15
0
    void accept()
    {
        Character a = currentCharacter;

        Team.team[Team.nbSelected] = a;
        TeamDisplay t = GameObject.Find("Team").GetComponent <TeamDisplay>();

        t.AddCharacter(Team.nbSelected);
        Team.nbSelected += 1;
        currentPlayer.GetComponent <PlayerAnimation>().accept();

        // change light for 1.5 sec
        StartCoroutine(changeColor(new Color32(50, 150, 30, 255)));
        // TODO: add noise
    }
Example #16
0
    /// <summary>
    /// ship是否在pos为圆心的范围内
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="ship"></param>
    /// <param name="skill"></param>
    /// <returns></returns>
    private static bool IsInSkillRange(Vector3 pos, TeamDisplay ship, ClientSkill skill)
    {
        proto.SkillReference reference = skill.Prop;
        int shapType = reference.shape_type;

        if (shapType != Def.ShapeType.Circle)
        {
            return(false);
        }
        int angle = 360;
        int range = reference.aoe_range;
        int vol   = ship.GetShip().Reference.vol;

        return(IsInSector(pos, ship.GetTeamGo().transform, angle, range, vol));
    }
Example #17
0
    /// <summary>
    /// 显示trans所属队伍的攻击范围,关闭所属队伍列表内其他队伍的攻击范围
    /// </summary>
    /// <param name="trans"></param>
    private void ShowRange(Transform trans)
    {
        Dictionary <int, TeamDisplay> teamList = GetTeamDisplayList(trans);

        ResetRange(teamList);
        if (trans == null)
        {
            return;
        }
        TeamDisplay display = GetTeamDisplay(trans);

        if (display != null)
        {
            display.ShowRange(true);
        }
    }
Example #18
0
    /// <summary>
    /// 根据技能配置,距离,角度得到最终的目标表
    /// </summary>
    /// <param name="shipTrans"></param>
    /// <param name="skill"></param>
    /// <returns></returns>
    public static List <TeamDisplay> FindSkillTarget(TeamDisplay ship, ClientSkill skill)
    {
        // 目标表
        List <TeamDisplay> result = new List <TeamDisplay>();

        if (skill.Prop.cast_target_type != Def.CastTargetType.Self)
        {
            Dictionary <int, TeamDisplay> playerList = BattleSceneDisplayManager.Instance.GetTeamDisplayList(true);
            Dictionary <int, TeamDisplay> enemyList  = BattleSceneDisplayManager.Instance.GetTeamDisplayList(false);
            result.AddRange(FindSkillTarget(ship.GetTeamGo().transform, skill, playerList, enemyList));
        }
        else
        {
            result.Add(ship);
        }
        return(result);
    }
Example #19
0
    private static void CheckClickSkillTarget(GameObject go)
    {
        if (go == null)
        {
            return;
        }
        // 判断点击的是否是可被点击的船
        TeamDisplay        display = Instance.GetTeamDisplay(go.transform);
        List <TeamDisplay> list    = SkillTargetSelector.FindSkillTarget(GetCommanderShipTeam(), SelectedSkill);

        if (!list.Contains(display))
        {
            return;
        }
        Instance.SkillSelectParam_ = display;
        IsSelectedSkillTarget      = true;
    }
Example #20
0
    /// <summary>
    /// 释放当前选中的技能, by lxl
    /// </summary>
    private void FireSkill(int currentClickIndex)
    {
        // 旗舰
        ClientShip commandShip = BattleSys.GetCommanderShip();

        if (commandShip == null)
        {
            return;
        }
        bool isSelectedSkillTarget = BattleSceneDisplayManager.IsSelectedSkillTarget;

        // 玩家还没选择目标,给提示
        if (!isSelectedSkillTarget)
        {
            // 提示玩家选择目标
            ShowSelecteTargetNotice();
            return;
        }
        // 得到选中的技能
        ClientSkill skill   = BattleSceneDisplayManager.SelectedSkill;
        Vector3     pos     = Vector3.zero;
        int         fightID = -1;

        // 如果是玩家选择的技能
        if (skill.Prop.skill_select_type == Def.SkillSelectType.PlayerSelect)
        {
            // 得到玩家选择的位置或目标
            if (skill.Prop.shape_type == Def.ShapeType.Default)
            {
                TeamDisplay display = (TeamDisplay)BattleSceneDisplayManager.Instance.SkillSelectParam;
                fightID = display.GetShip().InFightID;
            }
            else if (skill.Prop.shape_type == Def.ShapeType.Circle)
            {
                pos = (Vector3)BattleSceneDisplayManager.Instance.SkillSelectParam;
            }
        }
        // 使用技能
        FightService.Instance.UseCommanderSkill(commandShip.InFightID, skill.ID, fightID, pos);

        // 技能释放完毕后要重设选择状态
        BattleSceneDisplayManager.CastSkillComplete();
        BattleSceneDisplayManager.CheckCommanderAttackRange();
    }
Example #21
0
    /// <summary>
    /// 得到所有舰船
    /// </summary>
    /// <param name="list"></param>
    /// <returns></returns>
    private static List <TeamDisplay> GetAllShip(Dictionary <int, TeamDisplay> list)
    {
        List <TeamDisplay> result = new List <TeamDisplay>();

        foreach (var iter in list)
        {
            if (iter.Value == null)
            {
                continue;
            }
            if (iter.Value.IsDead)
            {
                continue;
            }
            TeamDisplay tempTrans = iter.Value;
            result.Add(tempTrans);
        }
        return(result);
    }
Example #22
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);
     }
 }
Example #23
0
    public void CheckCommanderShipSkillTarget()
    {
        // 停止之前的技能目标锁定
        StopCoroutine("DelayCheckCommanderShipSkillTarget");
        // 清除所有的目标框
        ClearArrowGroupList();
        TeamDisplay display = GetCommanderShipTeam();

        if (display == null)
        {
            return;
        }
        ClientSkill skill = SelectedSkill;

        if (skill == null)
        {
            return;
        }
        // 开始新的技能目标锁定
        StartCoroutine("DelayCheckCommanderShipSkillTarget");
    }
Example #24
0
    /// <summary>
    /// 初始化
    /// </summary>
    /// <param name="ship"></param>
    /// <param name="bPlayer"></param>
    /// <param name="pos"></param>
    public void Init(TeamDisplay team, Ship ship, Vector3 pos, Vector3 offsetPos, bool bPlayer)
    {
        if (Trans_ == null)
        {
            Trans_ = GetComponent <Transform>();
        }

        TargetRef_ = new Dictionary <string, Transform>();
        EnumerateChildren(TargetRef_, Trans_);

        KineticArmorGo_ = AssetLoader.GetInstantiatedGameObject(GlobalEffectDefine.PhysicsShield);
        if (KineticArmorGo_ != null)
        {
            AssetLoader.ReplaceShader(KineticArmorGo_);
            KineticArmorGo_.transform.parent           = transform;
            KineticArmorGo_.transform.localPosition    = Vector3.zero;
            KineticArmorGo_.transform.localEulerAngles = Vector3.zero;
            KineticArmorGo_.transform.localScale       = Vector3.one * ship.shieldRadius * 2;
            KineticArmorGo_.SetActive(false);
        }

        EnergyArmorGo_ = AssetLoader.GetInstantiatedGameObject(GlobalEffectDefine.PhysicsShield);
        if (EnergyArmorGo_ != null)
        {
            AssetLoader.ReplaceShader(EnergyArmorGo_);
            EnergyArmorGo_.transform.parent           = transform;
            EnergyArmorGo_.transform.localPosition    = Vector3.zero;
            EnergyArmorGo_.transform.localEulerAngles = Vector3.zero;
            EnergyArmorGo_.transform.localScale       = Vector3.one * ship.shieldRadius * 2;
            EnergyArmorGo_.SetActive(false);
        }

        Team_              = team;
        Ship_              = ship;
        OffsetPosition_    = offsetPos;
        pos               += OffsetPosition_;
        Trans_.position    = pos;
        Trans_.eulerAngles = new Vector3(0, bPlayer ? 0 : 180, 0);
        OffsetPosition_   -= new Vector3(0, OffsetPosition_.y, 0);
    }
Example #25
0
    /// <summary>
    /// 显示trans所属队伍的选中状态,关闭所属队伍列表内其他队伍的选中状态
    /// </summary>
    /// <param name="trans"></param>
    private void ShowSelect(Transform trans)
    {
        if (trans == null)
        {
            return;
        }
        Dictionary <int, TeamDisplay> teamList = GetTeamDisplayList(trans);
        TeamDisplay display = GetTeamDisplay(trans);

        if (display == null)
        {
            return;
        }
        ResetSelect(teamList, display.IsPlayerShip());
        display.SetSelect(true);
        if (!display.IsPlayerShip())
        {
            return;
        }
        GameObject teamGo = display.GetTeamGo();

        if (teamGo == null)
        {
            return;
        }
        Transform  teamGoTrans = teamGo.transform;
        ClientShip ship        = display.GetShip();
        float      vol         = ship.Reference.vol;

        if (SelectedPlayerShipArrowGroup_ == null)
        {
            SelectedPlayerShipArrowGroup_ = BattleArrowGroup.InitArrowGroup(teamGoTrans, vol, false);
        }
        else
        {
            SelectedPlayerShipArrowGroup_.ChangeParent(teamGoTrans, vol);
        }
    }
Example #26
0
    private void Init(Transform parentTrans, TeamDisplay team, string name, float radius)
    {
        Team_        = team;
        ParentTrans_ = parentTrans;
        UI_          = transform.GetChild(0).gameObject;
        Trans_       = transform;
        GameObject go = CameraManager.Instance.MainCamera;

        WorldCamera_ = go.GetComponent <Camera>();
        UICamera_    = CameraManager.Instance.UICamera;

        PanelAnimator_   = UI_.transform.GetComponent <Animator>();
        DurabilityImage_ = UI_.transform.FindChild("Image_Decor/Image_Hp/Image").GetComponent <Image>();
        ArmouredImage_   = UI_.transform.FindChild("Image_Decor/Image_En/Image").GetComponent <Image>();

        Button button = UI_.transform.FindChild("Image_Circle").gameObject.AddComponent <Button>();

        button.onClick.AddListener(OnCircleClick);

        // 初始化血条信息的状态
        PanelAnimator_.SetTrigger("ShipUnderAttack");
        // 初始化隐藏
        ShowInfo(false);
    }
Example #27
0
    /// <summary>
    /// 得到攻击范围内所有
    /// </summary>
    /// <param name="pos"></param>
    /// <param name="skill"></param>
    /// <param name="list"></param>
    /// <returns></returns>
    private static List <TeamDisplay> GetInAttackRangeAllShip(Vector3 pos, ClientSkill skill, Dictionary <int, TeamDisplay> list)
    {
        List <TeamDisplay> result = new List <TeamDisplay>();

        foreach (var iter in list)
        {
            if (iter.Value == null)
            {
                continue;
            }
            if (iter.Value.IsDead)
            {
                continue;
            }
            // 需要在范围内
            if (!IsInSkillRange(pos, iter.Value, skill))
            {
                continue;
            }
            TeamDisplay tempTrans = iter.Value;
            result.Add(tempTrans);
        }
        return(result);
    }
Example #28
0
 private static bool IsInSkillRange(Transform trans1, TeamDisplay ship2, ClientSkill skill)
 {
     return(IsInSkillRange(trans1, ship2, skill.Prop));
 }
Example #29
0
    /// <summary>
    /// 显示旗舰技能目标的框
    /// </summary>
    /// <returns></returns>
    private IEnumerator DelayCheckCommanderShipSkillTarget()
    {
        GameObject shipGo = GetCommanderShipObj();

        if (shipGo == null)
        {
            yield break;
        }
        TeamDisplay commanderDisplay = GetCommanderShipTeam();

        if (commanderDisplay == null)
        {
            yield break;
        }
        ClientSkill skill = SelectedSkill_;

        if (skill == null)
        {
            yield break;
        }

        // 技能选择时的标志
        while (true)
        {
            // 如果旗舰不存在了
            if (shipGo == null)
            {
                yield break;
            }

            if (skill.Prop.skill_select_type == Def.SkillSelectType.CastScope || skill.Prop.skill_select_type == Def.SkillSelectType.NoSelection)
            {
                List <TeamDisplay> list1 = SkillTargetSelector.FindSkillTarget(commanderDisplay, skill);
                // 矩形
                if (skill.Prop.shape_type == Def.ShapeType.Rectangle)
                {
                    CheckLastFrameArrowGroupList(list1);
                    CheckAllSkillTarget(list1);
                }
                // 圆形或扇形
                else if (skill.Prop.shape_type == Def.ShapeType.Circle || skill.Prop.shape_type == Def.ShapeType.Default)
                {
                    CheckLastFrameArrowGroupList(list1);
                    CheckAllSkillTarget(list1);
                }
            }
            else if (skill.Prop.skill_select_type == Def.SkillSelectType.PlayerSelect)
            {
                // 为0时让玩家点击屏幕选择舰船或空处,显示可点击的舰船
                if (!IsSelectedSkillTarget)
                {
                    List <TeamDisplay> list2 = SkillTargetSelector.FindSkillTarget(commanderDisplay, skill);
                    CheckLastFrameArrowGroupList(list2);
                    CheckAllSkillTarget(list2);
                }
                // 根据玩家点击的地方做显示
                else
                {
                    if (SelectedSkill.Prop.shape_type == Def.ShapeType.Circle)
                    {
                        // 知道玩家点击的位置了,需要根据这个位置得到周围的目标舰船
                        Vector3            targetPosition = (Vector3)SkillSelectParam_;
                        List <TeamDisplay> list3          = SkillTargetSelector.FindSkillTarget(targetPosition, skill);
                        CheckLastFrameArrowGroupList(list3);
                        CheckAllSkillTarget(list3);
                    }
                    else if (SelectedSkill.Prop.shape_type == Def.ShapeType.Default)
                    {
                        TeamDisplay targetDisplay = (TeamDisplay)SkillSelectParam_;
                        if (targetDisplay != null && !targetDisplay.IsDead)
                        {
                            List <TeamDisplay> list4 = new List <TeamDisplay>();
                            list4.Add(targetDisplay);
                            CheckLastFrameArrowGroupList(list4);
                            CheckAllSkillTarget(list4);
                        }
                        else
                        {
                            // 如果目标船死亡了,那么玩家要重新指定一个目标
                            IsSelectedSkillTarget = false;
                        }
                    }
                }
            }
            yield return(null);
        }
    }
Example #30
0
    /// <summary>
    /// ship2是否在ship1的技能范围内
    /// </summary>
    /// <param name="ship1"></param>
    /// <param name="ship2"></param>
    /// <param name="skill"></param>
    /// <returns></returns>
    private static bool IsInSkillRange(TeamDisplay ship1, TeamDisplay ship2, ClientSkill skill)
    {
        Transform trans1 = ship1.GetTeamGo().transform;

        return(IsInSkillRange(trans1, ship2, skill));
    }