// Layer type (possible values: IntGrid, Entities, Tiles or AutoLayer) private string GetLayerName(LayerInstance layer) { if (layer.IsTilesLayer) { return("Tiles"); } return("AutoLayer"); }
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); }
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; } } }
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); }
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; }
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; } }
public void SetLayer(LayerInstance layer) { Layer = layer; LayerScale = Layer.GridSize / (float)Importer.PixelsPerUnit; }
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()); }
public void SetLayer(LayerInstance layer) { Layer = layer; }