건축 및 고용에 비용 소모 기능 추가
This commit is contained in:
@@ -328,16 +328,20 @@ namespace Northbound
|
||||
|
||||
if (Physics.Raycast(ray, out RaycastHit hit, maxPlacementDistance, groundLayer))
|
||||
{
|
||||
|
||||
|
||||
// Check if placement is valid
|
||||
bool isValid = BuildingManager.Instance.IsValidPlacement(data, hit.point, currentRotation, out Vector3 snappedPosition);
|
||||
|
||||
// Check affordability
|
||||
var coreResourceManager = CoreResourceManager.Instance;
|
||||
bool canAfford = coreResourceManager != null && coreResourceManager.CanAfford(data.mana);
|
||||
|
||||
// Update preview position (placementOffset 적용)
|
||||
previewObject.transform.position = snappedPosition + data.placementOffset;
|
||||
previewObject.transform.rotation = Quaternion.Euler(0, currentRotation * 90f, 0);
|
||||
|
||||
// Update material based on validity
|
||||
Material targetMat = isValid ? validMaterial : invalidMaterial;
|
||||
// Update material based on validity and affordability
|
||||
Material targetMat = (isValid && canAfford) ? validMaterial : invalidMaterial;
|
||||
foreach (var renderer in previewRenderers)
|
||||
{
|
||||
Material[] mats = new Material[renderer.materials.Length];
|
||||
@@ -462,6 +466,10 @@ namespace Northbound
|
||||
Vector3 dragEndPosition = hit.point;
|
||||
List<Vector3> positions = CalculateDragBuildingPositions(dragStartPosition, dragEndPosition, data);
|
||||
|
||||
// Check affordability for all buildings
|
||||
var coreResourceManager = CoreResourceManager.Instance;
|
||||
bool canAffordAll = coreResourceManager != null && coreResourceManager.CanAfford(data.mana * positions.Count);
|
||||
|
||||
// 기존 프리뷰 정리
|
||||
ClearDragPreviews();
|
||||
|
||||
@@ -476,9 +484,9 @@ namespace Northbound
|
||||
}
|
||||
|
||||
bool isValid = BuildingManager.Instance.IsValidPlacement(data, pos, currentRotation, out Vector3 snappedPosition);
|
||||
|
||||
|
||||
GameObject preview = Instantiate(data.prefab);
|
||||
|
||||
|
||||
// Remove NetworkObject and Building components
|
||||
if (preview.GetComponent<NetworkObject>() != null)
|
||||
Destroy(preview.GetComponent<NetworkObject>());
|
||||
@@ -490,7 +498,7 @@ namespace Northbound
|
||||
preview.transform.rotation = Quaternion.Euler(0, currentRotation * 90f, 0);
|
||||
|
||||
// Apply materials
|
||||
Material targetMat = isValid ? validMaterial : invalidMaterial;
|
||||
Material targetMat = (isValid && canAffordAll) ? validMaterial : invalidMaterial;
|
||||
Renderer[] renderers = preview.GetComponentsInChildren<Renderer>();
|
||||
foreach (var renderer in renderers)
|
||||
{
|
||||
@@ -569,6 +577,14 @@ namespace Northbound
|
||||
|
||||
TowerData selectedData = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
|
||||
|
||||
// Check affordability
|
||||
var coreResourceManager = CoreResourceManager.Instance;
|
||||
if (coreResourceManager == null || !coreResourceManager.CanAfford(selectedData.mana * dragBuildingPositions.Count))
|
||||
{
|
||||
Debug.Log("<color=yellow>[BuildingPlacement] 자원이 부족합니다.</color>");
|
||||
return;
|
||||
}
|
||||
|
||||
int successCount = 0;
|
||||
foreach (var position in dragBuildingPositions)
|
||||
{
|
||||
@@ -608,7 +624,15 @@ namespace Northbound
|
||||
if (Physics.Raycast(ray, out RaycastHit hit, maxPlacementDistance, groundLayer))
|
||||
{
|
||||
TowerData selectedData = BuildingManager.Instance.availableBuildings[selectedBuildingIndex];
|
||||
|
||||
|
||||
// Check affordability
|
||||
var coreResourceManager = CoreResourceManager.Instance;
|
||||
if (coreResourceManager != null && !coreResourceManager.CanAfford(selectedData.mana))
|
||||
{
|
||||
Debug.Log("<color=yellow>[BuildingPlacement] 자원이 부족합니다.</color>");
|
||||
return;
|
||||
}
|
||||
|
||||
if (BuildingManager.Instance.IsValidPlacement(selectedData, hit.point, currentRotation, out Vector3 groundPosition))
|
||||
{
|
||||
// 토대 배치 요청
|
||||
|
||||
Reference in New Issue
Block a user