Files
ProjectMD/Assets/Scripts/Tower/ConstructionSite.cs
2026-01-15 22:46:40 +09:00

56 lines
1.6 KiB
C#

using UnityEngine;
public class ConstructionSite : MonoBehaviour
{
private GameObject _finalPrefab;
private float _buildTime;
private float _timer;
private Vector3Int _gridPos;
private bool _isCompleted = false; // 중복 완공 방지 플래그
public void Initialize(GameObject final, float time, Vector3Int pos)
{
_finalPrefab = final;
_buildTime = time;
_gridPos = pos;
_timer = 0;
_isCompleted = false;
}
void Update()
{
if (_isCompleted) return;
// 매 프레임 자동으로 시간이 흐름
_timer += Time.deltaTime;
if (_timer >= _buildTime) Complete();
}
// [핵심] 플레이어가 상호작용 버튼을 꾹 누를 때 호출되는 함수
public void AdvanceConstruction(float amount)
{
if (_isCompleted) return;
_timer += amount;
if (_timer >= _buildTime) Complete();
}
private void Complete()
{
// 1. 터널 생성
GameObject tunnel = Instantiate(_finalPrefab, transform.position, Quaternion.identity);
TunnelNode node = tunnel.GetComponentInChildren<TunnelNode>();
if (node != null)
{
// 2. [수정] 완공된 터널의 루트 위치로 좌표 계산
Vector3Int myGridPos = BuildManager.Instance.WorldToGrid3D(tunnel.transform.position);
// 3. 레지스트리 등록 및 연결
BuildManager.Instance.RegisterTunnel(myGridPos, node);
node.LinkVertical();
}
Destroy(gameObject);
}
}