コード例 #1
0
        /// <summary>
        /// 初始战斗地图上的单位
        /// </summary>
        /// <param name="encounterID">遭遇id</param>
        private void InitAndInstantiateGameUnit(string encounterID)
        {
            JsonData data = encounter.GetEncounterDataByID(encounterID);

            if (data == null)
            {
                return;
            }

            JsonData   unitData      = data["UnitMessage"];
            int        unitDataCount = unitData.Count;
            OwnerEnum  owner;
            GameObject _object;

            for (int i = 0; i < unitDataCount; i++)
            {
                int x = (int)unitData[i]["Pos_X"];
                int y = (int)unitData[i]["Pos_Y"];
                //单位控制者:0为玩家,1为敌方AI_1,2为敌方AI_2,...
                switch (unitData[i]["UnitControler"].ToString())
                {
                case ("0"):
                    owner = OwnerEnum.Player; break;

                case ("1"):
                    owner = OwnerEnum.Enemy; break;

                default:
                    owner = OwnerEnum.Enemy; break;
                }
                //从对象池获取单位
                _object = GameUnitPool.Instance().GetInst(unitData[i]["UnitID"].ToString(), owner);

                Unit unit = _object.GetComponent <Unit>();
                //修改单位对象的父级为地图方块
                _mapBlocks[x, y].AddUnit(unit);
                // _object.transform.SetParent(_mapBlocks[x, y].transform);
                //_object.transform.localPosition = Vector3.zero;
                _unitsList.Add(unit);
                unit.mapBlockBelow = _mapBlocks[x, y];

                AI.SingleController controller;
                //初始化AI控制器与携带的仇恨列表
                if (_unitsList.Count == 0 || _unitsList.Count == 3 || _unitsList.Count == 5)
                {
                    controller = new AI.SingleAutoControllerAtker(unit); //无脑型
                }
                else
                {
                    controller = new AI.SingleAutoControllerDefender(unit);//防守型
                }
                controller.hatredRecorder.Reset(unit);
                GamePlay.Gameplay.Instance().autoController.singleControllers.Add(controller);


                //TODO 血量显示 test版本, 此后用slider显示
                var   TextHp     = _object.transform.GetComponentInChildren <Text>();
                var   gameUnit   = _object.GetComponent <GameUnit.GameUnit>();
                float hp         = gameUnit.hp /* - Random.Range(2, 6)*/;
                float maxHp      = gameUnit.MaxHP;
                float hpDivMaxHp = hp / maxHp * 100;
                TextHp.text = string.Format("Hp: {0}%", hpDivMaxHp);
            }
        }
コード例 #2
0
        public string InitialMapDataPath = "/Scripts/BattleMap/eg1.json";//待删除
        private void InitAndInstantiateMapBlocks1()
        {
            JsonData mapData      = JsonMapper.ToObject(File.ReadAllText(Application.dataPath + InitialMapDataPath));
            int      mapDataCount = mapData.Count;

            this.columns = (int)mapData[mapDataCount - 1]["y"] + 1;
            this.rows    = (int)mapData[mapDataCount - 1]["x"] + 1;
            _mapBlocks   = new BattleMapBlock[rows, columns];
            GameObject instance = new GameObject();
            int        x        = 0;
            int        y        = 0;
            int        area     = 0;

            battleArea.GetAreas(mapData);

            for (int i = 0; i < mapDataCount; i++)
            {
                x    = (int)mapData[i]["x"];
                y    = (int)mapData[i]["y"];
                area = (int)mapData[i]["area"];
                Vector2 mapPos = new Vector2(x, y);
                battleArea.StoreBattleArea(area, mapPos);

                //实例化地图块
                instance = GameObject.Instantiate(normalMapBlocks, new Vector3(x, y, 0f), Quaternion.identity);
                instance.transform.SetParent(_tilesHolder);
                instance.gameObject.AddComponent <BattleMapBlock>();
                //初始化mapBlock成员
                _mapBlocks[x, y]           = instance.gameObject.GetComponent <BattleMapBlock>();
                _mapBlocks[x, y].area      = area;
                _mapBlocks[x, y].x         = x;
                _mapBlocks[x, y].y         = y;
                _mapBlocks[x, y].blockType = EMapBlockType.normal;
                //初始化地图块儿的collider组件
                _mapBlocks[x, y].bmbCollider.init(_mapBlocks[x, y]);

                GamePlay.Gameplay.Instance().bmbColliderManager.InitBMB(_mapBlocks[x, y].bmbCollider);
                int tokenCount = mapData[i]["token"].Count;
                if (tokenCount == 1)
                {
                    Unit unit = InitAndInstantiateGameUnit(mapData[i]["token"][0], x, y);
                    unit.mapBlockBelow = _mapBlocks[x, y];
                    unit.gameObject.GetComponent <GameUnit.GameUnit>().owner = GameUnit.OwnerEnum.Enemy;

                    _unitsList.Add(unit);
                    _mapBlocks[x, y].AddUnit(unit);

                    AI.SingleController controller;
                    //初始化AI控制器与携带的仇恨列表
                    if (_unitsList.Count == 3 || _unitsList.Count == 5 || _unitsList.Count == 6)
                    {
                        controller = new AI.SingleAutoControllerAtker(unit); //无脑型
                    }
                    else
                    {
                        controller = new AI.SingleAutoControllerDefender(unit);//防守型
                    }
                    controller.hatredRecorder.Reset(unit);
                    GamePlay.Gameplay.Instance().autoController.singleControllers.Add(controller);
                }
            }
        }