示例#1
0
 public void Add(ArmyCtrl armyCtrl)
 {
     //armyCtrl.Init(cardDto, mapPointCtrl , armyprefab);
     armyCtrl.ArmySelectEvent = processArmySelect;
     ArmySkillManager.Instance.BindSkill(ref armyCtrl);//绑定技能
     CardCtrllist.Add(armyCtrl);
 }
示例#2
0
    private bool processArmySelect(ArmyCtrl armyCtrl)
    {
        if (armyCtrl == null)
        {
            return(false);
        }

        if (LastSelectArmyCtrl == null)
        {
            //第一次选择
            LastSelectArmyCtrl = armyCtrl;
            armyCtrl.isSelect  = true;
            return(true);
        }
        else if (armyCtrl != LastSelectArmyCtrl)
        {
            //和上次选择不一样
            LastSelectArmyCtrl.isSelect = false;
            LastSelectArmyCtrl.CheckIsA();
            //LastSelectArmyCtrl.transform.localScale /= 2;

            armyCtrl.isSelect  = true;
            LastSelectArmyCtrl = armyCtrl;
            return(true);
        }
        else
        {
            //和上次选择一样
            LastSelectArmyCtrl.isSelect = false;
            LastSelectArmyCtrl.CheckIsA();
            LastSelectArmyCtrl = null;
            return(false);
        }
    }
示例#3
0
    /// <summary>
    /// 处理反击结果
    /// </summary>
    /// <param name="active"></param>
    private void processBackAttackResult(bool active)
    {
        if (active)//如果选择了反击
        {
            //减血
            attackCtrl.armyState.Hp -= defenseCtrl.armyState.Damage;
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, true);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            //移除反击手牌
            Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, backAttackCardCtrl.cardDto);
        }
        else
        {
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
        }
        //关闭箭头
        Dispatch(AreoCode.UI, UIEvent.CLOSE_ATTACK_ARROW, "关闭箭头");
        //关闭隐藏面板
        Dispatch(AreoCode.UI, UIEvent.CLOSE_HIDE_PLANE, "关闭隐藏面板");
        defenseCtrl = null;
        attackCtrl  = null;

        Dispatch(AreoCode.UI, UIEvent.SHOW_HIDE_PLANE, "显示遮挡面板");
        Dispatch(AreoCode.UI, UIEvent.SHOW_WAIT_PANEL, "");//显示等待面板
    }
示例#4
0
    /// <summary>
    /// 获取防御和攻击兵种的信息
    /// </summary>
    private void getArmy(out ArmyCtrl defenseCtrl, out OtherArmyCtrl attackCtrl, MapAttackDto mapAttackDto)
    {
        //镜像对称
        int totalX = 12;
        int totalZ = 8;

        MapPoint     attackpoint      = new MapPoint(totalX - mapAttackDto.AttacklMapPoint.X, totalZ - mapAttackDto.AttacklMapPoint.Z);
        MapPoint     defensepoint     = new MapPoint(totalX - mapAttackDto.DefenseMapPoint.X, totalZ - mapAttackDto.DefenseMapPoint.Z);;
        int          attackmovetype   = mapAttackDto.AttackMoveType;
        int          defensemovetype  = mapAttackDto.DefenseMoveType;
        MapPointCtrl attackPointCtrl  = null;
        MapPointCtrl defensePointCtrl = null;

        //OtherArmyCtrl attackCtrl;
        //ArmyCtrl defenseCtrl;

        foreach (var item in MapManager.mapPointCtrls)
        {
            if (item.mapPoint.X == attackpoint.X && item.mapPoint.Z == attackpoint.Z)
            {
                attackPointCtrl = item;
            }
            else if (item.mapPoint.X == defensepoint.X && item.mapPoint.Z == defensepoint.Z)
            {
                defensePointCtrl = item;
            }

            if (attackPointCtrl != null && defensePointCtrl != null)
            {
                break;
            }
        }

        if (attackmovetype == ArmyMoveType.LAND && attackPointCtrl.LandArmy != null)
        {
            attackCtrl = attackPointCtrl.LandArmy.GetComponent <OtherArmyCtrl>();
        }
        else if (attackmovetype == ArmyMoveType.SKY && attackPointCtrl.SkyArmy != null)
        {
            attackCtrl = attackPointCtrl.SkyArmy.GetComponent <OtherArmyCtrl>();
        }
        else
        {
            attackCtrl = null;
        }

        if (defensemovetype == ArmyMoveType.LAND && defensePointCtrl.LandArmy != null)
        {
            defenseCtrl = defensePointCtrl.LandArmy.GetComponent <ArmyCtrl>();
        }
        else if (defensemovetype == ArmyMoveType.SKY && defensePointCtrl.SkyArmy != null)
        {
            defenseCtrl = defensePointCtrl.SkyArmy.GetComponent <ArmyCtrl>();
        }
        else
        {
            defenseCtrl = null;
        }
    }
