BuildingBlueprintController.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using KairoEngine.Core;
  5. namespace KairoEngine.VoxelBuildingSystem
  6. {
  7. public class BuildingBlueprintController : MonoBehaviour
  8. {
  9. public VoxelBuildingSystem buildingSystem;
  10. public Transform currentBlueprint;
  11. private void Start() {
  12. RefreshVisual();
  13. GenericEvents.StartListening("OnSelectedChanged", OnSelectedChanged);
  14. }
  15. private void OnDisable()
  16. {
  17. GenericEvents.StopListening("OnSelectedChanged", OnSelectedChanged);
  18. }
  19. private void OnSelectedChanged() {
  20. RefreshVisual();
  21. }
  22. private void LateUpdate() {
  23. if(currentBlueprint == null) return;
  24. Vector3 targetPosition = buildingSystem.GetMouseWorldSnappedPosition();
  25. //targetPosition.y = 1f;
  26. currentBlueprint.transform.position = Vector3.Lerp(currentBlueprint.transform.position, targetPosition, Time.deltaTime * 15f);
  27. currentBlueprint.transform.rotation = Quaternion.Lerp(transform.rotation, buildingSystem.transform.rotation, Time.deltaTime * 15f);
  28. if(buildingSystem.tool == VoxelBuildingTool.Build) currentBlueprint.gameObject.SetActive(true);
  29. else currentBlueprint.gameObject.SetActive(false);
  30. }
  31. private void RefreshVisual() {
  32. if (currentBlueprint != null) {
  33. Destroy(currentBlueprint.gameObject);
  34. currentBlueprint = null;
  35. }
  36. BuildingTemplate buildingTemplate = buildingSystem.buildingTemplates[buildingSystem.currentBuildingTemplate];
  37. if (buildingTemplate != null) {
  38. currentBlueprint = Instantiate(buildingTemplate.visual, Vector3.zero, Quaternion.identity);
  39. currentBlueprint.parent = transform;
  40. currentBlueprint.localPosition = Vector3.zero;
  41. currentBlueprint.localEulerAngles = Vector3.zero;
  42. }
  43. }
  44. }
  45. }