战斗匹配

点击进入战斗ui界面

控制器

 public class RoomItem
    {
        public UInt64 mRoomId;//房间ID
        public UInt32 mMapId;//地图ID
        public string mOwer;
        public UInt32 mCurNum;//当前人数
        public UInt32 mMaxNum;//最大人数
        public bool mIsPassWord;

        public RoomItem(UInt64 roomId,  UInt32 mapId, string ower, UInt32 curNum, UInt32 maxNum, bool isPassWord)
        {
            mRoomId = roomId;
            mMapId = mapId;
            mOwer = ower;
            mCurNum = curNum;
            mMaxNum = maxNum;
            mIsPassWord = isPassWord;
        }
    }

    public class BattleCtrl : Singleton<BattleCtrl>
    {
        public void Enter()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_BattleEnter);
        }

        public void Exit()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_BattleExit);
        }

        //创建房间
        public void CreateRoom(int mapId, string password)
        {
            CGLCtrl_GameLogin.Instance.CreateRoom(mapId, password);
        }

        //向服务器请求刷新房间列表
        public void AskRoomList()
        {
            CGLCtrl_GameLogin.Instance.AskRoomList();
        }

        //请求加入房间
        public void AskAddRoom(string roomId, string password)
        {
            if (roomId == null || roomId == "" || UInt64.Parse(roomId) <= 0)
            {
                MsgInfoManager.Instance.ShowMsg((int)EErrorCode.eEC_NullBattle);
                EventCenter.Broadcast(EGameEvent.eGameEvent_BattleUpdateRoomList);
                return;
            }

            UInt64 id = UInt64.Parse(roomId);
            if (mRoomList.ContainsKey(id))
            {
                if (mRoomList[id].mIsPassWord && (password == null || password == ""))
                {
                    MsgInfoManager.Instance.ShowMsg((int)EErrorCode.eEC_NULLPassWord);
                    return;
                }
            }

            CGLCtrl_GameLogin.Instance.AddRoom(roomId, password);//讲用户加进来
        }

        //刷新服务器列表
        public void UpdateRoomList(List<GSToGC.RoomInfo> roomList)
        {
            mRoomList.Clear();

            foreach (GSToGC.RoomInfo roomInfo in roomList)
            {
                AddRoomItem((UInt32)roomInfo.roomId, (UInt32)roomInfo.mapId, roomInfo.master, (UInt32)roomInfo.curUserCount,(UInt32)roomInfo.maxUserCount, (roomInfo.ifPwd == 1));
            }

            EventCenter.Broadcast(EGameEvent.eGameEvent_BattleUpdateRoomList);
        }

        //更新房间列表
        private void AddRoomItem(UInt64 roomId,UInt32 mapId,string ower,UInt32 curNum,UInt32 maxNum,bool isPassword)
        {
            RoomItem room = new RoomItem(roomId,mapId,ower,curNum,maxNum, isPassword);
            
            mRoomList.Add(roomId,room);
        }

        //取得房间列表
        public Dictionary<UInt64, RoomItem> GetRoomList()
        {
            return mRoomList;
        }

        //取得房间信息
        public RoomItem GetRoomInfo(UInt32 id)
        {
            if (mRoomList.ContainsKey(id))
            {
                return mRoomList[id];
            }

            return null;
        }

        //申请组队匹配
        public void AskMatchBattle(int mapId, EBattleMatchType mt)
        {
            mMapId = mapId;//地图ID
            mMatchType = mt;//比赛的类型

            CGLCtrl_GameLogin.Instance.AskMatchBattle(mapId, mt); //请求战斗匹配
        }

        //申请创建新手战役
        public void AskCreateGuideBattle(int mapId, AskCSCreateGuideBattle.guidetype mGtype)
        {
            mMapId = mapId;

            UIGuideCtrl.Instance.GuideBattleType(mGtype);

            CGLCtrl_GameLogin.Instance.AskCSToCreateGuideBattle(mapId, mGtype);
        }

        public int GetMapId()
        {
            return mMapId;
        }

        public EBattleMatchType GetMatchType()
        {
            return mMatchType;
        }

        Dictionary<UInt64, RoomItem> mRoomList = new Dictionary<UInt64, RoomItem>();

        private int mMapId = 0;
        private EBattleMatchType mMatchType = EBattleMatchType.EBMT_Normal;
    }

