Ghost.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class Ghost : MonoBehaviour {
  5. private Transform visual;
  6. private void Start() {
  7. RefreshVisual();
  8. GroundGridControllerScript.Instance.OnSelectedChanged += Instance_InSelectedChanged;
  9. }
  10. private void Instance_InSelectedChanged(object sender, System.EventArgs args) {
  11. RefreshVisual();
  12. }
  13. private void LateUpdate() {
  14. Vector3 targetPosition = GroundGridControllerScript.Instance.GetMouseWorldSnappedPosition();
  15. targetPosition.y = 1f;
  16. Vector2Int rotationOffset = GroundGridControllerScript.Instance.GetPlacedObjectRotationOffset();
  17. transform.position = Vector3.Lerp(transform.position, targetPosition + new Vector3(rotationOffset.x, 0, rotationOffset.y) * GroundGridControllerScript.Instance.GetGridXZ().GetCellSize(), Time.deltaTime * 15f);
  18. transform.rotation = Quaternion.Lerp(transform.rotation, GroundGridControllerScript.Instance.GetPlacedObjectRotation(), Time.deltaTime * 15f);
  19. }
  20. public void RefreshVisual() {
  21. if (visual != null) {
  22. Destroy(visual.gameObject);
  23. }
  24. PlacedObjectTypeSO placedObjectTypeSO = GroundGridControllerScript.Instance.GetActiveObjectTypeSO();
  25. if (placedObjectTypeSO != null) {
  26. visual = Instantiate(placedObjectTypeSO.visual, Vector3.zero, Quaternion.identity);
  27. visual.parent = transform;
  28. visual.localPosition = Vector3.zero;
  29. visual.localEulerAngles = Vector3.zero;
  30. SetLayerRecursive(visual.gameObject, 7);
  31. }
  32. }
  33. private void SetLayerRecursive(GameObject targetGameObject, int layer) {
  34. targetGameObject.layer = layer;
  35. foreach (Transform child in targetGameObject.transform) {
  36. SetLayerRecursive(child.gameObject, layer);
  37. }
  38. }
  39. }