Пример #1
0
    /// <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;
        }
    }
Пример #3
0
        /// <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;
            }
        }