示例#5
0
    /// <summary>
    /// 先祖头盔协程
    /// </summary>
    /// <returns></returns>
    private IEnumerator AncestorHelmets()
    {
        //开始选择兵种控制器
        if (selectOtherCardCtrl == null)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择非指令卡");
            yield break;
        }

        bool hasInfantry = false;

        foreach (var item in myArmyCtrlManager.CardCtrllist)
        {
            if (item.armyState.Name == OrcArmyCardType.Infantry)
            {
                //如果场上有兽族步兵
                hasInfantry = true;
                break;
            }
        }

        if (!hasInfantry)
        {
            //如果场上没有兽族步兵
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "场上没有兽族步兵");
            yield break;
        }

        /*if (selectArmyCtrl == null)
         * {
         *  Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择使用单位");
         *  yield break;
         * }*/


        foreach (var item in myArmyCtrlManager.CardCtrllist)
        {
            if (item.armyState.Name == OrcArmyCardType.Infantry)
            {
                //所有在场上的兽族步兵血量加一,最大血量不变
                item.armyState.Hp++;
            }
        }
        //发送消息给其他人
        socketMsg.Change(OpCode.FIGHT, FightCode.USE_OTHERCARD_CREQ, selectOtherCardCtrl.cardDto);
        Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
        //提示消息
        Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "先祖头盔使用成功");
        //移除先祖头盔卡牌
        Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, selectOtherCardCtrl.cardDto);
        //状态重置
        selectArmyCtrl      = null;
        selectOtherCardCtrl = null;
    }
示例#6
0
    /// <summary>
    /// 绑定技能
    /// </summary>
    /// <param name="armyState"></param>
    public void BindSkill(ref ArmyCtrl armyCtrl)
    {
        //this.armyState = armyState;
        switch (armyCtrl.armyState.Race)
        {
        case RaceType.ORC:
            switch (armyCtrl.armyState.Name)
            {
            case OrcArmyCardType.Hero:
                armyCtrl.gameObject.AddComponent <OrcHeroSkill>();
                // armyCtrl.armySkill = new OrcHeroSkill(ref armyCtrl);
                armyCtrl.gameObject.GetComponent <OrcHeroSkill>().SetArmyCtrl(ref armyCtrl);
                armyCtrl.armySkill = armyCtrl.gameObject.GetComponent <OrcHeroSkill>();
                break;

            case OrcArmyCardType.Raven_Shaman:
                //armyCtrl.armySkill = new OrcRavenShamanSkill(ref armyCtrl);
                armyCtrl.gameObject.AddComponent <OrcRavenShamanSkill>();
                armyCtrl.gameObject.GetComponent <OrcRavenShamanSkill>().SetArmyCtrl(ref armyCtrl);
                armyCtrl.armySkill = armyCtrl.gameObject.GetComponent <OrcRavenShamanSkill>();
                break;

            case OrcArmyCardType.Giant_mouthed_Frog:        //巨口蛙
                armyCtrl.gameObject.AddComponent <OrcGiantSkill>();
                armyCtrl.gameObject.GetComponent <OrcGiantSkill>().SetArmyCtrl(ref armyCtrl);
                armyCtrl.armySkill = armyCtrl.gameObject.GetComponent <OrcGiantSkill>();
                break;

            default:
                armyCtrl.armySkill = new ArmySkillBase();
                break;
            }
            break;

        default:
            armyCtrl.armySkill = new ArmySkillBase();
            break;
        }
    }
