Files
ProjectMD/Assets/Scripts/Tower/ConstructionSite.cs
Dal4segno d6292b6879 멀티플레이어 지원
이동, 건설, 인터랙션, 공격 등
2026-01-16 19:30:26 +09:00

45 lines
1.5 KiB
C#

using UnityEngine;
using Unity.Netcode;
public class ConstructionSite : NetworkBehaviour
{
private NetworkVariable<float> _currentTimer = new NetworkVariable<float>(0f);
private NetworkVariable<int> _syncTurretIndex = new NetworkVariable<int>();
private Vector3Int _gridPos;
private float _targetBuildTime;
private bool _isCompleted = false;
public void Initialize(int index, Vector3Int pos)
{
if (!IsServer) return;
_syncTurretIndex.Value = index;
_gridPos = pos;
_targetBuildTime = BuildManager.Instance.GetTurretData(index).buildTime;
}
void Update()
{
if (!IsServer || _isCompleted) return;
_currentTimer.Value += Time.deltaTime;
if (_currentTimer.Value >= _targetBuildTime) CompleteBuild();
}
public void AdvanceConstruction(float amount) => AdvanceBuildRpc(amount);
[Rpc(SendTo.Server, InvokePermission = RpcInvokePermission.Everyone)]
private void AdvanceBuildRpc(float amount) => _currentTimer.Value += amount;
private void CompleteBuild()
{
_isCompleted = true;
var data = BuildManager.Instance.GetTurretData(_syncTurretIndex.Value);
// [중요] 저장된 그리드 좌표로부터 정확한 월드 좌표 복원
Vector3 finalPos = BuildManager.Instance.GridToWorld(_gridPos);
GameObject finalObj = Instantiate(data.finalPrefab, finalPos, Quaternion.identity);
finalObj.GetComponent<NetworkObject>().Spawn();
GetComponent<NetworkObject>().Despawn();
}
}