界面

 //大厅战斗主界面,包括创建房间,加入房间, 匹配选择等
    public class BattleWindow : BaseWindow
    {
        public BattleWindow()
        {
            mScenesType = EScenesType.EST_Login;
            mResName = GameConstDefine.LoadGameBattleUI;
            mResident = true;
        }

        ////////////////////////////继承接口/////////////////////////
        //类对象初始化
        public override void Init()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_BattleEnter, Show);
            EventCenter.AddListener(EGameEvent.eGameEvent_BattleExit, Hide);
            EventCenter.AddListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //类对象释放
        public override void Realse()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_BattleEnter, Show);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_BattleExit, Hide);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //窗口控件初始化
        protected override void InitWidget()
        {
            //创建房间
            mCustomToggle = mRoot.FindChild("ModeSelect/Custom").GetComponent<UIToggle>();
            mCustomMapGrid = mRoot.FindChild("CustomInterface/CreateBattles/Mapselect/Grid");
            mRoomPassword = mRoot.FindChild("CustomInterface/CreateBattles/Password").GetComponent<UIInput>();
            mCreateRoom = mRoot.FindChild("CustomInterface/CreateBattles/CreateButton").gameObject;

            GameObject tranning = mRoot.FindChild("ModeSelect/Training").gameObject;
            mTranningToggle = tranning.GetComponent<UIToggle>();
            UIGuideCtrl.Instance.AddUiGuideEventBtn(tranning);

            EventDelegate.Add(mCustomToggle.onChange, OnCustom);//自定义
            EventDelegate.Add(mTranningToggle.onChange, OnTranning);//训练
            UIEventListener.Get(mCreateRoom).onClick += OnCreateRoom;//创建房间
            
            //加入房间
            mAddRoomTG = mRoot.FindChild("CustomInterface/JoinBtn").GetComponent<UIToggle>();
            mRoomListGrid = mRoot.FindChild("CustomInterface/JoinBattles/RoomList/Grid");
            mJoinBt = mRoot.FindChild("CustomInterface/JoinBattles/Button/Join").GetComponent<UIButton>();
            mRefreshBt = mRoot.FindChild("CustomInterface/JoinBattles/Button/Refresh").GetComponent<UIButton>();
            mSearchBt = mRoot.FindChild("CustomInterface/JoinBattles/Button/Search").GetComponent<UIButton>();

            mPasswordPanel = mRoot.FindChild("CustomInterface/JoinBattles/PasswordInput");
            mPasswordInput = mRoot.FindChild("CustomInterface/JoinBattles/PasswordInput/Password").GetComponent<UIInput>();
            mAddJoin = mRoot.FindChild("CustomInterface/JoinBattles/PasswordInput/Join").GetComponent<UIButton>();
            mAddBack = mRoot.FindChild("CustomInterface/JoinBattles/PasswordInput/Back").GetComponent<UIButton>();
            

            EventDelegate.Add(mAddRoomTG.onChange, OnShowAddRoomPanel);
            EventDelegate.Add(mJoinBt.onClick, OnJoin);
            EventDelegate.Add(mRefreshBt.onClick, OnRefresh);
            EventDelegate.Add(mSearchBt.onClick, OnSearch);

            EventDelegate.Add(mAddJoin.onClick, OnAddJoinRoom);
            EventDelegate.Add(mAddBack.onClick, OnAddBack);

            //查找房间
            mSearchInterface = mRoot.FindChild("CustomInterface/JoinBattles/SearchInterface");
            mSearchRoomIDInput = mRoot.FindChild("CustomInterface/JoinBattles/SearchInterface/RoomID").GetComponent<UIInput>();
            mSearchPassWordInput = mRoot.FindChild("CustomInterface/JoinBattles/SearchInterface/Password").GetComponent<UIInput>();
            mSearchAddBt = mRoot.FindChild("CustomInterface/JoinBattles/SearchInterface/Join").GetComponent<UIButton>();
            mSearchBackBt = mRoot.FindChild("CustomInterface/JoinBattles/SearchInterface/Back").GetComponent<UIButton>(); ;

            EventDelegate.Add(mSearchAddBt.onClick, OnSearchJoinRoom);
            EventDelegate.Add(mSearchBackBt.onClick, OnSearchBack);

            //匹配
            mMatchToggle = mRoot.FindChild("ModeSelect/Match").GetComponent<UIToggle>();
            mMatChNormal = mRoot.FindChild("MatchInterface/BattleMode/Normal").GetComponent<UIToggle>();
            mMatChAi = mRoot.FindChild("MatchInterface/BattleMode/AI").GetComponent<UIToggle>();
            mMatchRank = mRoot.FindChild("MatchInterface/BattleMode/RankUp").GetComponent<UIToggle>();
            mMatchMapGrid = mRoot.FindChild("MatchInterface/MapSelect/Grid");

            //新手引导
            mMap1 = mRoot.FindChild("TrainingInterface/MapSelect/Grid/1001").gameObject;
            mMap2 = mRoot.FindChild("TrainingInterface/MapSelect/Grid/1002").gameObject;
            UIGuideCtrl.Instance.AddUiGuideEventBtn(mMap1);
            //UIGuideCtrl.Instance.AddUiGuideEventBtn(mMap2);

            EventDelegate.Add(mMatChNormal.onChange, OnMatchModelChange);
            EventDelegate.Add(mMatChAi.onChange, OnMatchModelChange);
            EventDelegate.Add(mMatchRank.onChange, OnMatchModelChange);

            mRoomID = 0;
            mMatchType = EBattleMatchType.EBMT_Normal;
            mJoinBt.isEnabled = false;
        }

        //窗口控件释放
        protected override void RealseWidget()
        {

        }

     
        //游戏事件注册
        protected override void OnAddListener()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_BattleUpdateRoomList, UpdateRoomList);
            EventCenter.AddListener<EErrorCode>(EGameEvent.eGameEvent_AskFriendEorr, EventError);
            EventCenter.AddListener<EErrorCode>(EGameEvent.eGameEvent_AskAddInBattle, EventError);
        }

        //游戏事件注消
        protected override void OnRemoveListener()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_BattleUpdateRoomList, UpdateRoomList);
            EventCenter.RemoveListener<EErrorCode>(EGameEvent.eGameEvent_AskFriendEorr, EventError);
            EventCenter.AddListener<EErrorCode>(EGameEvent.eGameEvent_AskAddInBattle, EventError);
            
        }

        //显示
        public override void OnEnable()
        {
        }

        //隐藏
        public override void OnDisable()
        {
            //因为常驻,关闭时重置选项
            mMapId = 0;
            OnCustomMapRefresh();
            mSearchInterface.gameObject.SetActive(false);
            mPasswordPanel.gameObject.SetActive(false);
        }

        private void EventError(EErrorCode arg1)
        {
            MsgInfoManager.Instance.ShowMsg((int)arg1);
        }

        //新手训练
        public void OnTranning()
        {
            if (mTranningToggle.value)
            {
                OnTranningMapRefresh();
            }
        }  

        public void OnCustom()
        {
            if(mCustomToggle.value)
            {
                OnCustomMapRefresh();
            }
        }   

        public void OnTranningMapRefresh()
        {
            UIEventListener.Get(mMap1).onClick += OnGuideSelectMap;//选择地图
            UIEventListener.Get(mMap2).onClick += OnGuideSelectMap;
        }

        //刷新自定义地图列表
        public void OnCustomMapRefresh()
        {
            if (mCustomToggle.value)
            {
                LoadUiResource.ClearAllChild(mCustomMapGrid);

                List<MapInfo> mapList = MapLoadConfig.Instance.GetMapList(EBattleMatchType.EBMT_None);

                for (int i = 0; i < mapList.Count; i++)
                {
                    if (mapList[i].mIsTrain == false)
                    {
                        AddCustomMapItem(mapList[i]);
                    }
                }

                mMapId = 0;
                mRoomPassword.value = "";
            }

            mCustomMapGrid.GetComponent<UIGrid>().Reposition();
        }

        //增加自定义地图选项
        private void AddCustomMapItem(MapInfo info)
        {
            GameObject obj = LoadUiResource.AddChildObject(mCustomMapGrid, GameConstDefine.LoadGameLobbyCustomMapItem);
            if (obj != null)
            {
                obj.name = info.mId.ToString();
                obj.transform.FindChild("tSprite").GetComponent<UISprite>().spriteName = info.mShowPic;
                UIEventListener.Get(obj).onClick += OnCustomSelectMap;
            }
        }

        //自定义选择地图
        private void OnCustomSelectMap(GameObject obj)
        {
            mMapId = Convert.ToInt32(obj.name);
        }

        //新建房间
        public void OnCreateRoom(GameObject go)
        {
            if (mMapId <= 0)
            {
                MsgInfoManager.Instance.ShowMsg(40051);
                return;
            }
            BattleCtrl.Instance.CreateRoom(mMapId, mRoomPassword.value);
        }

        //显示房间列表
        public void OnShowAddRoomPanel()
        {
            mRoomPassword.value = "";
            OnRefresh();
        }

        //打开加入面板
        public void OnJoin()
        {
            if (mCurRoomItem == null || mRoomID == 0)
            {
                return;
            }

            RoomItem room = BattleCtrl.Instance.GetRoomInfo(mRoomID);
            if (room!=null && !room.mIsPassWord)
            {
                BattleCtrl.Instance.AskAddRoom(mRoomID.ToString(), "0");
            }
            else
            {
                mPasswordPanel.gameObject.SetActive(true);
                mPasswordInput.value = "";
            }
         }

        //刷新房间列表
        public void OnRefresh()
        {
             BattleCtrl.Instance.AskRoomList();
        }

        //加入房间
        public void OnAddJoinRoom()
        {
            BattleCtrl.Instance.AskAddRoom(mRoomID.ToString(), mPasswordInput.text);
        }

        //加入房间返回
        public void OnAddBack()
        {
            mPasswordPanel.gameObject.SetActive(false);
        }

        //更新房间列表
        private void UpdateRoomList()
        {
            //清空原来的列表
            LoadUiResource.ClearAllChild(mRoomListGrid);

            mCurRoomItem = null;
            mRoomID = 0;
            mJoinBt.isEnabled = false;

            //加入新的列表
            Dictionary<UInt64, RoomItem> RoomList = BattleCtrl.Instance.GetRoomList();
            foreach (RoomItem roomInfo in RoomList.Values)
            {
                AddRoomItem(roomInfo);
            }

            //默认选择第一个
            if (mRoomListGrid.childCount > 0)
            {
                mRoomListGrid.GetChild(0).GetComponent<UIToggle>().value = true;
            }

            mRoomListGrid.GetComponent<UIGrid>().Reposition();
        }

        //加入一个房间项
        private void AddRoomItem(RoomItem roomInfo)
        {
            GameObject gameObj = LoadUiResource.AddChildObject(mRoomListGrid, GameConstDefine.LoadGameLobbyRoomItemUI);

            if (gameObj == null)
                return;

            Transform obj = gameObj.transform;

            if (obj != null)
            {
                mRoomIDLabel = obj.FindChild("RoomID").GetComponent<UILabel>();
                mRoomIDLabel.text = roomInfo.mRoomId.ToString();

                mMapName = obj.FindChild("MapName").GetComponent<UILabel>();
                MapInfo mapInfo = MapLoadConfig.Instance.GetMapInfo(roomInfo.mMapId);
                if (mapInfo == null)
                {
                    Debug.LogError("mapLoadConfig Not find");
                    return;
                }
                mMapName.text = mapInfo.mName;

                mCreator = obj.FindChild("Creator").GetComponent<UILabel>();
                mCreator.text = roomInfo.mOwer;

                mStatus = obj.FindChild("Status").GetComponent<UILabel>();
                mStatus.text = roomInfo.mCurNum.ToString() + "/" + roomInfo.mMaxNum.ToString();
                
                mLock =   obj.FindChild("Lock").gameObject;
                mLock.SetActive(roomInfo.mIsPassWord);

                mHighlight = obj.FindChild("Highlight").gameObject;
                mHighlight.SetActive(false);
            }

            UIToggle item = obj.GetComponent<UIToggle>();
            EventDelegate.Add(item.onChange, OnRoomItemToggle);
        }

        //选择房间
        public void OnRoomItemToggle()
        {
            if (UIToggle.current != null && UIToggle.current.value)
            {
                if (mCurRoomItem != null)
                {
                    mHighlight = mCurRoomItem.FindChild("Highlight").gameObject;
                    mHighlight.SetActive(false);
                }

                mCurRoomItem = UIToggle.current.transform;

                mHighlight = mCurRoomItem.FindChild("Highlight").gameObject;
                mHighlight.SetActive(true);

                mRoomIDLabel = mCurRoomItem.FindChild("RoomID").GetComponent<UILabel>();
                mRoomID = UInt32.Parse(mRoomIDLabel.text);

                mJoinBt.isEnabled = true;
            }
        }

        //打开查找界面
        public void OnSearch()
        {
            mSearchInterface.gameObject.SetActive(true);
            mSearchRoomIDInput.value = "";
            mSearchPassWordInput.value = "";
        }

        //加入房间(通过查找)
        public void OnSearchJoinRoom()
        {
            BattleCtrl.Instance.AskAddRoom(mSearchRoomIDInput.text,mSearchPassWordInput.text);
        }

        //查找返回
        public void OnSearchBack()
        {
             mSearchInterface.gameObject.SetActive(false);
        }

        //匹配模式切换
        public void OnMatchModelChange()
        {
            if (UIToggle.current != null && UIToggle.current.isChecked)
            {
                LoadUiResource.ClearAllChild(mMatchMapGrid);

                List<MapInfo> mapList = new List<MapInfo>();
                if (UIToggle.current == mMatChNormal)
                {
                    mapList = MapLoadConfig.Instance.GetMapList(EBattleMatchType.EBMT_Normal);//加载当前的地图
                    mMatchType = EBattleMatchType.EBMT_Normal;
                }
                else if (UIToggle.current == mMatChAi)
                {
                    mapList = MapLoadConfig.Instance.GetMapList(EBattleMatchType.EBMT_Ai);
                    mMatchType = EBattleMatchType.EBMT_Ai;
                }
                else if (UIToggle.current == mMatchRank)
                {
                    mapList = MapLoadConfig.Instance.GetMapList(EBattleMatchType.EBMT_Rank);
                    mMatchType = EBattleMatchType.EBMT_Rank;
                }

                for (int i = 0; i < mapList.Count; i++)
                {
                    AddMatchMapItem(mapList[i]);//增加匹配地图项
                }
            }

            mMatchMapGrid.GetComponent<UIGrid>().Reposition();
        }

        //增加匹配地图选项
        private void AddMatchMapItem(MapInfo info)
        {
            GameObject obj = LoadUiResource.AddChildObject(mMatchMapGrid, GameConstDefine.LoadGameLobbyMatchMapItem);
            if (obj != null)
            {
                obj.name = info.mId.ToString(); 
                obj.transform.FindChild("tSprite").GetComponent<UISprite>().spriteName = info.mShowPic;
                UIEventListener.Get(obj).onClick += OnMatchSelectMap;//选择地图
             }
        }

        //新手训练选择地图
        private void OnGuideSelectMap(GameObject obj)
        {
            if (obj == mMap1)
            {
                BattleCtrl.Instance.AskCreateGuideBattle(1000, GCToCS.AskCSCreateGuideBattle.guidetype.first);
            }
            else
            {
                GameLogic.Instance.IsQuickBattle = true;
                BattleCtrl.Instance.AskCreateGuideBattle(1001, GCToCS.AskCSCreateGuideBattle.guidetype.second);
            }
            
        }

        //匹配选择地图
        private void OnMatchSelectMap(GameObject obj)
        {
            BattleCtrl.Instance.AskMatchBattle(Convert.ToInt32(obj.name), mMatchType);
        }
        
        //创建房间
        Transform mCustomMapGrid;    //地图列表
        UIToggle mMatchToggle;
        UIToggle mCustomToggle;
        UIToggle mTranningToggle;
        UIInput mRoomPassword;
        GameObject mCreateRoom;
        Int32 mMapId;

        //加入房间
        UIToggle mAddRoomTG;
        Transform mRoomListGrid;
        Transform mCurRoomItem;

        UILabel mRoomIDLabel;
        UILabel mMapName;
        UILabel mCreator;
        UILabel mStatus;
        GameObject mLock;
        GameObject mHighlight;

        UIButton mJoinBt;
        UIButton mRefreshBt;
        UIButton mSearchBt;

        Transform mPasswordPanel;
        UIInput mPasswordInput;
        UIButton mAddJoin;
        UIButton mAddBack;

        //查找
        Transform mSearchInterface;
        UIInput mSearchRoomIDInput;
        UIInput mSearchPassWordInput;
        UIButton mSearchAddBt;
        UIButton mSearchBackBt;

        //匹配
        UIToggle mMatChNormal;   //普通
        UIToggle mMatChAi;       //人机
        UIToggle mMatchRank;     //天梯
        Transform mMatchMapGrid;    //地图列表

        //新手引导
        GameObject mMap1;
        GameObject mMap2;

        //数据
        UInt32 mRoomID;    //房间ID
        EBattleMatchType mMatchType;  // 匹配模式

}