示例#7
0
    public override void Execute(int eventcode, object message)
    {
        switch (eventcode)
        {
        case UIEvent.SHOW_ARMY_MENU_PANEL:
            //armyState = message as ArmyCardBase;
            armyCtrl = message as ArmyCtrl;
            //给指令卡管理器传送单位控制器
            OrderCardManager.Instance.selectArmyCtrlDelegate.Invoke(armyCtrl);
            OtherCardManager.Instance.selectArmyCtrlDelegate.Invoke(armyCtrl);
            //SetPanelActive(true);
            processShowMenuPanel();
            break;

        case UIEvent.CLOSE_ARMY_MENU_PANEL:
            SetPanelActive(false);

            //解除屏蔽选择
            foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
            {
                item.canBeSeletced = true;
            }
            StopAllCoroutines();
            break;

        /*case UIEvent.SET_SELECK_ATTACK:
         *  defenseArmyType = (int)message;
         *  break;*/
        case UIEvent.IS_ATTACK_SUCCESS:
            processIsAttackSuccess((bool)message);
            break;

        case UIEvent.IS_BACKATTACK:
            processIsBackAttack((bool)message);
            break;
        }
    }
示例#8
0
    /// <summary>
    /// 攻击协程
    /// </summary>
    /// <returns></returns>
    private IEnumerator useAttack()
    {
        //开始选择兵种控制器

        //isNeedGetArmyCtrl = true;
        if (selectOrderCardCtrl == null)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择指令卡");
            yield break;
        }
        if (selectArmyCtrl == null)
        {
            //yield return new WaitUntil(isGetArmyCtrl);
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择使用单位");
            yield break;

            /*if (selectOrderCardCtrl == null)
             * {
             *  yield break;
             * }*/
        }

        /*if (selectArmyCtrl == null)
         * {
         *  yield return new WaitUntil(isGetArmyCtrl);
         *  if (selectOrderCardCtrl == null)
         *  {
         *      yield break;
         *  }
         * }*/

        /*if (isSelectMulArmy && SelectUseArmy())
         * {
         *  //如果有两个单位
         *  isSelectMulArmy = false;
         *  isContinueProcessID = 0;
         *  yield break;
         * }*/


        if (selectArmyCtrl.armyState.Class == ArmyClassType.Ordinary)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "普通兵种不能使用攻击卡");
            //isNeedGetArmyCtrl = false;
            selectArmyCtrl      = null;
            selectOrderCardCtrl = null;
            yield break;
        }
        else if (!selectArmyCtrl.canUseAttack)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "该种单位本回合已使用过攻击卡");
            //isNeedGetArmyCtrl = false;
            selectArmyCtrl      = null;
            selectOrderCardCtrl = null;
            yield break;
        }

        foreach (var item in myArmyCtrlManager.CardCtrllist)
        {
            if (item.armyState.Name == selectArmyCtrl.armyState.Name)
            {
                //将该兵种设置为能攻击
                item.canAttack    = true;
                item.canUseAttack = false;
            }
        }
        //刷新兵种菜单面板
        Dispatch(AreoCode.UI, UIEvent.SHOW_ARMY_MENU_PANEL, selectArmyCtrl);
        //移除攻击卡牌
        Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, selectOrderCardCtrl.cardDto);
        //发送消息
        socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_ATTACK_CREQ, "使用攻击卡");
        Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
        //状态重置
        //isNeedGetArmyCtrl = false;
        selectArmyCtrl      = null;
        selectOrderCardCtrl = null;
        //isSelectMulArmy = true;
        //isContinueProcessID = -1;
        //Dispatch(AreoCode.UI, UIEvent.CLOSE_ARMY_MENU_PANEL, "关闭面板");
    }
