using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BuildingBlocks : MonoBehaviour
{
public Material templateMaterial;
public Material templateYellow;
public Material templateBlue;
public bool buildModeOn = false;
public bool building = false;
private Vector3 buildPosition;
private Vector3 point;
public float distance = 0;
public float allowedDistance;
private GameObject currentTemplateBlock;
private GameObject newBlock;
[SerializeField]
private GameObject[] blockTemplatePrefab;
[SerializeField]
private GameObject[] blockPrefab;
[SerializeField]
private LayerMask buildableSurfacesLayer;
public float curDist = 1000f;
GameObject ItemToDestroy;
public int BlockNumber;
// Use this for initialization
void Start()
{
buildModeOn = true;
}
// Update is called once per frame
void Update()
{
GameObject[] allBlocks;
allBlocks = GameObject.FindGameObjectsWithTag("PlacedBlock");
RaycastHit hitInfo = new RaycastHit();
bool hit = Physics.Raycast(Camera.main.ScreenPointToRay(Input.mousePosition), out hitInfo, 20, buildableSurfacesLayer);
if (Input.GetKeyDown("b"))
{
buildModeOn = !buildModeOn;
}
if (buildModeOn)
{
if (hit)
{
point = hitInfo.point;
buildPosition = new Vector3(Mathf.Round(point.x), Mathf.Round(point.y) + (0.5f), Mathf.Round(point.z));
building = true;
}
else
{
if(currentTemplateBlock != null)
Destroy(currentTemplateBlock.gameObject);
building = false;
}
}
if (!buildModeOn && currentTemplateBlock != null)
{
Destroy(currentTemplateBlock.gameObject);
building = false;
}
if (building && currentTemplateBlock == null)
{
currentTemplateBlock = Instantiate(blockTemplatePrefab[BlockNumber], buildPosition, Quaternion.identity);
currentTemplateBlock.GetComponent<MeshRenderer>().material = templateMaterial;
}
if (building && currentTemplateBlock != null)
{
currentTemplateBlock.transform.position = buildPosition;
if (Input.GetMouseButtonDown(0))
{
PlaceBlock();
}
for (int i = 0; i < allBlocks.Length; i++)
{
//for larger blocks in this case its only block 1
if (BlockNumber == 1)
{
allowedDistance = 4.9f;
}
else allowedDistance = 1.414214f;
distance = Vector3.Distance(allBlocks[i].gameObject.transform.position, currentTemplateBlock.transform.position);
if (distance == 1 || distance - allowedDistance < 0.03)
{
Debug.Log("Block and temp block next to each other");
currentTemplateBlock.GetComponent<MeshRenderer>().material = templateBlue;
break;
}
else currentTemplateBlock.GetComponent<MeshRenderer>().material = templateYellow;
}
}
if(Input.GetKeyDown(KeyCode.Z))
{
if(allBlocks.Length != 0)
Destroy(allBlocks[allBlocks.Length - 1].gameObject);
}
if (Input.GetKeyDown(KeyCode.Delete) || Input.GetMouseButtonDown(1))
{
foreach(GameObject Block in allBlocks)
{
float dist = Vector3.Distance(Block.transform.position, currentTemplateBlock.transform.position);
if(dist <= curDist)
{
curDist = dist;
ItemToDestroy = Block;
}
}
}
if (ItemToDestroy != null && distance <= allowedDistance)
{
Destroy(ItemToDestroy);
curDist = 100000;
}
if (Input.GetKey("escape"))
{
Application.Quit();
}
}
private void PlaceBlock()
{
Debug.Log("Placing block");
newBlock = Instantiate(blockPrefab[BlockNumber], buildPosition, Quaternion.identity);
}
}