using System.Collections; using System.Collections.Generic; using UnityEngine; using KairoEngine.Core; namespace KairoEngine.VoxelBuildingSystem { public class BuildingBlueprintController : MonoBehaviour { public VoxelBuildingSystem buildingSystem; public Transform currentBlueprint; private void Start() { RefreshVisual(); GenericEvents.StartListening("OnBuildingTemplateChanged", OnBuildingTemplateChanged); } private void OnDisable() { GenericEvents.StopListening("OnBuildingTemplateChanged", OnBuildingTemplateChanged); } private void OnBuildingTemplateChanged() { RefreshVisual(); } private void LateUpdate() { if(currentBlueprint == null) return; Vector3 targetPosition = buildingSystem.GetMouseWorldSnappedPosition(); //targetPosition.y = 1f; currentBlueprint.transform.position = Vector3.Lerp(currentBlueprint.transform.position, targetPosition, Time.deltaTime * 15f); currentBlueprint.transform.rotation = Quaternion.Lerp(transform.rotation, buildingSystem.transform.rotation, Time.deltaTime * 15f); if(buildingSystem.tool == VoxelBuildingTool.Build) currentBlueprint.gameObject.SetActive(true); else currentBlueprint.gameObject.SetActive(false); } private void RefreshVisual() { if (currentBlueprint != null) { Destroy(currentBlueprint.gameObject); currentBlueprint = null; } BuildingTemplate buildingTemplate = buildingSystem.buildingTemplates[buildingSystem.currentBuildingTemplate]; if (buildingTemplate != null) { currentBlueprint = Instantiate(buildingTemplate.visual, Vector3.zero, Quaternion.identity); currentBlueprint.parent = transform; currentBlueprint.localPosition = Vector3.zero; currentBlueprint.localEulerAngles = Vector3.zero; } } } }