示例#9
0
    /// <summary>
    /// 修养协程
    /// </summary>
    /// <returns></returns>
    private IEnumerator useRest()
    {
        //开始选择兵种控制器

        //isNeedGetArmyCtrl = true;
        if (selectOrderCardCtrl == null)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择指令卡");
            yield break;
        }
        if (selectArmyCtrl == null)
        {
            //yield return new WaitUntil(isGetArmyCtrl);
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "请先选择使用单位");
            yield break;

            /*if (selectOrderCardCtrl == null)
             * {
             *  yield break;
             * }*/
        }


        /*if (isSelectMulArmy && SelectUseArmy())
         * {
         *  //如果有两个单位
         *  isSelectMulArmy = false;
         *  isContinueProcessID = 1;
         *  yield break;
         * }*/

        if (selectArmyCtrl.armyState.Hp >= selectArmyCtrl.armyState.MaxHp)
        {
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "已达到血量上限");
            //isNeedGetArmyCtrl = false;
            selectArmyCtrl      = null;
            selectOrderCardCtrl = null;
            yield break;
        }

        foreach (var item in myArmyCtrlManager.CardCtrllist)
        {
            if (item.armyState.Name == selectArmyCtrl.armyState.Name && item.ArmymapPointCtrl == selectArmyCtrl.ArmymapPointCtrl)
            {
                //血量加一
                item.armyState.Hp++;
                //发送消息给其他人
                if (item.armyState.MoveType == ArmyMoveType.SKY)
                {
                    //如果是飞行单位
                    mapPointDto.Change(item.armyState.Position, -1, -1, item.armyState.Race, item.armyState.Name);
                }
                else
                {
                    //如果是陆地单位
                    mapPointDto.Change(item.armyState.Position, item.armyState.Race, item.armyState.Name, -1, -1);
                }
                socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_REST_CREQ, mapPointDto);
                Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "回复血量成功");
                break;
            }
        }
        //移除修养卡牌
        Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, selectOrderCardCtrl.cardDto);
        //状态重置
        //isNeedGetArmyCtrl = false;
        selectArmyCtrl      = null;
        selectOrderCardCtrl = null;
        //isSelectMulArmy = true;
        //isContinueProcessID = -1;
        //Dispatch(AreoCode.UI, UIEvent.CLOSE_ARMY_MENU_PANEL, "关闭面板");
    }
示例#10
0
 /// <summary>
 /// 处理传送单位控制器委托
 /// </summary>
 /// <param name="armyCtrl"></param>
 private void processSelectArmyDelegate(ArmyCtrl armyCtrl)
 {
     selectArmyCtrl = armyCtrl;
 }
