Esempio n. 1
0
        // Layer type (possible values: IntGrid, Entities, Tiles or AutoLayer)
        private string GetLayerName(LayerInstance layer)
        {
            if (layer.IsTilesLayer)
            {
                return("Tiles");
            }

            return("AutoLayer");
        }
Esempio n. 2
0
        public void GetLevelBounds()
        {
            const string lvlName = "Level";

            TextAsset     jsonProject = TestJsonLoader.LoadGenericProject();
            LdtkJson      project     = LdtkJson.FromJson(jsonProject.text);
            Level         level       = project.Levels.FirstOrDefault(p => p.Identifier == lvlName);
            LayerInstance layer       = level.LayerInstances.FirstOrDefault(p => p.IsIntGridLayer);
            Rect          levelBounds = level.UnityWorldSpaceBounds((int)layer.GridSize);

            Debug.Log(levelBounds);
        }
Esempio n. 3
0
    private void SpawnLayer(LayerInstance layer)
    {
        currentDepthScalar = layer.depthScalar;
        player.growthSpeed = layer.playerSpeed;
        player.turnSpeed   = layer.turnSpeed;

        int objectChance = 0;

        foreach (ObjectInstance inst in layer.objects)
        {
            objectChance += inst.spawnChance;
        }

        List <Vector2> usedPositions = new List <Vector2>();

        int minDepth = layer.mindepth;

        if (minDepth < camera.transform.position.y + (screenDim.y / 2))
        {
            minDepth = (int)(camera.transform.position.y + (screenDim.y / 2));
        }

        for (int i = 0; i < layer.totalObjects; i++)
        {
            int newObjectChance = Random.Range(0, objectChance);
            foreach (ObjectInstance inst in layer.objects)
            {
                if (newObjectChance < inst.spawnChance)
                {
                    GameObject newObject = GameObject.Instantiate(inst.objectToSpawn);
                    Vector2    position  = new Vector2();
                    do
                    {
                        position.x = camera.transform.position.x + Random.Range(-layer.layerWidth, layer.layerWidth);
                        position.y = Random.Range(minDepth, layer.maxdepth);
                    } while (usedPositions.Contains(position));

                    usedPositions.Add(position);

                    newObject.transform.position = new Vector3(position.x, position.y, 0);

                    break;
                }
                newObjectChance -= inst.spawnChance;
            }
        }
    }
Esempio n. 4
0
        private ImportData _configureTerrainDefaults(Light l)
        {
            // Configure global
            TerrainGlobalOptions.MaxPixelError = 8;
            // testing composite map
            TerrainGlobalOptions.CompositeMapDistance = 3000;
            TerrainGlobalOptions.LightMapDirection    = l.DerivedDirection;
            TerrainGlobalOptions.CompositeMapAmbient  = SceneManager.AmbientLight;
            TerrainGlobalOptions.CompositeMapDiffuse  = l.Diffuse;

            // Configure default import settings for if we use imported image
            var defaultImp = this.terrainGroup.DefaultImportSettings;

            defaultImp.TerrainSize  = TerrainSize;
            defaultImp.WorldSize    = TerrainWorldSize;
            defaultImp.InputScale   = 600;
            defaultImp.MinBatchSize = 33;
            defaultImp.MaxBatchSize = 65;

            // textures
            defaultImp.LayerList = new List <LayerInstance>();
            var inst = new LayerInstance();

            inst.WorldSize    = 100;
            inst.TextureNames = new List <string>();
            inst.TextureNames.Add("dirt_grayrocky_diffusespecular.dds");
            inst.TextureNames.Add("dirt_grayrocky_normalheight.dds");
            defaultImp.LayerList.Add(inst);

            inst              = new LayerInstance();
            inst.WorldSize    = 30;
            inst.TextureNames = new List <string>();
            inst.TextureNames.Add("grass_green-01_diffusespecular.dds");
            inst.TextureNames.Add("grass_green-01_normalheight.dds");
            defaultImp.LayerList.Add(inst);

            inst              = new LayerInstance();
            inst.WorldSize    = 200;
            inst.TextureNames = new List <string>();
            inst.TextureNames.Add("growth_weirdfungus-03_diffusespecular.dds");
            inst.TextureNames.Add("growth_weirdfungus-03_normalheight.dds");
            defaultImp.LayerList.Add(inst);

            return(defaultImp);
        }
Esempio n. 5
0
        private void BuildLayerInstance(LayerInstance layer)
        {
            _layerGameObject = _levelGameObject.CreateChildGameObject(layer.Identifier);

            //entities layer is different from the other three types
            if (layer.IsEntitiesLayer)
            {
                _entityBuilder = new LDtkBuilderEntity(_importer, _layerGameObject, _sortingOrder);
                _entityBuilder.SetLayer(layer);
                _entityBuilder.BuildEntityLayerInstances();
                return;
            }

            _layerGrid      = _layerGameObject.AddComponent <Grid>();
            _builderTileset = new LDtkBuilderTileset(_importer, _layerGameObject, _sortingOrder);

            if (layer.IsTilesLayer)
            {
                _builderTileset.SetLayer(layer);
                _builderTileset.BuildTileset(layer.GridTiles);
            }

            //an int grid layer could also be an auto layer
            if (layer.IsAutoLayer)
            {
                _builderTileset.SetLayer(layer);
                _builderTileset.BuildTileset(layer.AutoLayerTiles);
            }

            if (layer.IsIntGridLayer)
            {
                _builderIntGrid = new LDtkBuilderIntGridValue(_importer, _layerGameObject, _sortingOrder);
                _builderIntGrid.SetLayer(layer);
                _builderIntGrid.BuildIntGridValues();
            }



            float   size  = (float)layer.GridSize / _importer.PixelsPerUnit;
            Vector3 scale = new Vector3(size, size, 1);

            _layerGrid.transform.localScale = scale;
        }
