示例#1
0
 private void LoadingProps(MapRootDto mapData)
 {
     mapData.Prefabs.ForEach(x =>
     {
         var o = Instantiate(LoadResourceByIdTool.GetProp(x.PrefabId));
         o.transform.SetParent(Props.transform);
         // 因为原物品可能有坐标
         o.transform.position = new Vector3(o.transform.position.x + x.X, o.transform.position.y + x.Y, 0);
     });
 }
示例#2
0
        /// <summary>
        /// 地图生成 这里的 IEnumerator 表示这里是协程(不然会导致游戏卡住)
        /// </summary>
        /// <returns></returns>
        private IEnumerator InitData(MapRootDto mapData)
        {
            // 先取出图层数据
            var layerItems = mapData.Layer;

            foreach (var layer in layerItems)
            {
                // 只加载需要显示的
                if (!layer.Show)
                {
                    continue;
                }
                var layerChunks = layer.Chunks;
                foreach (var chunk in layerChunks)
                {
                    // 起始位置
                    var x = chunk.X;
                    var y = chunk.Y;

                    for (var i = 0; i < mapData.ChunkSizeHeight; i++)
                    {
                        for (var j = 0; j < mapData.ChunkSizeWidth; j++)
                        {
                            // 默认 -1 为空
                            if (chunk.Data[i][j] == -1)
                            {
                                continue;
                            }

                            var tile = orderTiles[chunk.Data[i][j]];
                            var pos  = new Vector3Int(Convert.ToInt32(x + j), Convert.ToInt32(y + i), 0);
                            switch (tile.model)
                            {
                            case DisplayModel.Background:
                                backgroundMap.SetTile(pos, tile);
                                break;

                            case DisplayModel.Crash:
                                crashMap.SetTile(pos, tile);
                                break;

                            case DisplayModel.Foreground:
                                foregroundMap.SetTile(pos, tile);
                                break;

                            default:
                                throw new ArgumentOutOfRangeException();
                            }
                        }

                        yield return(null);
                    }
                }
            }
        }
示例#3
0
        /// <summary>
        /// 装载 Tile
        /// </summary>
        /// <param name="mapData"></param>
        private void LoadingTile(MapRootDto mapData)
        {
            var tileInfos = mapData.Tiles;

            var tiles = new List <CustomTile>();

            tileInfos.ForEach(tileInfo =>
            {
                var tile = ScriptableObject.CreateInstance <CustomTile>();
                tile.InitializeMyTileInfo(tileInfo.EffectKeys, tileInfo.TileSpriteId, tileInfo.DisplayModel,
                                          tileInfo.Tags);
                ColorUtility.TryParseHtmlString(tileInfo.Color, out var nowColor);
                tile.color = nowColor;
                tiles.Add(tile);
            });

            orderTiles = tiles.ToArray();
        }
示例#4
0
        /// <summary>
        /// 用于初始化
        /// </summary>
        private void Init()
        {
            // 先加载地图数据
            var map = GameManager.instance.currentMapData;

            // 地图数据为空则加载本地资源
            mapDto = map ?? LoadJsonTool.ParseLocalMapJsonData();

            // 初始化角色信息
            pm.speed              = mapDto.Initial.Speed;
            pm.runDivisor         = mapDto.Initial.RunDivisor;
            pm.jumpSleepDivisor   = mapDto.Initial.JumpSpeedDivisor;
            pm.climbSpeed         = mapDto.Initial.ClimbSpeed;
            pm.crouchSpeedDivisor = mapDto.Initial.CrouchSpeedDivisor;
            pm.jumpForce          = mapDto.Initial.JumpForce;
            pm.jump2ForceDivisor  = mapDto.Initial.Jump2ForceDivisor;
            pm.climbLateralForce  = mapDto.Initial.ClimbLateralForce;
            pm.transform.position = new Vector3Int(mapDto.Initial.X, mapDto.Initial.Y, 1);
            playerBirth           = pm.transform.position;

            // 设置角色
            pm.GetComponent <SpriteRenderer>().color = Color.white;
            pm.rb.constraints = RigidbodyConstraints2D.FreezeRotation;
            // 避免歪了
            pm.transform.rotation = Quaternion.identity;
            // 给个向下的力,否则动不了
            pm.rb.AddForce(new Vector2(0, -1), ForceMode2D.Impulse);

            // 开始设置背景信息
            buildBackground.StartSetBackground(mapDto);

            // 初始化格子
            buildTileMap.StartCreateMap(mapDto);

            // 初始化道具
            buildMapProp.StartCreateProps(mapDto);
        }
示例#5
0
        private CustomTile[] orderTiles; // 全部 Tile,Map 用于读取

        public void StartCreateMap(MapRootDto mapData)
        {
            ClearMap();
            LoadingTile(mapData);
            StartCoroutine(InitData(mapData));
        }
示例#6
0
 public void StartSetBackground(MapRootDto mapData)
 {
     bg.sprite = LoadResourceByIdTool.GetBackgroundSprite(mapData.Background.BgId);
     ColorUtility.TryParseHtmlString(mapData.Background.Color, out var color);
     bg.color = color;
 }
示例#7
0
 public void StartCreateProps(MapRootDto mapData)
 {
     ClearProp();
     LoadingProps(mapData);
 }