示例#11
0
    /// <summary>
    /// 询问是我方否出闪避
    /// </summary>
    private void pcoessdealDodge(MapAttackDto mapAttackDto)
    {
        if (mapAttackDto == null)
        {
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_DODGE_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            return;
        }

        bool hasDodge = false;//手牌中是否有闪避

        dodgeCardctrl = hasCardType(CardType.ORDERCARD, OrderCardType.DODGE);
        if (dodgeCardctrl != null)
        {
            hasDodge = true;
        }
        else
        {
            hasDodge = false;
        }

        //获取攻击和防御的兵种
        getArmy(out defenseCtrl, out attackCtrl, mapAttackDto);

        if (defenseCtrl == null || attackCtrl == null)
        {
            //发送消息
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_DODGE_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            return;
        }


        //如果没有闪避或是普通兵种直接减血
        if (!hasDodge || defenseCtrl.armyState.Class == ArmyClassType.Ordinary)
        {
            defenseCtrl.armyState.Hp -= attackCtrl.armyState.Damage;
            //发送消息
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_DODGE_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            //关闭箭头
            //Dispatch(AreoCode.UI, UIEvent.CLOSE_ATTACK_ARROW, "关闭箭头");
            //关闭隐藏面板
            //Dispatch(AreoCode.UI, UIEvent.CLOSE_HIDE_PLANE, "关闭隐藏面板");
            //发送提示
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "我方(" + defenseCtrl.armyState.Position.X + "," + defenseCtrl.armyState.Position.Z + ")" + "单位被攻击");

            if (defenseCtrl.armyState.Race == RaceType.ORC &&
                defenseCtrl.armyState.Name == OrcArmyCardType.Pangolin)
            {
                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "穿山甲发动反击背刺");
                //如果是兽族穿山甲
                attackCtrl.armyState.Hp--;//受到技能伤害
                SkillDto skillDto = new SkillDto(defenseCtrl.armyState.Race, defenseCtrl.armyState.Name
                                                 , attackCtrl.armyState.Name, attackCtrl.armyState.Position);

                socketMsg.Change(OpCode.FIGHT, FightCode.ARMY_USE_SKILL_CREQ, skillDto);
                Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            }


            if (defenseCtrl.armyState.Class == ArmyClassType.Ordinary)
            {
                //发送反击消息
                socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, false);
                Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                return;//普通兵种不能反击
            }

            //其他阶级兵种可以反击
            backAttackCardCtrl = hasCardType(CardType.ORDERCARD, OrderCardType.BACKATTACK);
            if (backAttackCardCtrl != null && defenseCtrl.armyState.Hp > 0)
            {
                //反击
                Dispatch(AreoCode.UI, UIEvent.SHOW_HIDE_PLANE, "显示遮挡平面");
                Dispatch(AreoCode.UI, UIEvent.SHOW_DEAL_BACKATTACK_PANEL, "你的单位在敌人的攻击中存活下来了,是否进行反击?");
            }
            else//不反击
            {
                //关闭箭头
                Dispatch(AreoCode.UI, UIEvent.CLOSE_ATTACK_ARROW, "关闭箭头");
                //关闭隐藏面板
                Dispatch(AreoCode.UI, UIEvent.CLOSE_HIDE_PLANE, "关闭隐藏面板");
                //发送反击消息
                socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, false);
                Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);

                defenseCtrl = null;
                attackCtrl  = null;

                Dispatch(AreoCode.UI, UIEvent.SHOW_HIDE_PLANE, "显示遮挡面板");
                Dispatch(AreoCode.UI, UIEvent.SHOW_WAIT_PANEL, "");
            }
            return;
        }


        //有闪避且被攻击单位为非普通阶级单位
        //显示箭头
        Vector3 pos = new Vector3(defenseCtrl.armyState.Position.X, 1, defenseCtrl.armyState.Position.Z);

        Dispatch(AreoCode.UI, UIEvent.SHOW_ATTACK_ARROW, pos);
        //显示出闪避面板
        string str = "";

        if (defenseCtrl.armyState.MoveType == ArmyMoveType.SKY)
        {
            str = "我方位于箭头所指处的飞行单位被攻击,是否进行闪避?";
        }
        else if (defenseCtrl.armyState.MoveType == ArmyMoveType.LAND)
        {
            str = "我方位于箭头所指处的陆地单位被攻击,是否进行闪避?";
        }

        Dispatch(AreoCode.UI, UIEvent.SHOW_DEAL_DODGE_PANEL, str);
        Dispatch(AreoCode.UI, UIEvent.SHOW_HIDE_PLANE, "显示遮挡平面");
    }
示例#12
0
    /// <summary>
    /// 处理出闪面板发来的消息
    /// </summary>
    /// <param name="active"></param>
    private void processDodgeResult(bool active)
    {
        if (active)//出闪
        {
            //移除手牌
            Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, dodgeCardctrl.cardDto);
            //defenseCtrl = null;
            //attackCtrl = null;
            //发送消息
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_DODGE_CREQ, true);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            //关闭箭头
            //Dispatch(AreoCode.UI, UIEvent.CLOSE_ATTACK_ARROW, "关闭箭头");
            //关闭隐藏面板
            //Dispatch(AreoCode.UI, UIEvent.CLOSE_HIDE_PLANE, "关闭隐藏面板");
            //发送反击消息
            //socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, false);
            //Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
        }
        else//不出闪
        {
            //减血
            defenseCtrl.armyState.Hp -= attackCtrl.armyState.Damage;
            //发送消息
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_DODGE_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);


            if (defenseCtrl.armyState.Race == RaceType.ORC &&
                defenseCtrl.armyState.Name == OrcArmyCardType.Pangolin)
            {
                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "穿山甲发动反击背刺");
                //如果是兽族穿山甲
                attackCtrl.armyState.Hp--;//受到技能伤害
                SkillDto skillDto = new SkillDto(defenseCtrl.armyState.Race, defenseCtrl.armyState.Name
                                                 , attackCtrl.armyState.Name, attackCtrl.armyState.Position);

                socketMsg.Change(OpCode.FIGHT, FightCode.ARMY_USE_SKILL_CREQ, skillDto);
                Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
            }
        }


        //是否反击
        backAttackCardCtrl = hasCardType(CardType.ORDERCARD, OrderCardType.BACKATTACK);
        if (backAttackCardCtrl != null && defenseCtrl.armyState.Hp > 0)
        {
            //反击
            Dispatch(AreoCode.UI, UIEvent.SHOW_DEAL_BACKATTACK_PANEL, "你的单位在敌人的攻击中存活下来了,是否进行反击?");
        }
        else//不反击
        {
            //关闭箭头
            Dispatch(AreoCode.UI, UIEvent.CLOSE_ATTACK_ARROW, "关闭箭头");
            //关闭隐藏面板
            Dispatch(AreoCode.UI, UIEvent.CLOSE_HIDE_PLANE, "关闭隐藏面板");
            //发送反击消息
            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_BACKATTACK_CREQ, false);
            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);

            defenseCtrl = null;
            attackCtrl  = null;

            Dispatch(AreoCode.UI, UIEvent.SHOW_HIDE_PLANE, "显示遮挡面板");
            Dispatch(AreoCode.UI, UIEvent.SHOW_WAIT_PANEL, "对方回合");
        }
        //defenseCtrl = null;
        //attackCtrl = null;
    }
