/// <summary> /// Draw all tiles in this room by setting sprite renderers at their locations from the pool. /// </summary> public void SetSprites() { if (!hasSprites) { for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { Tile tile = GetTile(x, y); TileProperties data = tile.Properties; if (tile != TileType.Air) { SpriteRenderer rend = spritePool.Get(); rend.sprite = data.sprite; Vector2 wP = WorldPos + new Vector2(x, y); // Tile z position is set to 1 so it is behind all dynamic entities. // This prevents sprite sorting issues. rend.transform.position = new Vector3(wP.x, wP.y, 1.0f); spriteList.Add(rend); } } } hasSprites = true; } }
/// <summary> /// Draw all tiles in this room by setting sprite renderers at their locations from the pool. /// </summary> public void SetSprites() { if (!hasSprites) { for (int y = 0; y < Height; y++) { for (int x = 0; x < Width; x++) { Tile tile = GetTile(x, y); TileProperties data = tile.Properties; if (tile != TileType.Air) { SpriteRenderer rend = spritePool.Get(); rend.sprite = data.sprite; rend.transform.position = WorldPos + new Vector2(x, y); spriteList.Add(rend); } } } hasSprites = true; } }
/// <summary> /// Loads an array of items to be displayed. /// Will apply offset, initialize animated or variant items, /// scale and height-level. Loaded items will be in the order of the array. /// </summary> /// <param name="items">The array of items</param> /// <param name="screenPosition">The origin screenposition to display the items</param> /// <param name="tilePosition">The corresponding tileposition to the screenpostion</param> /// <param name="chunk">The dynamic chunk in charge of the item sprites</param> private void LoadItemStack(MapObject[] items, Vector3 screenPosition, Vector3i tilePosition, DynamicChunk chunk) { foreach (var item in items) { var unitySprite = spritePool.Get(); var itemBase = itemBases[item.BaseId]; Sprite sprite; float[] offset; if (itemBase is SimpleObjectBase simpleBase) { sprite = sprites[simpleBase.SpriteId]; offset = simpleBase.Offset; } else { var variantBase = (VariantObjectBase)itemBase; var spriteId = SetupMultiFrameItem(variantBase, tilePosition.x, tilePosition.y, unitySprite); sprite = sprites[spriteId]; offset = variantBase.GetOffset(spriteId); } unitySprite.sprite = sprite; unitySprite.transform.position = new Vector3( screenPosition.x - sprite.bounds.extents.x + offset[0], screenPosition.y + offset[1] + chunk.GetHeightLevel(tilePosition), screenPosition.z ); SetupItemScale(tilePosition.x, tilePosition.y, itemBase.SizeVariance, unitySprite); unitySprite.gameObject.SetActive(true); if (itemBase.Height > 0f) { chunk.IncreaseHeightLevel(tilePosition, itemBase.Height); } chunk.RegisterItem(unitySprite); screenPosition.z -= 0.000001f; } }