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
<GameObject
> _blockList
= new List
<GameObject
> ();
private int _blockIndex;
public void CalculateBlocks (int MapWidth, int MapHeight)
{
_blockIndex = 0;
foreach (GameObject _block in _blockList)
{
if (_block != null)
{
_block.GetComponent<Block>().CalculateBlock(MapWidth, MapHeight, _blockIndex, this.gameObject.GetComponent<BlockList>());
}
_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<SpriteRenderer>();
_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;
}
}
}
}