示例#13
0
 public void SetArmyCtrl(ref ArmyCtrl armyCtrl)
 {
     this.armyCtrl = armyCtrl;
 }
示例#14
0
    /// <summary>
    /// 地图上设置兵种
    /// </summary>
    private void Build()
    {
        if (Input.GetMouseButtonDown(0))
        {
            if (!EventSystem.current.IsPointerOverGameObject())
            {
                //没有点在UI上
                Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;

                /*bool hasArmy = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("MyArmy"));
                 * Queue<Collider> colliders = new Queue<Collider>();
                 * while (hasArmy)
                 * {
                 *  Collider collider = hit.collider.GetComponent<Collider>();
                 *  collider.enabled = false;
                 *  colliders.Enqueue(collider);
                 *  hasArmy = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("MapPoint"));
                 * }*/

                bool isCollider = Physics.Raycast(ray, out hit, 1000, LayerMask.GetMask("MapPoint"));
                if (isCollider)
                {
                    turnDelegate.Invoke(ref TurnCount);//获取回合数
                    MapPointCtrl mapPointCtrl = hit.collider.GetComponent <MapPointCtrl>();
                    if (selectArmyCard != null && armyPrefab != null)
                    {
                        if (selectArmyCard.Class == ArmyClassType.Hero && hit.collider.tag != "BossStart")
                        {
                            //如果是英雄单位只能箭头处
                            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "英雄单位只能箭头处");
                            return;
                        }
                        else if (selectArmyCard.Class != ArmyClassType.Hero && hit.collider.tag == "BossStart")
                        {
                            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "非英雄单位不能箭头处");
                            return;
                        }

                        if (TurnCount <= 1)
                        {
                            if (hit.collider.tag != "StartAreo" && hit.collider.tag != "Winline" && hit.collider.tag != "BossStart")
                            {
                                //如果第一回合不在屯兵区放置
                                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "初始阶段只能后三排");
                                return;
                            }
                        }
                        else
                        {
                            if (hit.collider.tag != "StartAreo" && hit.collider.tag != "Winline" && hit.collider.tag != "BossStart" && hit.collider.tag != "FeatureArea")
                            {
                                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "只能放置在后五排");
                                return;
                            }
                        }

                        switch (selectArmyCard.MoveType)
                        {
                        case ArmyMoveType.LAND:    //陆地单位
                            if (mapPointCtrl.HasLandArmy())
                            {
                                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "此处已有陆地单位");
                                return;
                            }
                            //放置陆地单位
                            GameObject army;
                            army = mapPointCtrl.SetLandArmy(armyPrefab, true);
                            mapPointCtrl.LandArmyRace = selectArmyCard.Race;
                            mapPointCtrl.LandArmyName = selectArmyCard.Name;
                            //向我的兵种控制器集合添加兵种管理器
                            ArmyCtrl armyctrl = army.GetComponent <ArmyCtrl>();

                            armyctrl.Init(selectArmyCard, mapPointCtrl, army);
                            armyctrl.armyState.MoveType = (ushort)selectArmyCard.MoveType;
                            //更新地图点控制器
                            mapPointCtrl.UpdateLandArmy(army);
                            myArmyCtrls.Add(armyctrl);

                            //向发送发送出牌消息,让其他人消除卡牌
                            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_ARMYCARD_CREQ, selectArmyCard);
                            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                            //移除卡牌
                            Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, selectArmyCard);
                            //向服务器发送消息
                            pointDto.Change(mapPointCtrl.mapPoint, mapPointCtrl.LandArmyRace, mapPointCtrl.LandArmyName, mapPointCtrl.SkyArmyRace, mapPointCtrl.SkyArmyName);
                            socketMsg.Change(OpCode.FIGHT, FightCode.MAP_SET_ARMY_CREQ, pointDto);
                            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                            //向发送发送出牌消息,让其他人消除卡牌
                            //socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_CARD_CREQ, "出牌请求");
                            //socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_ARMYCARD_CREQ, selectArmyCard);
                            //Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                            break;

                        case ArmyMoveType.SKY:
                            if (mapPointCtrl.HasSkyArmy())
                            {
                                Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "此处已有飞行单位");
                                return;
                            }
                            //放置飞行单位
                            army = mapPointCtrl.SetSkyArmy(armyPrefab, true);
                            //mapPointCtrl.SkyArmyCard = selectArmyCard;
                            mapPointCtrl.SkyArmyRace = selectArmyCard.Race;
                            mapPointCtrl.SkyArmyName = selectArmyCard.Name;

                            //向我的兵种控制器集合添加兵种管理器
                            armyctrl = army.GetComponent <ArmyCtrl>();

                            armyctrl.Init(selectArmyCard, mapPointCtrl, army);
                            armyctrl.armyState.MoveType = (ushort)selectArmyCard.MoveType;
                            //更新地图点控制器
                            mapPointCtrl.UpdateSkyArmy(army);
                            myArmyCtrls.Add(armyctrl);

                            //向发送发送出牌消息,让其他人消除卡牌
                            socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_ARMYCARD_CREQ, selectArmyCard);
                            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);
                            //移除卡牌
                            Dispatch(AreoCode.CHARACTER, CharacterEvent.REMOVE_MY_CARDS, selectArmyCard);
                            //向服务器发送消息
                            pointDto.Change(mapPointCtrl.mapPoint, mapPointCtrl.LandArmyRace, mapPointCtrl.LandArmyName, mapPointCtrl.SkyArmyRace, mapPointCtrl.SkyArmyName);
                            socketMsg.Change(OpCode.FIGHT, FightCode.MAP_SET_ARMY_CREQ, pointDto);
                            Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);

                            /*//向发送发送出牌消息,让其他人消除卡牌
                             * socketMsg.Change(OpCode.FIGHT, FightCode.DEAL_ARMYCARD_CREQ, selectArmyCard);
                             * Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);*/

                            break;
                        }

                        /*while(colliders.Count != 0)
                         * {
                         *  colliders.Dequeue().enabled = true;
                         * }*/
                        foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
                        {
                            item.canBeSeletced = true;//所有单位可交互
                        }
                    }
                }
            }
        }
    }
