팀원들 모두가 시야를 공유하도록 함
This commit is contained in:
@@ -342,12 +342,14 @@ namespace Northbound
|
|||||||
fogData.ClearCurrentVision();
|
fogData.ClearCurrentVision();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 모든 시야 제공자의 시야 범위 계산
|
// 모든 시야 제공자의 시야 범위 계산 (팀 시야 공유)
|
||||||
foreach (var provider in _visionProviders)
|
foreach (var provider in _visionProviders)
|
||||||
{
|
{
|
||||||
if (provider == null || !provider.IsActive()) continue;
|
if (provider == null || !provider.IsActive()) continue;
|
||||||
|
|
||||||
ulong ownerId = provider.GetOwnerId();
|
ulong ownerId = provider.GetOwnerId();
|
||||||
|
TeamType providerTeam = provider.GetTeam();
|
||||||
|
|
||||||
if (!_serverFogData.ContainsKey(ownerId))
|
if (!_serverFogData.ContainsKey(ownerId))
|
||||||
{
|
{
|
||||||
_serverFogData[ownerId] = new FogOfWarData(gridWidth, gridHeight);
|
_serverFogData[ownerId] = new FogOfWarData(gridWidth, gridHeight);
|
||||||
@@ -356,7 +358,8 @@ namespace Northbound
|
|||||||
Vector3 position = provider.GetTransform().position;
|
Vector3 position = provider.GetTransform().position;
|
||||||
float visionRange = provider.GetVisionRange();
|
float visionRange = provider.GetVisionRange();
|
||||||
|
|
||||||
RevealArea(ownerId, position, visionRange);
|
// 같은 팀의 모든 멤버에게 시야 공유
|
||||||
|
RevealAreaForTeam(providerTeam, position, visionRange);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 각 클라이언트에게 시야 데이터 전송
|
// 각 클라이언트에게 시야 데이터 전송
|
||||||
@@ -387,6 +390,47 @@ namespace Northbound
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 같은 팀의 모든 멤버에게 시야 공개
|
||||||
|
/// </summary>
|
||||||
|
private void RevealAreaForTeam(TeamType team, Vector3 worldPosition, float radius)
|
||||||
|
{
|
||||||
|
// 해당 팀의 모든 멤버 찾기
|
||||||
|
foreach (var kvp in _serverFogData)
|
||||||
|
{
|
||||||
|
ulong clientId = kvp.Key;
|
||||||
|
|
||||||
|
// 클라이언트의 팀 확인
|
||||||
|
if (GetClientTeam(clientId) == team)
|
||||||
|
{
|
||||||
|
RevealArea(clientId, worldPosition, radius);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 클라이언트의 팀 가져오기
|
||||||
|
/// </summary>
|
||||||
|
private TeamType GetClientTeam(ulong clientId)
|
||||||
|
{
|
||||||
|
if (NetworkManager.Singleton == null) return TeamType.Neutral;
|
||||||
|
|
||||||
|
// 연결된 클라이언트에서 플레이어 오브젝트 찾기
|
||||||
|
if (NetworkManager.Singleton.SpawnManager.SpawnedObjects != null)
|
||||||
|
{
|
||||||
|
foreach (var netObj in NetworkManager.Singleton.SpawnManager.SpawnedObjects.Values)
|
||||||
|
{
|
||||||
|
var playerController = netObj.GetComponent<NetworkPlayerController>();
|
||||||
|
if (playerController != null && playerController.OwnerPlayerId == clientId)
|
||||||
|
{
|
||||||
|
return playerController.GetTeam();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return TeamType.Neutral;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 클라이언트에게 안개 데이터 전송
|
/// 클라이언트에게 안개 데이터 전송
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -26,5 +26,10 @@ namespace Northbound
|
|||||||
/// 현재 활성화 상태인지
|
/// 현재 활성화 상태인지
|
||||||
/// </summary>
|
/// </summary>
|
||||||
bool IsActive();
|
bool IsActive();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 소속 팀 (팀 시야 공유용)
|
||||||
|
/// </summary>
|
||||||
|
TeamType GetTeam();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -35,6 +35,7 @@ namespace Northbound
|
|||||||
public float GetVisionRange() => _playerStats?.GetSight() ?? 10f;
|
public float GetVisionRange() => _playerStats?.GetSight() ?? 10f;
|
||||||
public Transform GetTransform() => transform;
|
public Transform GetTransform() => transform;
|
||||||
public bool IsActive() => IsSpawned;
|
public bool IsActive() => IsSpawned;
|
||||||
|
public TeamType GetTeam() => _playerController?.GetTeam() ?? TeamType.Player;
|
||||||
|
|
||||||
private void OnDrawGizmosSelected()
|
private void OnDrawGizmosSelected()
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user