Files
JuegoSim/Assets/_Project/Scripts/Code/BlocksLayer/BlockFactory.cs
T
2026-07-21 08:56:10 +03:00

71 lines
2.0 KiB
C#

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.Events;
public class BlockFactory : MonoBehaviour
{
private static BlockFactory Instance;
private Environment environment;
private List<BlockData> blockDataList;
private Dictionary<string, BlockData> blocksData = new Dictionary<string, BlockData>();
public static BlockFactory getInstance()
{
if (Instance == null)
{
GameObject factoryObject = new GameObject("blockFactory");
Instance = factoryObject.AddComponent<BlockFactory>();
}
return Instance;
}
private void Awake()
{
if (Instance == null)
{
Instance = this;
}
else
{
Destroy(gameObject);
}
}
private void Start()
{
environment = Environment.getInstance();
blockDataList = Resources.LoadAll<BlockData>("BlocksData").ToList();
foreach (BlockData blockData in blockDataList)
{
blocksData.Add(blockData.blockName, blockData);
}
}
public GameObject createblock(string prefabId, Vector3 position, Quaternion rotation, string id = null, bool layerDiff = false)
{
Debug.Log(prefabId);
if (blocksData.ContainsKey(prefabId))
{
GameObject blockPrefab = blocksData[prefabId].blockPrefab;
GameObject block = Instantiate(blockPrefab, position, rotation);
if (layerDiff)
{
block.gameObject.layer = LayerMask.NameToLayer("Ignore Interaction");
Debug.Log($"Set layer of {block} to {LayerMask.LayerToName(block.layer)}");
}
// the only blocks added to the environment is created with BlockFactory
environment.addBlock(block.GetComponent<Block>(), id);
return block;
}
else
{
Debug.LogWarning($"block with PrefabId {prefabId} not found!");
return null;
}
}
}