示例#15
0
 // Update is called once per frame
 void Update()
 {
     healArmyctrl = getArmyCtrlByMouse();
 }
示例#16
0
    private IEnumerator heal()
    {
        healArmyctrl = null;
        //isStartSelect = true;

        Dispatch(AreoCode.UI, UIEvent.CURSOR_SET_HEART, "治疗光标");
        List <MapPoint>     canhealPoints   = MapSkillType.Instance.GetSkillRange(armyCtrl.armyState);
        List <MapPointCtrl> canhealMapCtrls = MapTools.getMapCtrlByMapPoint(canhealPoints);

        MapTools.setMappointCtrlColor(canhealMapCtrls, healcolor);
        yield return(new WaitUntil(isSelecthealArmy));


        bool canHeal = false;

        foreach (var item in canhealMapCtrls)
        {
            if (healArmyctrl.armyState.Position.X == item.mapPoint.X &&
                healArmyctrl.armyState.Position.Z == item.mapPoint.Z)
            {
                canHeal = true;
                break;
            }
        }
        if (!canHeal)
        {
            Dispatch(AreoCode.UI, UIEvent.CURSOR_SET_NORMAL, "正常光标");
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "不在治疗范围内");
            MapTools.setMappointCtrlColor(canhealMapCtrls);
            healArmyctrl = null;
            yield break;
        }

        if (healArmyctrl.armyState.Hp >= healArmyctrl.armyState.MaxHp)
        {
            Dispatch(AreoCode.UI, UIEvent.CURSOR_SET_NORMAL, "正常光标");
            Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "该单位血量已经达到上限");
            MapTools.setMappointCtrlColor(canhealMapCtrls);
            healArmyctrl = null;
            yield break;
        }



        healArmyctrl.armyState.Hp++;
        Dispatch(AreoCode.UI, UIEvent.CURSOR_SET_NORMAL, "正常光标");
        Dispatch(AreoCode.UI, UIEvent.PROMPT_PANEL_EVENTCODE, "治疗成功");



        Dispatch(AreoCode.UI, UIEvent.CLOSE_ARMY_MENU_PANEL, "关闭单位功能面板");
        Dispatch(AreoCode.UI, UIEvent.SHOW_ARMY_MENU_PANEL, armyCtrl);
        isUsed = true;

        //给对方发送消息
        MapPoint targetMappoint = healArmyctrl.armyState.Position;

        skillDto.Change(armyCtrl.armyState.Race, armyCtrl.armyState.Name, healArmyctrl.armyState.Name, targetMappoint);
        socketMsg.Change(OpCode.FIGHT, FightCode.ARMY_USE_SKILL_CREQ, skillDto);
        Dispatch(AreoCode.NET, NetEvent.SENDMSG, socketMsg);

        MapTools.setMappointCtrlColor(canhealMapCtrls);
    }