Esempio n. 6
0
        private void BuildLayerInstance(LayerInstance layer)
        {
            bool builtLayer       = false;
            bool builtGrid        = false;
            bool builtTileBuilder = false;

            void BuildLayerGameObject()
            {
                if (builtLayer)
                {
                    return;
                }
                _layerGameObject = _levelGameObject.CreateChildGameObject(layer.Identifier);
                builtLayer       = true;
            }

            void AddGrid()
            {
                if (!builtLayer)
                {
                    Debug.LogError("Tried adding grid component before the layer GameObject");
                    return;
                }
                if (builtGrid)
                {
                    return;
                }
                _layerGrid = _layerGameObject.AddComponent <Grid>();
                builtGrid  = true;
            }

            void SetupTileBuilder()
            {
                if (!builtLayer)
                {
                    Debug.LogError("Tried constructing the tileset builder before the layer GameObject");
                    return;
                }
                if (builtTileBuilder)
                {
                    return;
                }
                _builderTileset  = new LDtkBuilderTileset(_importer, _layerGameObject, _sortingOrder);
                builtTileBuilder = true;
            }

            //ENTITIES
            if (layer.IsEntitiesLayer)
            {
                BuildLayerGameObject();

                _entityBuilder = new LDtkBuilderEntity(_importer, _layerGameObject, _sortingOrder);
                _entityBuilder.SetLayer(layer);
                _entityBuilder.BuildEntityLayerInstances();
                return;
            }

            //TILE
            if (layer.IsTilesLayer)
            {
                BuildLayerGameObject();
                AddGrid();
                SetupTileBuilder();

                _builderTileset.SetLayer(layer);
                _builderTileset.BuildTileset(layer.GridTiles);
            }

            //AUTO TILE (an int grid layer could additionally be an auto layer)
            if (layer.IsAutoLayer)
            {
                BuildLayerGameObject();
                AddGrid();
                SetupTileBuilder();

                _builderTileset.SetLayer(layer);
                _builderTileset.BuildTileset(layer.AutoLayerTiles);
            }

            //INT GRID
            if (layer.IsIntGridLayer)
            {
                BuildLayerGameObject();
                AddGrid();

                _builderIntGrid = new LDtkBuilderIntGridValue(_importer, _layerGameObject, _sortingOrder);
                _builderIntGrid.SetLayer(layer);
                _builderIntGrid.BuildIntGridValues();
            }

            //scale grid
            if (_layerGrid)
            {
                float   size  = (float)layer.GridSize / _importer.PixelsPerUnit;
                Vector3 scale = new Vector3(size, size, 1);
                _layerGrid.transform.localScale = scale;
            }
        }
Esempio n. 7
0
 public void SetLayer(LayerInstance layer)
 {
     Layer      = layer;
     LayerScale = Layer.GridSize / (float)Importer.PixelsPerUnit;
 }
Esempio n. 8
0
    private Texture2D[] RenderLayers(LDtkLevel level)
    {
        List <Texture2D> layers = new List <Texture2D>();

        if (level.BgRelPath != null)
        {
            layers.Add(RenderBackgroundToLayer(level));
        }

        // Render Tile, Auto and Int grid layers
        for (int i = level.LayerInstances.Length - 1; i >= 0; i--)
        {
            LayerInstance layer = level.LayerInstances[i];

            if (layer._TilesetRelPath == null)
            {
                continue;
            }

            if (layer._Type == LayerType.Entities)
            {
                continue;
            }

            Texture2D texture = GetTexture(level, layer._TilesetRelPath);

            int            width        = layer._CWid * layer._GridSize;
            int            height       = layer._CHei * layer._GridSize;
            RenderTarget2D renderTarget = new(graphicsDevice, width, height, false, SurfaceFormat.Color, DepthFormat.None, 0, RenderTargetUsage.PreserveContents);

            graphicsDevice.SetRenderTarget(renderTarget);
            layers.Add(renderTarget);

            switch (layer._Type)
            {
            case LayerType.Tiles:
                foreach (TileInstance tile in layer.GridTiles.Where(tile => layer._TilesetDefUid.HasValue))
                {
                    Vector2       position = new(tile.Px.X + layer._PxTotalOffsetX, tile.Px.Y + layer._PxTotalOffsetY);
                    Rectangle     rect     = new(tile.Src.X, tile.Src.Y, layer._GridSize, layer._GridSize);
                    SpriteEffects mirror   = (SpriteEffects)tile.F;
                    SpriteBatch.Draw(texture, position, rect, Color.White, 0, Vector2.Zero, 1f, mirror, 0);
                }

                break;

            case LayerType.AutoLayer:
            case LayerType.IntGrid:
                if (layer.AutoLayerTiles.Length > 0)
                {
                    foreach (TileInstance tile in layer.AutoLayerTiles.Where(tile => layer._TilesetDefUid.HasValue))
                    {
                        Vector2       position = new(tile.Px.X + layer._PxTotalOffsetX, tile.Px.Y + layer._PxTotalOffsetY);
                        Rectangle     rect     = new(tile.Src.X, tile.Src.Y, layer._GridSize, layer._GridSize);
                        SpriteEffects mirror   = (SpriteEffects)tile.F;
                        SpriteBatch.Draw(texture, position, rect, Color.White, 0, Vector2.Zero, 1f, mirror, 0);
                    }
                }

                break;

            case LayerType.Entities:
                break;

            default:
                break;
            }
        }

        return(layers.ToArray());
    }
Esempio n. 9
0
 public void SetLayer(LayerInstance layer)
 {
     Layer = layer;
 }