Example #1
0
    /// <summary>
    /// 可以优化代码结构。
    /// </summary>
    /// <param name="battlePropDic"></param>
    public void Init(Dictionary <int, BattleProp> battlePropDic)
    {
        resSvc   = ResSvc.Instance;
        timerSvc = TimerSvc.Instance;

        //初始化各管理器
        stateMgr = gameObject.AddComponent <StateMgr>();
        stateMgr.Init();

        bulletParent    = GameObject.Find("Temp/Bullets").transform;
        effectParent    = GameObject.Find("Temp/Effects").transform;
        bulletPool      = gameObject.AddComponent <ObjectPool>();
        laserBulletPool = gameObject.AddComponent <ObjectPool>();
        hitEffectPool   = gameObject.AddComponent <ObjectPool>();
        fireEffectPool  = gameObject.AddComponent <ObjectPool>();
        shellEffectPool = gameObject.AddComponent <ObjectPool>();

        //找到自己的战场参数
        foreach (var item in battlePropDic)
        {
            RoleType       roleType       = (RoleType)item.Key;
            ControllerBase controllerBase = null;
            GameObject     playerGO       = null;
            if (roleType == BattleSys.Instance.GetCurrentRoleType())
            {
                playerGO = resSvc.LoadPrefab(PathDefine.PlayerPath);
                #region 设置摄像机以及添加玩家控制器
                switch (roleType)
                {
                case RoleType.Red:
                    Camera.main.transform.position         = new Vector3(0, 1f, -30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0);
                    break;

                case RoleType.Blue:
                    Camera.main.transform.position         = new Vector3(0, 1f, 30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0);
                    break;

                case RoleType.Yellow:
                    Camera.main.transform.position         = new Vector3(-30, 1, 30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0);
                    break;

                case RoleType.Green:
                    Camera.main.transform.position         = new Vector3(30, 1, 30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 180, 0);
                    break;

                case RoleType.Purple:
                    Camera.main.transform.position         = new Vector3(-30, 1, -30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0);
                    break;

                case RoleType.Black:
                    Camera.main.transform.position         = new Vector3(30, 1, -30f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0);
                    break;

                case RoleType.Orange:
                    Camera.main.transform.position         = new Vector3(22, 1, -5f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0);
                    break;

                case RoleType.White:
                    Camera.main.transform.position         = new Vector3(-25, 1, -5f);
                    Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0);
                    break;
                }
                playerController = playerGO.AddComponent <PlayerController>();
                #endregion
                playerController.SetRoleType(roleType);
                controllerDic.Add(roleType, playerController);


                #region 设置实体数据
                playerEntity = new PlayerEntity(this, stateMgr);

                playerEntity.SetCtrl(playerController);
                playerEntity.SetBattleProps(battlePropDic.TryGet(item.Key));
                //考虑了扩展游戏到AI
                playerEntity.SetRoleType(roleType);
                playerEntity.Born();
                #endregion

                controllerBase = playerController;
            }
            else
            {
                //设置远程角色
                playerGO = resSvc.LoadPrefab(PathDefine.PlayerPath);
                if (playerGO.GetComponent <CharacterController>() != null)
                {
                    Destroy(playerGO.GetComponent <CharacterController>());
                }
                RemoteController remoteController = playerGO.AddComponent <RemoteController>();
                remoteController.SetRoleType(roleType);
                controllerDic.Add(roleType, remoteController);


                #region 设置实体数据
                RemoteEntity remoteEntity = new RemoteEntity(this, stateMgr);

                remoteEntity.SetCtrl(remoteController);
                remoteEntity.SetBattleProps(battlePropDic.TryGet(item.Key));
                //考虑了扩展游戏到AI
                //remoteEntity.SetRoleType(roleType);
                remoteEntity.Born();
                #endregion

                controllerBase = remoteController;
            }

            switch (roleType)
            {
            case RoleType.Red:
                playerGO.transform.position         = new Vector3(0, 0f, -30f);;
                playerGO.transform.localEulerAngles = new Vector3(0, 0, 0);
                playerGO.name = "Red";
                break;

            case RoleType.Blue:
                playerGO.transform.position         = new Vector3(0, 0, 30f);
                playerGO.transform.localEulerAngles = new Vector3(0, 180, 0);
                playerGO.name = "Blue";
                break;

            case RoleType.Yellow:
                playerGO.transform.position         = new Vector3(-30, 0, 30f);
                playerGO.transform.localEulerAngles = new Vector3(0, 180, 0);
                playerGO.name = "Yellow";
                break;

            case RoleType.Green:
                playerGO.transform.position         = new Vector3(30, 0, 30f);
                playerGO.transform.localEulerAngles = new Vector3(0, 180, 0);
                playerGO.name = "Green";
                break;

            case RoleType.Purple:
                playerGO.transform.position         = new Vector3(-30, 0, -30f);
                playerGO.transform.localEulerAngles = new Vector3(0, 0, 0);
                playerGO.name = "Purple";
                break;

            case RoleType.Black:
                playerGO.transform.position         = new Vector3(30, 0, -30f);
                playerGO.transform.localEulerAngles = new Vector3(0, 0, 0);
                playerGO.name = "Black";
                break;

            case RoleType.Orange:
                playerGO.transform.position         = new Vector3(22, 0, -5f);
                playerGO.transform.localEulerAngles = new Vector3(0, 0, 0);
                playerGO.name = "Orange";
                break;

            case RoleType.White:
                playerGO.transform.position         = new Vector3(-25, 0, -5f);
                playerGO.transform.localEulerAngles = new Vector3(0, 0, 0);
                playerGO.name = "White";
                break;
            }

            #region 添加枪支
            Transform  gunTrans = controllerBase.transform.Find(PathDefine.gunTransName).GetComponent <Transform>();
            GameObject go       = null;
            switch (battlePropDic.TryGet(item.Key).weapenType)
            {
            case WeapenType.Rifle:
                go      = resSvc.LoadPrefab(PathDefine.RiflePrefab);
                go.name = "Rifle";
                go.transform.SetParent(gunTrans);
                go.transform.localPosition    = new Vector3(0, 0, -0.1f);
                go.transform.localEulerAngles = Vector3.zero;
                go.transform.localScale       = Vector3.one;
                break;

            case WeapenType.Sniper:
                go      = resSvc.LoadPrefab(PathDefine.SniperPrefab);
                go.name = "Sniper";
                LineRenderer line = go.AddComponent <LineRenderer>();
                line.material   = Resources.Load <Material>("ResMaterials/Gun/Lin");
                line.startWidth = 0.3f;
                line.endWidth   = 0.3f;
                line.enabled    = false;
                lineRendererDic.Add(roleType, line);
                go.transform.SetParent(gunTrans);
                go.transform.localPosition = new Vector3(0, 0, -0.1f);
                go.transform.localRotation = Quaternion.Euler(Vector3.zero);
                go.transform.localScale    = new Vector3(0.7f, 0.7f, 0.7f);
                break;
            }
            #endregion
        }

        //设置我的武器
        playerEntity.SetPlayerWeapen();

        PECommon.Log("Init BattleMgr Done.");
    }