示例#17
0
    /// <summary>
    /// 选择兵种协程
    /// </summary>
    /// <returns></returns>
    private IEnumerator selectArmy()
    {
        //清空上一次的选择结果
        SelectArmyType = -1;//能解决诸多BUG
        yield return(new WaitUntil(isSelectArmyType));

        if (SelectArmyType == ArmyMoveType.LAND)
        {
            //选择了陆地兵种
            ArmyCtrl armyCtrl = ArmymapPointCtrl.LandArmy.GetComponent <ArmyCtrl>();

            if (armyCtrl.ArmySelectEvent.Invoke(armyCtrl))
            {
                //和上次选择不一样或第一次选择
                Dispatch(AreoCode.UI, UIEvent.SHOW_ARMY_MENU_PANEL, armyCtrl);

                if (armyCtrl.CanturnMove)
                {
                    foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
                    {
                        item.canBeSeletced = false;
                    }
                    armyCtrl.canBeSeletced = true;
                    armyCtrl.GetCanMoveMapPoint();
                }
            }
            else
            {
                //和上次选择一样
                Dispatch(AreoCode.UI, UIEvent.CLOSE_ARMY_MENU_PANEL, "关闭面板");

                //解蔽选择屏蔽
                foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
                {
                    item.canBeSeletced = true;
                }
            }
        }
        else if (SelectArmyType == ArmyMoveType.SKY)
        {
            //如果选择了飞行单位
            ArmyCtrl armyCtrl = ArmymapPointCtrl.SkyArmy.GetComponent <ArmyCtrl>();
            if (armyCtrl.ArmySelectEvent.Invoke(armyCtrl))
            {
                //和上次选择不一样或第一次选择
                Dispatch(AreoCode.UI, UIEvent.SHOW_ARMY_MENU_PANEL, armyCtrl);

                if (armyCtrl.CanturnMove)
                {
                    foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
                    {
                        item.canBeSeletced = false;
                    }
                    armyCtrl.canBeSeletced = true;
                    armyCtrl.GetCanMoveMapPoint();
                }
            }
            else
            {
                //和上次选择一样
                Dispatch(AreoCode.UI, UIEvent.CLOSE_ARMY_MENU_PANEL, "关闭面板");

                //解蔽选择屏蔽
                foreach (var item in MyArmyCtrlManager.Instance.CardCtrllist)
                {
                    item.canBeSeletced = true;
                }
            }
        }
    }