56 lines
1.6 KiB
C#
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);
|
|
}
|
|
} |