using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Aleksy { [System.Serializable] public class ColorBlock { public GameObject _block; public Color _color; public ColorBlock (GameObject Block, Color Color) { _block = Block; _color = Color; } } public class BlockGenerator : MonoBehaviour { [SerializeField] private ColorBlock[] _colorBlocks = new ColorBlock[1]; public GameObject GenerateBlock(Color Color, int X, int Y) { foreach (ColorBlock _block in _colorBlocks) { if (Color.Equals(_block._color)) { return Instantiate(_block._block, new Vector2(X, Y), Quaternion.identity); } } return null; } } } using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Aleksy { public class MapGenerator : MonoBehaviour { [SerializeField] private BlockGenerator _blockGenerator; [SerializeField] private Texture2D _map; private Color _colorOfPixel; private GameObject _generatedBlock; [SerializeField] private BlockList _blockList; private void Start() { for (int y = 0; y < _map.width; y++) { for (int x = 0; x < _map.height; x++) { _generatedBlock = _blockGenerator.GenerateBlock(_map.GetPixel(x, y), x, y); _blockList._blockList.Add(_generatedBlock); } } _blockList.CalculateBlocks(_map.width, _map.height); } } } using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Aleksy { public class BlockList : MonoBehaviour { public List _blockList = new List (); private int _blockIndex; public void CalculateBlocks (int MapWidth, int MapHeight) { _blockIndex = 0; foreach (GameObject _block in _blockList) { if (_block != null) { _block.GetComponent().CalculateBlock(MapWidth, MapHeight, _blockIndex, this.gameObject.GetComponent()); } _blockIndex += 1; } } } } using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Aleksy { public class Block : MonoBehaviour { [SerializeField] private int INDEX; private SpriteRenderer _renderer; [SerializeField] private Sprite[] _blockSprites = new Sprite[16]; [SerializeField] private int _directionCode; public void CalculateBlock(int MapWidth, int MapHeight, int BlockIndex, BlockList Blocklist) { INDEX = BlockIndex; _renderer = this.GetComponent(); _directionCode = 10000; if (BlockIndex < (MapWidth * MapHeight) - MapWidth - 1 && Blocklist._blockList[BlockIndex + MapWidth] != null) { //UP Direction _directionCode += 1; } if (BlockIndex > MapWidth - 1 && Blocklist._blockList[BlockIndex - MapWidth] != null) { //DOWN Direction _directionCode += 10; } if (BlockIndex % MapWidth != 0 && Blocklist._blockList[BlockIndex - 1] != null) { //LEFT Direction _directionCode += 100; } if (BlockIndex % MapWidth != MapWidth - 1 && Blocklist._blockList[BlockIndex + 1] != null) { //RIGHT Direction _directionCode += 1000; } switch (_directionCode) { case 0001: _renderer.sprite = _blockSprites[0]; break; case 1000: _renderer.sprite = _blockSprites[1]; break; case 0010: _renderer.sprite = _blockSprites[2]; break; case 0100: _renderer.sprite = _blockSprites[3]; break; case 1001: _renderer.sprite = _blockSprites[4]; break; case 1010: _renderer.sprite = _blockSprites[5]; break; case 0110: _renderer.sprite = _blockSprites[6]; break; case 0101: _renderer.sprite = _blockSprites[7]; break; case 1100: _renderer.sprite = _blockSprites[8]; break; case 0011: _renderer.sprite = _blockSprites[9]; break; case 1110: _renderer.sprite = _blockSprites[10]; break; case 0111: _renderer.sprite = _blockSprites[11]; break; case 1101: _renderer.sprite = _blockSprites[12]; break; case 1011: _renderer.sprite = _blockSprites[13]; break; case 0000: _renderer.sprite = _blockSprites[14]; break; case 1111: _renderer.sprite = _blockSprites[15]; break; } } } }