匹配的控制类,包含好几个窗体的控制 

 public class Teammate
    {
        public uint mPostion;
        public string mName;
        public string mPic;
        public uint mLv;

        public Teammate(uint pos, string name, string pic, uint lv)
        {
            mPostion = pos;
            mName = name;
            mPic = pic;
            mLv = lv;
        }
    }

    public class TeamMatchCtrl : Singleton<TeamMatchCtrl>
    {

        public void Enter()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_TeamMatchEnter);
        }

        public void Exit()
        {
            mTeammateList.Clear();

            EventCenter.Broadcast(EGameEvent.eGameEvent_TeamMatchExit);
        }

        //邀请好友组队匹配
        public void InvitationFriend(string nickName)
        {
            CGLCtrl_GameLogin.Instance.AskInvitationFriend(nickName);
        }

        //新增队友
        public void AddTeammate(uint pos,string name, string pic, uint lv)
        {
            Teammate teammate = new Teammate(pos,name, pic, lv);
            mTeammateList.Add(name, teammate);

            EventCenter.Broadcast<Teammate>(EGameEvent.eGameEvent_TeamMatchAddTeammate, teammate);
        }

        //删除队友
        public void DelTeammate(string nickName)
        {
            mTeammateList.Remove(nickName);

            EventCenter.Broadcast<string>(EGameEvent.eGameEvent_TeamMatchDelTeammate, nickName);
        }

        //请求开始匹配
        public void AskStartMatch()
        {
            CGLCtrl_GameLogin.Instance.AskStartTeamMatch();
        }

        //请求停止匹配
        public void AskStopMatch()
        {
            CGLCtrl_GameLogin.Instance.AskStopTeamMatch();
        }

        //开始匹配
        public void StartMatchSearching()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_TeamMatchSearchinEnter);
        }

        //停止匹配
        public void StopMatchSearching()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_TeamMatchSearchinExit);
        }

        //取得队友列表
        public Dictionary<string,Teammate> GetTeammateList()
        {
            return mTeammateList;
        }

        //打开组队匹配
        public void InitTeamBaseInfo(uint mapId, uint matchType)
        {
            mMapId = mapId;
            mMatchType = (EBattleMatchType)matchType;

            mTeammateList.Clear();
        }

        //打开组队邀请
        public void ShowInvitation(string name)
        {
            EventCenter.Broadcast<string>(EGameEvent.eGameEvent_TeamMatchInvitationEnter, name);
        }

       

        //隐藏组队邀请
        public void HideInvitation()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_TeamMatchInvitationExit);
        }

        //接受组队邀请
        public void AccpetInvitation(string name)
        {
            CGLCtrl_GameLogin.Instance.AskAcceptInvitation(name);
        }

        //打开服务器邀请
        public void ShowServerInvitation(uint mapid, uint fightid)
        {
            EventCenter.Broadcast<uint, uint>(EGameEvent.eGameEvent_ServerMatchInvitationEnter, mapid, fightid);
        }

        //反馈服务器邀请
        public void ResponseServerInvitation(uint mapid, uint fightid, bool accpet)
        {
            CGLCtrl_GameLogin.Instance.AskResponseServerInvitation(mapid, fightid, accpet);
        }      

        //退出队伍
        public void QuitTeam()
        {
            CGLCtrl_GameLogin.Instance.AskQuitTeam();
        }

        public bool IsTeamFull()
        {
            MapInfo info = MapLoadConfig.Instance.GetMapInfo(mMapId);

            if (info != null && mTeammateList.Count >= (info.mPlayerNum / 2))
            {
                return true;
            }

            return false;
        }

        Dictionary<string, Teammate> mTeammateList = new Dictionary<string,Teammate>();

        public uint GetMapId()
        {
            return mMapId;
        }

        public EBattleMatchType GetMatchType()
        {
            return mMatchType;
        }

        private uint mMapId = 0;
        private EBattleMatchType mMatchType = EBattleMatchType.EBMT_Normal;
    }

 窗体

 public class TeamMatchWindow : BaseWindow
    {
        public TeamMatchWindow()
        {
            mScenesType = EScenesType.EST_Login;
            mResName = GameConstDefine.LoadGameTeamMatchUI;
            mResident = false;
        }

        ////////////////////////////继承接口/////////////////////////
        //类对象初始化
        public override void Init()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_TeamMatchEnter, Show);
            EventCenter.AddListener(EGameEvent.eGameEvent_TeamMatchExit, Hide);
            EventCenter.AddListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //类对象释放
        public override void Realse()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_TeamMatchEnter, Show);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_TeamMatchExit, Hide);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //窗口控件初始化
        protected override void InitWidget()
        {
            //地图
            mMapNameLabel = mRoot.FindChild("MapInfo/Name").GetComponent<UILabel>();
            mMapTypeLabel = mRoot.FindChild("MapInfo/Type").GetComponent<UILabel>();
            mQuitBtn = mRoot.FindChild("QuitBtn").GetComponent<UIButton>();
            mMatchBtn = mRoot.FindChild("MatchBtn").GetComponent<UIButton>();

            //好友
            mFriendList = mRoot.FindChild("InvitationList/Grid");
            mInvitation = mRoot.FindChild("InvitationBtn").GetComponent<UIButton>();

            //队友
            mTeammateList = mRoot.FindChild("TeamMember");

            EventDelegate.Add(mQuitBtn.onClick, OnQuit);
            EventDelegate.Add(mInvitation.onClick, OnInvitation);//邀请
            EventDelegate.Add(mMatchBtn.onClick, OnMatch);//匹配
        }

        //窗口控件释放
        protected override void RealseWidget()
        {

        }

     
        //游戏事件注册
        protected override void OnAddListener()
        {
            EventCenter.AddListener<Teammate>(EGameEvent.eGameEvent_TeamMatchAddTeammate, AddTeammate);
            EventCenter.AddListener<string>(EGameEvent.eGameEvent_TeamMatchDelTeammate, DelTeammate);

            EventCenter.AddListener<Friend>(EGameEvent.eGameEvent_CreateFriendPrefab, AddFriend);
            EventCenter.AddListener<UInt64>(EGameEvent.eGameEvent_RemoveFriend, DelFriend);
            EventCenter.AddListener<UInt64>(EGameEvent.eGameEvent_FriendChangeInfo, ChangeOnLine);
        }

        //游戏事件注消
        protected override void OnRemoveListener()
        {
            EventCenter.RemoveListener<Teammate>(EGameEvent.eGameEvent_TeamMatchAddTeammate, AddTeammate);
            EventCenter.RemoveListener<string>(EGameEvent.eGameEvent_TeamMatchDelTeammate, DelTeammate);

            EventCenter.RemoveListener<Friend>(EGameEvent.eGameEvent_CreateFriendPrefab, AddFriend);
            EventCenter.RemoveListener<UInt64>(EGameEvent.eGameEvent_RemoveFriend, DelFriend);
            EventCenter.RemoveListener<UInt64>(EGameEvent.eGameEvent_FriendChangeInfo, ChangeOnLine);
            
        }

        //显示
        public override void OnEnable()
        {
            //地图信息填充
            MapInfo info = MapLoadConfig.Instance.GetMapInfo(TeamMatchCtrl.Instance.GetMapId());

            if (info != null)
            {
                mMapNameLabel.text = info.mName;
                switch (TeamMatchCtrl.Instance.GetMatchType())
                {
                    case EBattleMatchType.EBMT_Normal:
                         mMapTypeLabel.text = "(" + ConfigReader.GetMsgInfo(40038).content + ")";
                         break;
                    case EBattleMatchType.EBMT_Rank:
                         mMapTypeLabel.text = "(" + ConfigReader.GetMsgInfo(40040).content + ")";
                        break;
                    case EBattleMatchType.EBMT_Ai:
                        mMapTypeLabel.text = "(" + ConfigReader.GetMsgInfo(40039).content + ")";
                        break;

                }
            }

            //更新好友列表
            RefreshFrienList();

            //清空队友
            LoadUiResource.ClearAllChild(mTeammateList);
        }

        //隐藏
        public override void OnDisable()
        {

        }

        //玩家好友列表更新
        private void RefreshFrienList(string name = "")
        {
            LoadUiResource.ClearAllChild(mFriendList);

            foreach (Friend friend in FriendManager.Instance.AllFriends.Values)
            {
                if (TeamMatchCtrl.Instance.GetTeammateList().ContainsKey(friend.NiceName) || (friend.isOnline == false))
                    continue;

                AddFriendItem(friend);
            }

            mFriendList.GetComponent<UIGrid>().Reposition();

            mInvitation.isEnabled = false;
        }

         //增加一个好友
        private void AddFriend(Friend friend)
        {
            if (friend.isOnline == true)
            {
                AddFriendItem(friend);
                mFriendList.GetComponent<UIGrid>().Reposition();
            }
        }

        
        //更新好友属性改变(在线否)
        private void ChangeOnLine(UInt64 temp)
        {
            if (FriendManager.Instance.AllFriends.ContainsKey(temp))
            {
                Friend friend = FriendManager.Instance.AllFriends[temp];
                if (friend.isOnline == false)
                {
                    LoadUiResource.ClearOneChild(mFriendList,friend.NiceName);
                    mFriendList.GetComponent<UIGrid>().Reposition();

                    OnFriendSelect(null);
                }
                else
                {
                    AddFriend(friend);
                }
            }
        }

        //删除一个好友
        private void DelFriend(UInt64 temp)
        {
            if (FriendManager.Instance.AllFriends.ContainsKey(temp))
            {
                LoadUiResource.ClearOneChild(mFriendList, FriendManager.Instance.AllFriends[temp].NiceName);

                mFriendList.GetComponent<UIGrid>().Reposition();

                OnFriendSelect(null);
            }
        }

        //增加一个好友选项
        private void AddFriendItem(Friend info)
        {
            GameObject obj = LoadUiResource.AddChildObject(mFriendList, GameConstDefine.LoadGameMatchFriendsItem);
            if (obj != null)
            {
                obj.name = info.NiceName;
                obj.transform.FindChild("Name").GetComponent<UILabel>().text = info.NiceName;
                UIEventListener.Get(obj).onClick += OnFriendSelect;
            }
        }

        private void OnFriendSelect(GameObject obj)
        {
            if (mIsLeader)
            {
                int count = 0;
                for (int i = 0; i < mFriendList.childCount; i++)
                {
                    if (mFriendList.GetChild(i).GetComponent<UIToggle>().value)
                    {
                        ++count;
                    }
                }

                if (count > 0 && !TeamMatchCtrl.Instance.IsTeamFull())
                {
                    mInvitation.isEnabled = true;
                }
                else
                {
                    mInvitation.isEnabled = false;
                }
            }
        }

        //邀请
        private void OnInvitation()
        {
            int count = 0;
            for (int i = 0; i < mFriendList.childCount; i++)
            {
                if (mFriendList.GetChild(i).GetComponent<UIToggle>().isChecked)
                {
                    TeamMatchCtrl.Instance.InvitationFriend(mFriendList.GetChild(i).gameObject.name);
                    ++count;
                }
            }

            if (count > 0)
            {
                MsgInfoManager.Instance.ShowMsg(-130775);
            }
            else
            {
                MsgInfoManager.Instance.ShowMsg(40049);
            }
            
        }

        //匹配
        private void OnMatch()
        {
            TeamMatchCtrl.Instance.AskStartMatch();
        }

        //更新队友列表
        private void RefreshTeammateList()
        {
            //更新功能按钮状态
            if (GameUserModel.Instance.GameUserNick == mMasterName)
            {
                mIsLeader = true;
                mMatchBtn.isEnabled = true;
            }
            else
            {
                mIsLeader = false;
                mMatchBtn.isEnabled = false;
            }

            mTeammateList.GetComponent<UIGrid>().Reposition();
        }

        //新增一个队友
        private void AddTeammate(Teammate team)
        {
            GameObject obj = LoadUiResource.AddChildObject(mTeammateList, GameConstDefine.LoadGameMatchTeammateItem);
            if (obj != null)
            {
                obj.name = team.mName;
                obj.transform.FindChild("Name").GetComponent<UILabel>().text = team.mName;
                obj.transform.FindChild("Head").GetComponent<UISprite>().spriteName = team.mPic;
                obj.transform.FindChild("Level").GetComponent<UILabel>().text = "LV" + team.mLv;

                //找出队长名称
                if (team.mPostion == 0)
                {
                    mMasterName = team.mName;
                }

                //删除好友
                foreach (Friend friend in FriendManager.Instance.AllFriends.Values)
                {
                    if (friend.NiceName == team.mName)
                    {
                        DelFriend(friend.SGUID);
                    }
                }

                RefreshTeammateList();
            }
        }

        //删除一个队友
        private void DelTeammate(string name)
        {
            LoadUiResource.ClearOneChild(mTeammateList,name);

            //增加好友
            foreach (Friend friend in FriendManager.Instance.AllFriends.Values)
            {
                if (friend.NiceName == name && friend.isOnline == true)
                {
                    AddFriend(friend);
                }
            }

            RefreshTeammateList();

            OnFriendSelect(null);
        }


        //退出
        public void OnQuit()
        {
            TeamMatchCtrl.Instance.QuitTeam();
        }

        UILabel mMapNameLabel;
        UILabel mMapTypeLabel;

        Transform mFriendList;
        Transform mTeammateList;
        UIButton mInvitation;
        UIButton mMatchBtn;
        UIButton mQuitBtn;

        string mMasterName;
       string mCurFriend;
       bool mIsLeader;
    }

 public class TeamMatchSearchingWindow : BaseWindow
    {
        public TeamMatchSearchingWindow()
        {
            mScenesType = EScenesType.EST_Login;
            mResName = GameConstDefine.LoadGameMatchSearchingUI;
            mResident = false;
        }

        ////////////////////////////继承接口/////////////////////////
        //类对象初始化
        public override void Init()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_TeamMatchSearchinEnter, Show);
            EventCenter.AddListener(EGameEvent.eGameEvent_TeamMatchSearchinExit, Hide);
            EventCenter.AddListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //类对象释放
        public override void Realse()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_TeamMatchSearchinEnter, Show);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_TeamMatchSearchinExit, Hide);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_LobbyExit, Hide);
        }

        //窗口控件初始化
        protected override void InitWidget()
        {
            mTimeLabel = mRoot.FindChild("Time").GetComponent<UILabel>();
            mNumberLabel = mRoot.FindChild("MatchedNum").GetComponent<UILabel>();
            mCancel = mRoot.FindChild("CancelBtn").GetComponent<UIButton>();

            EventDelegate.Add(mCancel.onClick, OnCancel);
        }

        //窗口控件释放
        protected override void RealseWidget()
        {

        }

     
        //游戏事件注册
        protected override void OnAddListener()
        {
            EventCenter.AddListener<int,int>(EGameEvent.eGameEvent_MatchNumber, ChangeMatchNumber);
        }

        //游戏事件注消
        protected override void OnRemoveListener()
        {
            EventCenter.RemoveListener<int,int>(EGameEvent.eGameEvent_MatchNumber, ChangeMatchNumber);
        }

        //显示
        public override void OnEnable()
        {
            mIsDownTime = true;
        }

        //隐藏
        public override void OnDisable()
        {
            mIsDownTime = false;
            mStartTime = 0;
        }

        //时间的更新
        public override void Update(float deltaTime)
        {
            if (mIsDownTime)
            {
                mStartTime += Time.deltaTime;
                ShowCount(mTimeLabel, (int)mStartTime);
            }
        }

        //显示时间
        private void ShowCount(UILabel label, int time)
        {
            string timeString = "";
            if (time < 60)
                timeString = "00:" + SecondToStr(time);
            else
                timeString = SecondToStr(time / 60) + ":" + SecondToStr(time % 60);

            label.text = timeString;
        }

        private string SecondToStr(int time)
        {
            string timeString = "";
            if (time < 10)
                timeString = "0" + time.ToString();
            else
                timeString = "" + time.ToString();

            return timeString;
        }

        public void OnCancel()
        {
            TeamMatchCtrl.Instance.AskStopMatch();//取消的时候告诉服务器

            Hide();
        }

        public void ChangeMatchNumber(int cur,int max)
        {
            mNumberLabel.text = cur.ToString() + "/" + max.ToString();
        }

        UILabel mTimeLabel;
        UILabel mNumberLabel;
        UIButton mCancel;

        private float mStartTime = 0;
        private bool mIsDownTime = false;
    }

 

  class HeroState : IGameState
    {
        GameStateType stateTo;

        GameObject mScenesRoot;

        GameObject mUIRoot;

        public HeroState()
        {
        }

        public GameStateType GetStateType()
        {
            return GameStateType.GS_Hero;
        }

        public void SetStateTo(GameStateType gs)
        {
            stateTo = gs;
        }

        //界面初始化出来
        public void Enter()
        {
            SetStateTo(GameStateType.GS_Continue);
           

            HeroCtrl.Instance.Enter();

            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_UIBGSOUND, ResourceType.ASSET);
          
            AudioClip clip = clipUnit.Asset as AudioClip;
            AudioManager.Instance.PlayBgAudio(clip);
                                                
            EventCenter.AddListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);
            EventCenter.AddListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);
            EventCenter.AddListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); 
        }

        public void Exit()
        {
            EventCenter.RemoveListener<CEvent>(EGameEvent.eGameEvent_Loading, OnEvent);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_ConnectServerFail, OnConnectServerFail);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_SdkLogOff, SdkLogOff); 

            HeroCtrl.Instance.Exit();
        }

        public void OnConnectServerFail()
        {
            EventCenter.Broadcast<EMessageType>(EGameEvent.eGameEvent_ShowMessage, EMessageType.EMT_Reconnect);
        }

        public void FixedUpdate(float fixedDeltaTime)
        {

        }

        public GameStateType Update(float fDeltaTime)
        {
            return stateTo;
        }

        public void OnEvent(CEvent evt)
        {
            switch (evt.GetEventId())
            {
                case EGameEvent.eGameEvent_Loading:
                    {
                        GameStateType stateType = (GameStateType)evt.GetParam("NextState");
                        LoadingState lState = GameStateManager.Instance.getState(GameStateType.GS_Loading) as LoadingState;
                        lState.SetNextState(stateType);
                        lState.SetFrontScenes(View.EScenesType.EST_Login);
                        SetStateTo(GameStateType.GS_Loading);
                    }
                   
                    break;
            }
        }

        private void SdkLogOff()
        {
            GameMethod.LogOutToLogin();
            SetStateTo(GameStateType.GS_Login);
        }
    }

 

  public class HeroCtrl : Singleton<HeroCtrl>
    {
        public void Enter()
        {
            HeroCtrl.Instance.SetSelectState(HeroCtrl.HeroSelectState.EnterSelect);
            EventCenter.Broadcast(EGameEvent.eGameEvent_HeroEnter);
        }

        public void Exit()
        {
            EventCenter.Broadcast(EGameEvent.eGameEvent_HeroExit);

            if (mAudioSource != null)
                mAudioSource.Stop();
        }

		public void SetSelectState(HeroSelectState state){
			selectState = state;
			switch(state){
			case HeroSelectState.InitSelect:
				Init();
				break;
			case HeroSelectState.EnterSelect:
				EnterSelectHero();
				break;
			case HeroSelectState.RandomSelect:
				EnterRandomHero();
				break;
			case HeroSelectState.OutSelect:
				//Exit();
                Debug.LogError("HeroSelectState.OutSelect");
				break;
			}
		}

		public void AddPreSelectHero(uint index,int heroId)
        {
            //玩家预选择英雄
			foreach(var item in PlayerManager.Instance.AccountDic.Values){
				if(index == item.GameUserSeat){
					if(heroSelectDic.ContainsKey(item)){
						heroSelectDic.Remove(item);
					}
					heroSelectDic.Add(item,heroId);
					break;
				}
			}

            EventCenter.Broadcast(EGameEvent.eGameEvent_HeroPreSelect);
			
        }

		public void AddRealSelectHero(uint index,int heroId)
        {
            //玩家确定英雄
			foreach(var item in PlayerManager.Instance.AccountDic.Values){
                if (index != item.GameUserSeat){
                    continue;
                }
				if(heroSelectDic.ContainsKey(item)){
					heroSelectDic.Remove(item);
				}
                if (index == PlayerManager.Instance.LocalAccount.GameUserSeat)
                {
                    if (selectState == HeroSelectState.RandomSelect) {
                        EventCenter.Broadcast<int>(EGameEvent.eGameEvent_HeroRealSelect, heroId);
                    }
                    else {
                        PlayLocalSelectSound(heroId);
                    }
                }
				heroSureSelectDic.Add(item,heroId);
				heroSelectDic.Add(item,heroId);

				break;				
			}

            EventCenter.Broadcast(EGameEvent.eGameEvent_HeroAddSelect);
		}

        public void ReconnectPreSelect(int heroId)
        {
            EventCenter.Broadcast<int>(EGameEvent.eGameEvent_HeroReconnectPreSelect,heroId);
        }

       private void Init(){
			heroSelectDic = new Dictionary<Iplayer, int>();			
			heroSureSelectDic = new Dictionary<Iplayer, int>();	
			heroInfoList = new List<HeroSelectConfigInfo>();
			for(int i= 0 ;i < ConfigReader.HeroSelectXmlInfoDict.Count;i++)
			{
				#region 获得所有英雄信息
				HeroSelectConfigInfo item = ConfigReader.HeroSelectXmlInfoDict.ElementAt(i).Value;
                if (item.IsGuideHero == 1)
                    continue;
				heroInfoList.Add(item);
				#endregion
			}
            SortByBuyed();            
		}

        void SortByBuyed() {
            for (int i = 0; i < heroInfoList.Count; i++)
            {
                for (int j = 0; j < heroInfoList.Count - 1 - i; j++)
                {
                    HeroSelectConfigInfo infoA = heroInfoList[j];
                    HeroSelectConfigInfo infoB = heroInfoList[j + 1];
                    if (!GameUserModel.Instance.CanChooseHeroList.Contains(infoA.HeroSelectNum) && GameUserModel.Instance.CanChooseHeroList.Contains(infoB.HeroSelectNum))
                    {
                        HeroSelectConfigInfo temp = heroInfoList[j];
                        heroInfoList[j] = heroInfoList[j + 1];
                        heroInfoList[j + 1] = temp;
                    }
                }
            }
        }

		private void EnterSelectHero()
        {
			heroSelectDic.Clear();
			heroSureSelectDic.Clear(); 
		}
		
        
		private void EnterRandomHero()
        {
            //AudioClip clip = Resources.Load(AudioDefine.PATH_HERO_SELECT_COUNTDOWN) as AudioClip;
            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(AudioDefine.PATH_HERO_SELECT_COUNTDOWN, ResourceType.ASSET);
            AudioClip clip = clipUnit.Asset as AudioClip;
            mAudioSource = AudioManager.Instance.PlayEffectAudio(clip);

            EventCenter.Broadcast(EGameEvent.eGameEvent_HeroEnterRandom);
		}
		
		//private void Exit(){
            //senlin
			//if(UISelectHero.Instance != null){
			//	UISelectHero.Instance.Clean();
			//}
            //LoadUiResource.LoadRes(GameMethod.GetUiCamera.transform, GameConstDefine.HeroSelectUI);
		//}


        private void PlayLocalSelectSound(int heroId) {
            HeroSelectConfigInfo info = ConfigReader.GetHeroSelectInfo(heroId);
            string path = "Audio/HeroSelect/";
            path = path + info.HeroSelectSound;
            

            //AudioClip clip = (AudioClip) Resources.Load(path) as AudioClip;
            ResourceUnit clipUnit = ResourcesManager.Instance.loadImmediate(path, ResourceType.ASSET);
            AudioClip clip = clipUnit.Asset as AudioClip;

            AudioSource source = AudioManager.Instance.PlayEffectAudio(clip);
        }


		public HeroCtrl(){
			SetSelectState(HeroSelectState.InitSelect);
		} 


        
		#region public
		//临时选择的英雄
		public Dictionary<Iplayer,int> heroSelectDic{
			get;
			private set;
		}

		public Dictionary<Iplayer,int> heroSureSelectDic{
			get;
			private set;
		}
		//所有英雄信息
		public List<HeroSelectConfigInfo> heroInfoList{
			get;
			private set;
		}

		public enum HeroSelectState{
			InitSelect,
			EnterSelect,
			RandomSelect,
			OutSelect
		}
		#endregion

		#region private
		HeroSelectState selectState = HeroSelectState.InitSelect ;
        AudioSource mAudioSource = null;
		#endregion
	}
 public class HeroWindow : BaseWindow
    {

        public HeroWindow()
        {
            mScenesType = EScenesType.EST_Login;
            mResName = GameConstDefine.HeroSelectUI;
            mResident = false;
        }

        ////////////////////////////继承接口/////////////////////////
        //类对象初始化
        public override void Init()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_HeroEnter, Show);
            EventCenter.AddListener(EGameEvent.eGameEvent_HeroExit, Hide);

            EventCenter.AddListener<int>(EGameEvent.eGameEvent_HeroFirstTime, SetFirstTime);
            EventCenter.AddListener<int>(EGameEvent.eGameEvent_HeroSecondTime, SetSecondTime);
        }

        //类对象释放
        public override void Realse()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_HeroEnter, Show);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_HeroExit, Hide);

            EventCenter.RemoveListener<int>(EGameEvent.eGameEvent_HeroFirstTime, SetFirstTime);
            EventCenter.RemoveListener<int>(EGameEvent.eGameEvent_HeroSecondTime, SetSecondTime);
        }

        //窗口控件初始化
        protected override void InitWidget()
        {
            mMidShow = mRoot.FindChild("Animator_Area");
            mLockList.Clear();
            mHeroShowList.Clear();
            mSpriteBlackList.Clear();
            for (int i = 0; i < HeroCtrl.Instance.heroInfoList.Count; i++)
            {
                #region  加载选择英雄显示预设
                GameObject objLoad = null;
                //objLoad = GameObject.Instantiate(Resources.Load(GameConstDefine.HeroShowBoxUI)) as GameObject;

                ResourceUnit objUnit = ResourcesManager.Instance.loadImmediate(GameConstDefine.HeroShowBoxUI, ResourceType.PREFAB);
                objLoad = GameObject.Instantiate(objUnit.Asset) as GameObject;

                objLoad.transform.parent = mMidShow.FindChild("HeroBox").FindChild("Grid");
                objLoad.transform.localScale = Vector3.one;
                objLoad.transform.localPosition = Vector3.zero;
                objLoad.name = "HeroBox" + (i + 1).ToString();

                UIToggle toggle = objLoad.GetComponent<UIToggle>();
                toggle.group = mHeroShowGroup;
                mHeroShowList.Add(toggle);
                #endregion

                #region 显示英雄选择ICON图片
                //black
                mShowAlpha = mRoot.FindChild("Animator_Area");
                Transform selecParent = objLoad.transform.FindChild("HeroThumbnails");
                mSpriteBlackList.Add(selecParent.FindChild("Clip").GetComponent<UISprite>());
                //head
                UISprite sprite = selecParent.FindChild("Head").GetComponent<UISprite>();
                sprite.spriteName = HeroCtrl.Instance.heroInfoList[i].HeroSelectHead.ToString();
                //lock
                Transform lockT = objLoad.transform.FindChild("Lock");
                lockT.gameObject.SetActive(false);
                mLockList.Add(lockT);
                #endregion

            }
            #region 获得描述预设
            Transform desParent = mMidShow.FindChild("HeroDestribe");
            mHeroName = desParent.FindChild("Name").FindChild("Label").GetComponent<UILabel>();
            Transform skillTran = desParent.FindChild("Skill");
            mSkillDes = skillTran.FindChild("Instruction").GetComponent<UILabel>();
            mSkillDes2 = skillTran.FindChild("Instruction2").GetComponent<UILabel>();
            mSkillDes3 = skillTran.FindChild("Instruction3").GetComponent<UILabel>();
            mSpriteDes = desParent.FindChild("Portrait").FindChild("Sprite").GetComponent<UISprite>();
            mSkilltex = skillTran.FindChild("Icon1").GetComponent<UISprite>();
            mSkilltex1 = skillTran.FindChild("Icon2").GetComponent<UISprite>();
            mSkilltex2 = skillTran.FindChild("Icon3").GetComponent<UISprite>();
            #endregion

            #region 获得英雄头像预设
            mTeamLeft = mRoot.FindChild("TeamSelectInfo");
            mTeamRight = mRoot.FindChild("EnemySelectInfo");
            int index = 1;
            for (int j = 0; j < mHeroCount; j++)
            {

                Transform teamParent = null;
                if (j % 2 == 0)
                {  //左边三个 j = 0,2,4 , i = 1,2,3			 
                    teamParent = mTeamLeft;
                }
                else
                {//右边三个 j = 1,3,5, i = 1,2,3				 
                    teamParent = mTeamRight;
                }

                Transform parent = teamParent.FindChild("Player" + index.ToString());
                mSpriteDic[j] = parent.FindChild("Thumbnail").GetComponent<UISprite>();
                mLabelName[j] = parent.FindChild("Name").GetComponent<UILabel>();
                mLabelName[j].text = "";
                mSpriteSelectDic[j] = parent.FindChild("Frame").GetComponent<UISprite>();
                mLabelDic[j] = parent.FindChild("ConfirmBar");

                if (j % 2 != 0)
                {
                    index += 1;
                }
            }
            #endregion

            #region 确定
            mBtnSure = mMidShow.FindChild("ConfirmButton").GetComponent<ButtonOnPress>();
            mObjHightLight = mBtnSure.transform.FindChild("Highlight").gameObject;
            mObjCanPress = mBtnSure.transform.FindChild("Show").gameObject;
            #endregion


            #region 购买界面
            mBuyParent = mRoot.FindChild("SureToBuyHero");
            Transform buyParentHero = mBuyParent.FindChild("Hero");
            mSpriteBuyDes = buyParentHero.FindChild("Portrait").GetComponent<UISprite>();
            mLabelBuyName = buyParentHero.FindChild("Name").GetComponent<UILabel>(); ;
            mLabelBuySkill = buyParentHero.FindChild("Skill").FindChild("Instruction").GetComponent<UILabel>();
            mLabelBuyDes = buyParentHero.FindChild("Story").GetComponent<UILabel>();
            mBtnCloseBuy = mBuyParent.FindChild("Background").GetComponent<ButtonOnPress>();
            mBtnBuy = mBuyParent.FindChild("Buy").GetComponent<ButtonOnPress>();

            //符文
            mSkinsToggle = mRoot.FindChild("TurnPage/SelectSkins").GetComponent<UIToggle>();
            mSkinsDisable = mRoot.FindChild("TurnPage/SelectSkins/Disable").gameObject;
            mSkinsSubmit = mRoot.FindChild("SkinsInterface/ConfirmButton").GetComponent<UIButton>();
            mRunePages = mRoot.FindChild("SkinsInterface/RunePages").GetComponent<UIPopupList>();

            mSkinsHeroName = mRoot.FindChild("SkinsInterface/DefaultSkin/NamePlate/Name").GetComponent<UILabel>();
            mSkinsHeroIcon = mRoot.FindChild("SkinsInterface/DefaultSkin/Portrait").GetComponent<UISprite>();

            EventDelegate.Add(mRunePages.onChange, OnRunePageChange);
            #endregion


            #region 倒计时
            for (int i = 0; i < 2; i++)
            {
                mSpriteTens[i] = mRoot.FindChild("TopBar" + (i + 1).ToString()).FindChild("Minute1").GetComponent<UISprite>();
                mSpriteUnits[i] = mRoot.FindChild("TopBar" + (i + 1).ToString()).FindChild("Minute2").GetComponent<UISprite>();
            }

            SetTime(0, mFirstCountTime);
            SetTime(1, mSecondCountTime);

            #endregion


            mArrowUpDown[0] = mMidShow.transform.FindChild("Arrow/Left");
            mArrowUpDown[1] = mMidShow.transform.FindChild("Arrow/Right");
            mScrollView = mMidShow.transform.FindChild("HeroBox").GetComponent<UIScrollView>();

            //这里出发发送服务器记录的ui点击事件消息
            SendUIEventMsg();
        }

        //窗口控件释放
        protected override void RealseWidget()
        {

        }


        //游戏事件注册
        protected override void OnAddListener()
        {
            EventCenter.AddListener(EGameEvent.eGameEvent_HeroPreSelect, UpdateHeroListSelect);
            EventCenter.AddListener<int>(EGameEvent.eGameEvent_HeroRealSelect, HeroSelect);
            EventCenter.AddListener(EGameEvent.eGameEvent_HeroAddSelect, HeroAddSelect);
            EventCenter.AddListener(EGameEvent.eGameEvent_HeroEnterRandom, RandomSelectHero);
            EventCenter.AddListener<int>(EGameEvent.eGameEvent_HeroReconnectPreSelect, UpdateReconnectPreSelect);
        }

        //游戏事件注消
        protected override void OnRemoveListener()
        {
            EventCenter.RemoveListener(EGameEvent.eGameEvent_HeroPreSelect, UpdateHeroListSelect);
            EventCenter.RemoveListener<int>(EGameEvent.eGameEvent_HeroRealSelect, HeroSelect);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_HeroAddSelect, HeroAddSelect);
            EventCenter.RemoveListener(EGameEvent.eGameEvent_HeroEnterRandom, RandomSelectHero);
            EventCenter.RemoveListener<int>(EGameEvent.eGameEvent_HeroReconnectPreSelect, UpdateReconnectPreSelect);
        }

        //显示
        public override void OnEnable()
        {
            SetSelectHeroState(SelectHeroState.InitSelect);
            ShowPlayerNickName();
            mArrowUpDown[0].gameObject.SetActive(false);
            mArrowUpDown[1].gameObject.SetActive(true);
            mScrollView.onDragFinished += OnDragFinished;
            IGuideTaskManager.Instance.SendTaskEnd(EGameEvent.eGameEvent_UIGuideRoomBeginBtnEnd);
        }

        //隐藏
        public override void OnDisable()
        {
            //UIGuide
            IGuideTaskManager.Instance.RemoveTaskStartListerner(EGameEvent.eGameEvent_UIGuideSelectHeroHeadStart, StartIGuideTask);
            IGuideTaskManager.Instance.RemoveTaskStartListerner(EGameEvent.eGameEvent_UIGuideSelectHeroCommitStart, StartIGuideTask);

            mScrollView.onDragFinished -= OnDragFinished;
            mFirstCountTime = 60;
            mSecondCountTime = 10;
        }


        public enum SelectHeroState
        {
            InitSelect,
            EnterSelect,
            InSelect,
            RandomSelect,
            OutSelect,
        }

        private SelectHeroState mSeletState = SelectHeroState.InitSelect;

        #region 可供选择
        private List<UIToggle> mHeroShowList = new List<UIToggle>(); //点击选择框
        private List<UISprite> mSpriteBlackList = new List<UISprite>();
        private List<Transform> mLockList = new List<Transform>();
        private int mSelectIndex = -1;
        #endregion

        #region 英雄头像
        Transform mTeamLeft;
        Transform mTeamRight;
        private UISprite[] mSpriteDic = new UISprite[mHeroCount]; //玩家英雄头像显示
        private UISprite[] mSpriteSelectDic = new UISprite[mHeroCount]; //玩家英雄头像显示
        private Transform[] mLabelDic = new Transform[mHeroCount];//玩家英雄头像显示
        private UILabel[] mLabelName = new UILabel[mHeroCount];

        UITweener mTween1;
        UITweener mTween2;
        UITweener mTweenAlpha;

        private UISprite mSkilltex;
        private UISprite mSkilltex1;
        private UISprite mSkilltex2;
        #endregion

        #region 描述
        private UISprite mSpriteDes;
        private UILabel mHeroName;
        private UILabel mSkillDes;
        private UILabel mSkillDes2;
        private UILabel mSkillDes3;
        #endregion

        #region 按钮
        private ButtonOnPress mBtnSure;
        private ButtonOnPress mBtnCloseBuy;
        private ButtonOnPress mBtnBuy;
        private GameObject mObjHightLight;
        private GameObject mObjCanPress;

        private UIToggle mSkinsToggle;
        private GameObject mSkinsDisable;
        private UIButton mSkinsSubmit;
        private UIPopupList mRunePages;

        private UILabel mSkinsHeroName;
        private UISprite mSkinsHeroIcon;

        #endregion

        #region 购买英雄界面
        UISprite mSpriteBuyDes;
        UILabel mLabelBuyName;
        UILabel mLabelBuySkill;
        UILabel mLabelBuyDes;
        Transform mBuyParent;
        #endregion

        #region Top
        UISprite[] mSpriteTens = new UISprite[2];
        UISprite[] mSpriteUnits = new UISprite[2];
        #endregion


        private Iplayer mLocalPlayer;
        private bool mStartCount = false;

        #region 倒计时的时间
        public static int mFirstCountTime = 60;
        public static int mSecondCountTime = 10;
        private Vector3 mTweenScaleVector = new Vector3(1.5f, 1.5f, 1f);//倒计时缩放
        private DateTime mStartTime;
        #endregion

        #region const
        private const int mTopBarTotalCount = 2;
        private const int mHeroCount = 6;
        private const int mHeroShowGroup = 2;
        private const float mMove = 50f;
        #endregion


        #region 中路顯示
        Transform mMidShow;
        Transform mShowAlpha;
        #endregion


        Transform[] mArrowUpDown = new Transform[2];
        UIScrollView mScrollView;
        void SetBtnSure(bool isVlb)
        {
            mBtnSure.gameObject.SetActive(isVlb);
            mBtnSure.enabled = isVlb;
        }
        #region 设置英雄选择界面状态
        public void SetSelectHeroState(SelectHeroState state)
        {
            mSeletState = state;
            switch (mSeletState)
            {
                case SelectHeroState.InitSelect:
                    for (int j = 0; j < mLabelDic.Length; j++)
                    {
                        mLabelDic[j].gameObject.SetActive(false);
                    }
                    EnabledSurePress(false);
                    for (int i = 0; i < mHeroShowList.Count; i++)
                    {
                        EventDelegate.Add(mHeroShowList[i].onChange, OnSelectHero);
                    }
                    mBtnSure.AddListener(OnCommitHero);
                    mBtnCloseBuy.AddListener(CloseBuy);
                    mBtnBuy.AddListener(BuyHero);
                    mLocalPlayer = PlayerManager.Instance.LocalAccount;
                    InitFlash();
                    InitRunePageList();
                    break;
                case SelectHeroState.EnterSelect:
                    EnterSelectHero();
                    break;
                case SelectHeroState.RandomSelect:
                    RandomSelectHero();
                    break;
                case SelectHeroState.OutSelect:
                    OutSelectHero();
                    break;
            }
        }
        #endregion

        #region 预选择英雄显示
        public void UpdateHeroListSelect()
        {//刷新选择列表

            foreach (var pic in mSpriteBlackList)
            {
                pic.gameObject.SetActive(false);
            }

            foreach (var item in HeroCtrl.Instance.heroSelectDic.Keys)
            {
                int heroId = 0;
                if (!HeroCtrl.Instance.heroSelectDic.TryGetValue(item, out heroId))
                    continue;
                if (item.GameUserSeat != mLocalPlayer.GameUserSeat && mLocalPlayer.IsSameCamp(item))
                {//找到队友所选择的英雄
                    int index = GetSelectIndexBuyHeroId(heroId);
                    mSpriteBlackList[index].gameObject.SetActive(true);
                }

                mSpriteDic[(int)item.GameUserSeat - 1].spriteName = ConfigReader.GetHeroSelectInfo(heroId).HeroSelectHead.ToString();
                if (item == PlayerManager.Instance.LocalAccount)
                {
                    mSpriteSelectDic[(int)item.GameUserSeat - 1].spriteName = "329";
                }
                if (!mSpriteSelectDic[(int)item.GameUserSeat - 1].gameObject.activeInHierarchy)
                {
                    mSpriteSelectDic[(int)item.GameUserSeat - 1].gameObject.SetActive(true);
                }
            }
        }

        void ShowPlayerNickName()
        {
            foreach (var item in PlayerManager.Instance.AccountDic.Values)
            {
                int index = (int)item.GameUserSeat - 1;
                if (index >= mLabelName.Length)
                    continue;
                mLabelName[index].text = item.GameUserNick;
            }
        }
        #endregion

        #region 更新左右两边队伍是否选择英雄的显示
        public void UpdateSureSelect()
        {//刷新左右两边队伍是否已经选择
            for (int i = 0; i < mHeroCount; i++)
            {
                mLabelDic[i].gameObject.SetActive(false);
            }
            foreach (var item in PlayerManager.Instance.AccountDic.Values)
            {
                if (HeroCtrl.Instance.heroSureSelectDic.ContainsKey(item))
                {
                    mLabelDic[(int)item.GameUserSeat - 1].gameObject.SetActive(true);
                    if (!mSpriteSelectDic[(int)item.GameUserSeat - 1].gameObject.activeInHierarchy)
                    {
                        mSpriteSelectDic[(int)item.GameUserSeat - 1].gameObject.SetActive(true);
                    }
                }
            }
            if (HeroCtrl.Instance.heroSureSelectDic.ContainsKey(PlayerManager.Instance.LocalAccount))
            {
                //更新英雄头像和名称,皮夫选择里面
                int id = HeroCtrl.Instance.heroSureSelectDic[PlayerManager.Instance.LocalAccount];

                HeroSelectConfigInfo config = new HeroSelectConfigInfo();
                if (ConfigReader.HeroSelectXmlInfoDict.TryGetValue(id, out config))
                {
                    mSkinsHeroName.text = config.HeroSelectNameCh;
                    mSkinsHeroIcon.spriteName = config.HeroSelectHead.ToString();
                }

                //按钮控制
                if (!mBtnSure.enabled)
                    return;
                EnabledSurePress(false);
            }           
        }
        #endregion

        #region 更新英雄选择栏的英雄锁定显示
        private void UpdateLock()
        {//显示锁定框
            for (int i = 0; i < HeroCtrl.Instance.heroInfoList.Count; i++)
            {
                if (!GameUserModel.Instance.CanChooseHeroList.Contains(HeroCtrl.Instance.heroInfoList[i].HeroSelectNum))
                {
                    mLockList[i].gameObject.SetActive(true);
                }
                else
                {
                    mLockList[i].gameObject.SetActive(false);
                }
            }
        }
        #endregion



        void OnDragFinished()
        {
            Vector3 constraint = mScrollView.panel.CalculateConstrainOffset(mScrollView.bounds.min, mScrollView.bounds.max);
            if (mScrollView.RestrictWithinBounds(false, false, true))
            {
                if (constraint.y > 0f)//上到头
                {
                    mArrowUpDown[0].gameObject.SetActive(false);
                    mArrowUpDown[1].gameObject.SetActive(true);
                }
                else//左到头
                {
                    mArrowUpDown[0].gameObject.SetActive(true);
                    mArrowUpDown[1].gameObject.SetActive(false);
                }
            }
            else
            {
                mArrowUpDown[0].gameObject.SetActive(true);
                mArrowUpDown[1].gameObject.SetActive(true);
            }
        }
        #region InitFlash
        void InitFlash()
        {
            UpdateLock();
            Vector3 orginalLeft = mTeamLeft.localPosition;
            Vector3 orginalRight = mTeamRight.localPosition;
            mTeamLeft.localPosition = new Vector3(orginalLeft.x - mMove, orginalLeft.y, orginalLeft.z);
            mTeamRight.localPosition = new Vector3(orginalRight.x + mMove, orginalRight.y, orginalRight.z);

            mTween1 = TweenPosition.Begin(mTeamLeft.gameObject, 0.5f, orginalLeft);
            mTween2 = TweenPosition.Begin(mTeamRight.gameObject, 0.5f, orginalRight);
            UICommonMethod.TweenAlphaBegin(mShowAlpha.gameObject, 0f, 0f);
            mTweenAlpha = UICommonMethod.TweenAlphaBegin(mShowAlpha.gameObject, 1.7f, 1f);
            mTween1.method = UITweener.Method.EaseIn;
            mTween2.method = UITweener.Method.EaseIn;
            mSelectIndex = -1;
            //  EventDelegate.Add(tweenAlpha.onFinished, FinishTween);
            SetSelectHeroState(SelectHeroState.EnterSelect);
            //  EnableToggle(false);
        }
        #endregion


        #region
        void EnableToggle(bool enable)
        {
            foreach (var item in mHeroShowList)
            {
                item.enabled = enable;
            }
        }
        #endregion



        #region 进入选择英雄阶段
        private void EnterSelectHero()
        {
            MsgInfoManager.Instance.ShowMsg(10);
            SetBtnSure(true);
            EnableToggle(true);
            FirstCountDown();
            SetSelectHeroState(SelectHeroState.InSelect);

            //UIGuide
            IGuideTaskManager.Instance.AddTaskStartListerner(EGameEvent.eGameEvent_UIGuideSelectHeroHeadStart, StartIGuideTask);
            IGuideTaskManager.Instance.AddTaskStartListerner(EGameEvent.eGameEvent_UIGuideSelectHeroCommitStart, StartIGuideTask);
            IGuideTaskManager.Instance.SendTaskTrigger(EGameEvent.eGameEvent_UIGuideTriggerSelectHero);
        }
        #endregion

        void StartIGuideTask(EGameEvent taskId)
        {
            IGuideTaskManager.Instance.SendTaskEffectShow(taskId);
        }



        #region 进入最后随机阶段
        private void RandomSelectHero()
        {
            IGuideTaskManager.Instance.SendTaskEnd(EGameEvent.eGameEvent_UIGuideSelectHeroHeadEnd);
            IGuideTaskManager.Instance.SendTaskEnd(EGameEvent.eGameEvent_UIGuideSelectHeroCommitEnd);
            EnabledSurePress(false);
            TweenRotation obj = mSpriteUnits[0].transform.parent.GetComponent<TweenRotation>();
            obj.enabled = true;
            //UITweener tween = TweenRotation.Begin(obj, 1f, Quaternion.EulerRotation(180f, 0f, 0f));
            obj.method = UITweener.Method.EaseOut;
            EventDelegate.Add(obj.onFinished, LastCountDown);

            mSkinsDisable.gameObject.SetActive(false);
            mSkinsToggle.value = true;
        }
        #endregion

        #region 倒计时



        private void SetTime(int step, int time)
        {
            int ten = time / 10;
            int unit = time % 10;
            if (step == 0)
            {
                unit = unit + 10;
            }
            if (ten == 0)
            {
                mSpriteTens[step].gameObject.SetActive(false);
            }
            else
            {
                mSpriteTens[step].gameObject.SetActive(true);
                if (step == 0)
                {
                    ten = ten + 10;
                }
                mSpriteTens[step].spriteName = ten.ToString();
            }

            mSpriteUnits[step].spriteName = unit.ToString();

        }

        private void FirstCountDown()
        {
            if (mFirstCountTime == 0)
            {
                return;
            }
            SetTime(0, mFirstCountTime);
            mStartTime = DateTime.Now;
            mStartCount = true;
            mSpriteTens[1].transform.parent.gameObject.SetActive(false);
        }

        private void LastCountDown()
        {
            mStartTime = DateTime.Now;
            mStartCount = true;
            mSpriteTens[0].transform.parent.gameObject.SetActive(false);
            mSpriteTens[1].transform.parent.gameObject.SetActive(true);

            SetSelectHeroState(SelectHeroState.RandomSelect);
        }

        UITweener scaleTween;
        private void TweenCountDownLabelScale(GameObject obj)
        {
            TweenAlpha.Begin(obj.gameObject, 0f, 1f);
            TweenScale.Begin(obj, 0f, mTweenScaleVector);
            scaleTween = TweenScale.Begin(obj, 0.5f, new Vector3(1f, 1f, 1f));
            scaleTween.method = UITweener.Method.EaseInOut;
            EventDelegate.Add(scaleTween.onFinished, FinshTweenScale, true);
        }

        void FinshTweenScale()
        {
            EventDelegate.Remove(scaleTween.onFinished, FinshTweenScale);
        }
        void SetSecondTimeDown()
        {
            SetTime(1, mSecondCountTime);
            TweenCountDownLabelScale(mSpriteUnits[1].gameObject);
        }
        public override void Update(float deltaTime)
        {
            if (mStartCount)
            {
                TimeSpan span = DateTime.Now - mStartTime;
                if (span.TotalSeconds <= 1f)
                    return;
                mStartTime = DateTime.Now;
                if (mSeletState == SelectHeroState.RandomSelect)
                {
                    mSecondCountTime = mSecondCountTime - (int)span.TotalSeconds;
                    if (mSecondCountTime < 0)
                    {
                        mStartCount = false;
                        return;
                    }
                    SetSecondTimeDown();
                }
                else
                {
                    mFirstCountTime = mFirstCountTime - (int)span.TotalSeconds;
                    if (mFirstCountTime < 0)
                    {
                        mStartCount = false;
                        return;
                    }
                    SetTime(0, mFirstCountTime);
                }
            }
        }
        #endregion

        #region 结束选择英雄
        private void OutSelectHero()
        {
            for (int i = 0; i < mHeroShowList.Count; i++)
            {
                EventDelegate.Add(mHeroShowList[i].onChange, OnSelectHero);
            }
            mBtnSure.RemoveListener(OnCommitHero);
            mBtnCloseBuy.RemoveListener(CloseBuy);
            mBtnBuy.RemoveListener(BuyHero);
            mStartCount = false;
        }
        #endregion

        #region 结束入场动画
        private void FinishTween()
        {
            //  SetSelectHeroState(SelectHeroState.EnterSelect);		
        }
        #endregion


        #region 点击购买英雄
        private void BuyHero(int ie, bool press)
        {
            if (press || mSeletState == SelectHeroState.InitSelect)
            {
                return;
            }
        }
        #endregion

        #region 关闭购买英雄
        private void CloseBuy(int ie, bool press)
        {
            if (press)
            {
                return;
            }
            //buyParent.gameObject.SetActive(false);
        }
        #endregion

        #region 点击确定选择英雄按钮事件
        private void OnCommitHero(int ie, bool press)
        {
            EnabledSurePress(false);
            if (press || mSeletState != SelectHeroState.InSelect)
            {
                return;
            }
            if (mSelectIndex != -1)
            {
                IGuideTaskManager.Instance.SendTaskEnd(EGameEvent.eGameEvent_UIGuideSelectHeroCommitEnd);
                CGLCtrl_GameLogin.Instance.EmsgToss_AskSelectHero((UInt32)HeroCtrl.Instance.heroInfoList.ElementAt(mSelectIndex).HeroSelectNum);

                mSkinsDisable.gameObject.SetActive(false);
                mSkinsToggle.value = true;
            }
        }
        #endregion

        #region 点击英雄栏的选择事件
        void OnSelectHero()
        {
            UIToggle toggle = UIToggle.current;
            if (toggle != null && toggle.group == mHeroShowGroup && toggle.value)
            {
                for (int i = 0; i < mHeroShowList.Count; i++)
                {
                    if (mHeroShowList[i] != toggle)
                        continue;
                    mSelectIndex = i;
                    ShowDestribe(i);//描述 
                    if (UpdateSureBtn(i))
                    {//是否可点击
                        IGuideTaskManager.Instance.SendTaskEnd(EGameEvent.eGameEvent_UIGuideSelectHeroHeadEnd);
                        NotifyServerMyPreSelect(i);
                    }
                    break;
                }
            }
        }

        public void UpdateReconnectPreSelect(int heroId)
        {
            int index = GetSelectIndexBuyHeroId(heroId);
            mSelectIndex = index;
            ShowDestribe(index);//描述 
            SetSelectShow(index);
        }


        #endregion

        #region 更新按钮状态并判断是否可点击选择按钮
        bool UpdateSureBtn(int index)
        {
            bool canPress = true;
            int id = HeroCtrl.Instance.heroInfoList[index].HeroSelectNum;
            if (!TeamMateHasSelectHero(id) && GameUserModel.Instance.CanChooseHeroList.Contains(id)
               && mSeletState == SelectHeroState.InSelect
               && !HeroCtrl.Instance.heroSureSelectDic.ContainsKey(PlayerManager.Instance.LocalAccount))
            {
                canPress = true;
            }
            else
            {
                canPress = false;
            }
            EnabledSurePress(canPress);
            return canPress;
        }
        #endregion

        #region 设置按钮可不可选择显示
        void EnabledSurePress(bool enable)
        {
            mBtnSure.GetComponent<BoxCollider>().enabled = enable;
            mObjHightLight.gameObject.SetActive(!enable);
            mObjCanPress.gameObject.SetActive(enable);
        }
        #endregion

        #region 通知客户端点击的英雄
        void NotifyServerMyPreSelect(int index)
        {
            int id = HeroCtrl.Instance.heroInfoList[index].HeroSelectNum;
            CGLCtrl_GameLogin.Instance.EmsgTocs_TryToSelectHero((uint)id);
        }
        #endregion

        #region 通过点击的是第几个英雄显示英雄信息
        void ShowDestribe(int index)
        {
            ShowHasDes(index);
            if (!GameUserModel.Instance.CanChooseHeroList.Contains(HeroCtrl.Instance.heroInfoList[index].HeroSelectNum))
            {
                ShowBuyeDes(index);
            }
        }
        #endregion

        #region 通过点击的是第几个英雄显示已购买英雄信息
        public void ShowHasDes(int index)
        {
            mHeroName.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectNameCh;
            mSpriteDes.spriteName = HeroCtrl.Instance.heroInfoList[index].HeroSelectThumb;
            mSkillDes.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectDes;
            mSkillDes2.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectDes2;
            mSkillDes3.text = HeroCtrl.Instance.heroInfoList[index].HeroPassDes;
            mSkilltex.spriteName = HeroCtrl.Instance.heroInfoList[index].HeroSelectSkill1;
            mSkilltex1.spriteName = HeroCtrl.Instance.heroInfoList[index].HeroSelectSkill2;
            mSkilltex2.spriteName = HeroCtrl.Instance.heroInfoList[index].HeroSkillPass;
        }
        #endregion

        #region 通过点击的是第几个英雄显示购买描述
        void ShowBuyeDes(int index)
        {
            return;
            mLabelBuyName.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectNameCh;
            mSpriteBuyDes.spriteName = HeroCtrl.Instance.heroInfoList[index].HeroSelectThumb;
            mLabelBuySkill.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectDes;
            mLabelBuyDes.text = HeroCtrl.Instance.heroInfoList[index].HeroSelectBuyDes;
            mBuyParent.gameObject.SetActive(true);
        }
        #endregion

        #region 通过英雄ID号获得选择的是第几个英雄
        public int GetSelectIndexBuyHeroId(int heroId)
        {
            for (int i = 0; i < HeroCtrl.Instance.heroInfoList.Count; i++)
            {
                if (HeroCtrl.Instance.heroInfoList[i].HeroSelectNum != heroId)
                    continue;
                return i;
            }
            return -1;
        }
        #endregion


        public void SetSelectShow(int index)
        {
            mHeroShowList[index].value = true;
        }

        #region 通过英雄ID判断队友是否有选择此英雄
        private bool TeamMateHasSelectHero(int heroId)
        {
            foreach (var item in HeroCtrl.Instance.heroSelectDic.Keys)
            {
                if (item.GameUserSeat == mLocalPlayer.GameUserSeat || !mLocalPlayer.IsSameCamp(item))//找到队友所选择的英雄
                    continue;
                int heroSelect = 0;
                if (!HeroCtrl.Instance.heroSelectDic.TryGetValue(item, out heroSelect))
                    continue;
                if (heroSelect == heroId)
                    return true;
            }
            return false;
        }
        #endregion

        //英雄选择
        public void HeroSelect(int heroid)
        {
            int itemPos = GetSelectIndexBuyHeroId(heroid);
            ShowHasDes(itemPos);
            SetSelectShow(itemPos);
            MsgInfoManager.Instance.ShowMsg((int)ERROR_TYPE.eT_ObtainRandomHero);
        }

        public void HeroAddSelect()
        {
            UpdateHeroListSelect();
            UpdateSureSelect();
        }

        public void SetFirstTime(int time)
        {
            mFirstCountTime = time;
        }

        public void SetSecondTime(int time)
        {
            mSecondCountTime = time;
        }

        public void OnRunePageChange()
        {
            int index = mRunePages.data == null ? 0 : (int)mRunePages.data;

            CGLCtrl_GameLogin.Instance.EmsgToss_AskChangeRunePage(index);
        }

        public void InitRunePageList()
        {
            mRunePages.items.Clear();
            mRunePages.itemData.Clear();
            int page = RuneEquipModel.Instance.pagenum + 1;

            for (int i = 0; i < page; i++)
            {
                mRunePages.items.Add(ConfigReader.GetMsgInfo(40050).content + (i + 1));
                mRunePages.itemData.Add(i);
            }
        }
        //这里出发发送服务器记录的ui点击事件消息
        public void SendUIEventMsg()
        {
            CGLCtrl_GameLogin.Instance.EmsgTocs_ReportUIEvent();
        }
    } 

猜你喜欢

转载自blog.csdn.net/qq_35647121/article/details/94419405