2024.12.18(수)
using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
// 군 전체 정보
public class DomainArmy : MonoBehaviour
{
Domain domainData;
// 전략 세팅 시스템
StrategySettingSystem strategySettingSystem;
// 임시로 ui와 연결
public UI_StrategySetting ui_StrategySetting;
// 데이터 관리와 실제 군 관리는 동시에 이루어진다.(그렇게 할 예정)
// 영주 데이터
public Lord LordData { get; private set; }
// 전체 기사 데이터 리스트
public List<UserKnight> WholeKnightDataList { get; private set; } = new List<UserKnight>();
// 전체 병종 데이터 리스트
public List<UserUnitType> WholeUnitTypeDataList { get; private set; } = new List<UserUnitType>();
// 지휘관
public ArmyCommander ArmyCommander { get; private set; }
// 지휘관 부대 데이터
public UnitDivision ArmyCommanderUnitDivisionData { get; private set; }
// 지휘관 부대
public ArmyUnitDivision ArmyCommanderUnitDivision { get; private set; }
// 지휘관 프리펩
ArmyCommander armyCommanderPrefabs;
// 보유 기사 데이터 리스트(출전x)
public List<UserKnight> OwnedKnightDataList { get; private set; } = new List<UserKnight>();
// 보유 병종 데이터 리스트(출전x)
public List<UserUnitType> OwnedUnitTypeDataList { get; private set; } = new List<UserUnitType>();
// 출전 기사 데이터 리스트
public List<UserKnight> DeployedKnightDataList { get; private set; } = new List<UserKnight>();
// 출전 병종 데이터 리스트
public List<UserUnitType> DeployedUnitTypeDataList { get; private set; } = new List<UserUnitType>();
// 전체 전략과 부대, 부대배치, 부대임무는 출전 병력의 데이터만 사용할 것이다.
// 기본 전략
public Strategy StartStrategy { get; private set; }
// 전체 전략 데이터 리스트
public List<Strategy> StrategyDataList { get; private set; } = new List<Strategy>();
// 전체 부대 데이터 리스트
public List<UnitDivision> UnitDivisionDataList { get; private set; } = new List<UnitDivision>();
// 전체 부대배치 데이터 리스트
public List<UnitDivisionPosition> UnitDivisionPositionDataList { get; private set; } = new List<UnitDivisionPosition>();
// 전체 부대임무 데이터 리스트
public List<UnitDivisionRole> UnitDivisionRoleDataList { get; private set; } = new List<UnitDivisionRole>();
/// <summary>
/// 전략을 관리하기 위해, 하나의 전략에 있는 데이터들을 가져와서 묶어 놓는다.
/// 전략 리스트 (ArmyStategy)
/// 전략1
/// 부대 리스트
/// 부대
/// 부대배치
/// 부대임무
/// ...
/// 전략2
/// 부대 리스트
/// 부대
/// 부대배치
/// 부대임무
/// ...
/// ...
/// </summary>
// 전략 리스트 (ArmyStategy)
public List<ArmyStrategy> ArmyStrategyList { get; private set; } = new List<ArmyStrategy>();
// 기본 전략 (실제)
public ArmyStrategy StartArmyStrategy { get; private set; }
// ArmyStrategy 부모 위치
[SerializeField] private Transform strategyParent;
// ArmyStrategy 프리팹 참조
[SerializeField] private ArmyStrategy armyStrategyPrefab;
// 영주 출전 여부
public bool IsLordDeployed { get; private set; }
/// <summary>
/// 실제로 군대가 출전했을 때의 동작을 담당하게 될 군대 데이터가 있는 리스트
/// 출전 부대 리스트 (실제)
/// 출전 부대
/// 출전 기사
/// 출전 병종
/// 부대 임무 - 기본 전략의 임무
/// ...
/// </summary>
// 출전 부대 리스트 (실제)
public List<ArmyUnitDivision> AllArmyUnitDivisionList { get; private set; } = new List<ArmyUnitDivision>();
//ArmyLord domainArmyLord;
//List<ArmyKnight> knightList = new List<ArmyKnight>();
//List<ArmyUnitType> unitTypeList = new List<ArmyUnitType>();
private void Awake()
{
strategySettingSystem = new StrategySettingSystem(this);
StrategyManager.Instance.strategySettingSystem = strategySettingSystem;
armyCommanderPrefabs = Resources.Load<ArmyCommander>("Prefabs/TestUnits/ArmyCommander");
ArmyCommander = Instantiate(armyCommanderPrefabs, transform);
LoadDomainData();
LoadDomainArmy(domainData);
strategySettingSystem.SetStrategySettingSystemData();
strategySettingSystem.SetUIStrategySettingData();
}
private void Start()
{
}
public void LoadDomainData(string domainID = "do007")
{
List<Domain> domainList = LocatorManager.Instance.dataManager.domainInfo.Data.Domain;
for (int i = 0; i < domainList.Count; i++)
{
if (domainList[i].ID == domainID)
{
domainData = domainList[i];
}
}
}
public void LoadDomainArmy(Domain inputDomainData)
{
string doID = inputDomainData.ID;
List<Lord> lordList = LocatorManager.Instance.dataManager.lordInfo.Data.Lord;
for (int i = 0; i < lordList.Count; i++)
{
if (lordList[i].DomainID == doID)
{
LordData = lordList[i];
break;
}
}
List<UserKnight> userKnightList = LocatorManager.Instance.dataManager.userKnightInfo.Data.UserKnight;
for (int i = 0;i < userKnightList.Count; i++)
{
if (userKnightList[i].DomainID == doID)
{
WholeKnightDataList.Add(userKnightList[i]);
}
}
if (WholeKnightDataList.Count == 0)
{
Debug.LogWarning("LoadDomainArmy: WholeKnightDataList is empty after loading!");
}
List<UserUnitType> userUnitTypeList = LocatorManager.Instance.dataManager.userUnitTypeInfo.Data.UserUnitType;
for (int i = 0; i < userUnitTypeList.Count; i++)
{
if (userUnitTypeList[i].DomainID == doID)
{
WholeUnitTypeDataList.Add(userUnitTypeList[i]);
}
}
List<Strategy> strategyList = LocatorManager.Instance.dataManager.strategyInfo.Data.Strategy;
for (int i = 0; i < strategyList.Count; i++)
{
if (strategyList[i].DomainID == doID)
{
StrategyDataList.Add(strategyList[i]);
}
}
List<UnitDivision> unitDivisionList = LocatorManager.Instance.dataManager.unitDivisionInfo.Data.UnitDivision;
for (int i = 0; i < unitDivisionList.Count; i++)
{
if (unitDivisionList[i].DomainID == doID)
{
UnitDivisionDataList.Add(unitDivisionList[i]);
}
}
// 기본 전략은 첫 번째 전략
if (StrategyDataList.Count > 0)
{
StartStrategy = StrategyDataList[0];
}
else
{
Debug.LogError("StrategyDataList is empty!");
// TODO : 새로운 Strategy를 자동 생성하는 코드
}
// 전략 리스트 (ArmyStategy)
for (int i = 0; i < StrategyDataList.Count; i++)
{
ArmyStrategy armyStrategy = Instantiate(armyStrategyPrefab, strategyParent);
ArmyStrategyList.Add(armyStrategy);
armyStrategy.SetStrategyData(StrategyDataList[i], unitDivisionList);
}
// 출전 부대 리스트 (실제)
for (int i = 0; i < ArmyStrategyList.Count; i++)
{
List<ArmyUnitDivision> strategyUnitDivisionList = ArmyStrategyList[i].StrategyUnitDivisionList;
for (int j = 0; j < strategyUnitDivisionList.Count; j++)
{
AllArmyUnitDivisionList.Add(strategyUnitDivisionList[j]);
}
}
// 기본 전략 (ArmyStrategy) 설정
for (int i = 0; i < ArmyStrategyList.Count; i++)
{
if (StartStrategy.ID == ArmyStrategyList[i].StrategyData.ID)
{
StartArmyStrategy = ArmyStrategyList[i];
}
}
// 전략에 로드가 있는 부대가 있으면 true
IsLordDeployed = StartArmyStrategy.IsLordDeployed;
// 부대 기준으로 세팅(ArmyUnitDivision에서 세팅)
// 중복 방지하면서 세팅
for (int i = 0; i < AllArmyUnitDivisionList.Count; i++)
{
AddListUnique<UnitDivisionPosition>(UnitDivisionPositionDataList, AllArmyUnitDivisionList[i].UnitDivisionPositionData);
AddListUnique<UnitDivisionRole>(UnitDivisionRoleDataList, AllArmyUnitDivisionList[i].UnitDivisionRoleData);
}
// 보유 병종과 출전 병종 데이터 Init(보유 = 전체, 출전 = 0)
for (int i = 0; i < WholeUnitTypeDataList.Count; i++)
{
AddListUnique(OwnedUnitTypeDataList, (UserUnitType)WholeUnitTypeDataList[i].Clone());
AddListUnique(DeployedUnitTypeDataList, (UserUnitType)WholeUnitTypeDataList[i].Clone());
DeployedUnitTypeDataList[i].UnitTypePersonnal = 0;
}
// 기본 전략 기준으로 보유 병력(기사, 병종), 출전 병력 세팅
List<ArmyUnitDivision> startStrategyUnitDivisionList = StartArmyStrategy.StrategyUnitDivisionList;
for (int i = 0; i < startStrategyUnitDivisionList.Count; i++)
{
// 출전 기사 데이터 삽입
AddListUnique(DeployedKnightDataList, startStrategyUnitDivisionList[i].KnightData);
// 보유 병종과 출전 병종의 인원 설정
for (int j = 0; j < OwnedUnitTypeDataList.Count; j++)
{
if (startStrategyUnitDivisionList[i].UnitDivisionData.UserUnitTypeID == OwnedUnitTypeDataList[j].ID)
{
OwnedUnitTypeDataList[j].UnitTypePersonnal -= startStrategyUnitDivisionList[i].UnitDivisionData.UnitDivisionPersonnel;
DeployedUnitTypeDataList[j].UnitTypePersonnal += startStrategyUnitDivisionList[i].UnitDivisionData.UnitDivisionPersonnel;
}
}
// 지휘관 설정
if (startStrategyUnitDivisionList[i].UnitDivisionData.IsCommander == true)
{
ArmyCommanderUnitDivision = startStrategyUnitDivisionList[i];
ArmyCommanderUnitDivisionData = ArmyCommanderUnitDivision.UnitDivisionData;
if (ArmyCommanderUnitDivision.IsKnightLord)
{
ArmyCommander.SetArmyCommander(ArmyCommanderUnitDivision.LordData);
}
else
{
ArmyCommander.SetArmyCommander(ArmyCommanderUnitDivision.KnightData);
}
}
}
// 전체 기사에서 출전 기사를 제외한 나머지를 보유 기사에 편입
// 보유/출전 기사 분리
for (int i = 0; i < WholeKnightDataList.Count; i++)
{
bool isDeployed = false;
for (int j = 0; j < DeployedKnightDataList.Count; j++)
{
if (WholeKnightDataList[i].ID == DeployedKnightDataList[j].ID)
{
isDeployed = true;
break;
}
}
if (!isDeployed)
{
AddListUnique(OwnedKnightDataList, WholeKnightDataList[i]);
}
}
}
// 리스트에 추가할 때, 중복되는 데이터 방지
public void AddListUnique<T>(List<T> list, T item)
{
if (!list.Contains(item))
{
list.Add(item);
}
}
// OwnedKnightDataList DeployedKnightDataList
public void DeployKnight(UserKnight deployedKnight)
{
for (int i = 0; i < OwnedKnightDataList.Count; i++)
{
if (OwnedKnightDataList[i].ID == deployedKnight.ID)
{
DeployedKnightDataList.Add(deployedKnight);
OwnedKnightDataList.RemoveAt(i);
i--;
}
}
}
public void UnDelpoyKnight(UserKnight unDeployedKnight)
{
for (int i = 0; i < DeployedKnightDataList.Count; i++)
{
if (DeployedKnightDataList[i].ID == unDeployedKnight.ID)
{
OwnedKnightDataList.Add(unDeployedKnight);
DeployedKnightDataList.RemoveAt(i);
i--;
}
}
}
}
using System.Collections.Generic;
using System.Text;
using UnityEngine;
// 전략 설정 시스템
public class StrategySettingSystem
{
public DomainArmy DomainArmy { get; private set; }
// ui와 연결
UI_StrategySetting ui_StrategySetting;
// 영주 데이터
public Lord LordData { get; private set; }
// 전체 기사 데이터 리스트
public List<UserKnight> WholeKnightDataList { get; private set; }
// 전체 병종 데이터 리스트
public List<UserUnitType> WholeUnitTypeDataList { get; private set; }
// 지휘관
public ArmyCommander ArmyCommander { get; private set; }
// 지휘관 부대 데이터
public UnitDivision ArmyCommanderUnitDivisionData { get; private set; }
// 지휘관 부대
public ArmyUnitDivision ArmyCommanderUnitDivision { get; private set; }
// 보유 기사 데이터 리스트(출전x)
public List<UserKnight> OwnedKnightDataList { get; private set; }
// 보유 병종 데이터 리스트(출전x)
public List<UserUnitType> OwnedUnitTypeDataList { get; private set; }
// 출전 기사 데이터 리스트
public List<UserKnight> DeployedKnightDataList { get; private set; }
// 출전 병종 데이터 리스트
public List<UserUnitType> DeployedUnitTypeDataList { get; private set; }
// 전체 전략과 부대, 부대배치, 부대임무는 출전 병력의 데이터만 사용할 것이다.
// 기본 전략
public Strategy StartStrategy { get; private set; }
// 전체 전략 데이터 리스트
public List<Strategy> StrategyDataList { get; private set; }
// 전체 부대 데이터 리스트
public List<UnitDivision> UnitDivisionDataList { get; private set; }
// 전체 부대배치 데이터 리스트
public List<UnitDivisionPosition> UnitDivisionPositionDataList { get; private set; }
// 전체 부대임무 데이터 리스트
public List<UnitDivisionRole> UnitDivisionRoleDataList { get; private set; }
// 전략 리스트 (ArmyStategy)
public List<ArmyStrategy> ArmyStrategyList { get; private set; }
// 기본 전략 (실제)
public ArmyStrategy StartArmyStrategy { get; private set; }
// 영주 출전 여부
public bool IsLordDeployed { get; private set; }
// 출전 부대 리스트 (실제)
public List<ArmyUnitDivision> AllArmyUnitDivisionList { get; private set; }
// 현재 (세팅중인) 전략
public Strategy CurrentStrategy { get; private set; }
public ArmyStrategy CurrentArmyStrategy { get; private set; }
public StrategySettingSystem(DomainArmy domainArmy)
{
DomainArmy = domainArmy;
SetStrategySettingSystemData();
}
// DomainArmy의 데이터를 참조해서 설정
public void SetStrategySettingSystemData()
{
ui_StrategySetting = DomainArmy.ui_StrategySetting;
LordData = DomainArmy.LordData;
WholeKnightDataList = DomainArmy.WholeKnightDataList;
WholeUnitTypeDataList = DomainArmy.WholeUnitTypeDataList;
OwnedKnightDataList = DomainArmy.OwnedKnightDataList;
OwnedUnitTypeDataList = DomainArmy.OwnedUnitTypeDataList;
DeployedKnightDataList = DomainArmy.DeployedKnightDataList;
DeployedUnitTypeDataList = DomainArmy.DeployedUnitTypeDataList;
StartStrategy = DomainArmy.StartStrategy;
StrategyDataList = DomainArmy.StrategyDataList;
UnitDivisionDataList = DomainArmy.UnitDivisionDataList;
UnitDivisionPositionDataList = DomainArmy.UnitDivisionPositionDataList;
UnitDivisionRoleDataList = DomainArmy.UnitDivisionRoleDataList;
ArmyStrategyList = DomainArmy.ArmyStrategyList;
StartArmyStrategy = DomainArmy.StartArmyStrategy;
IsLordDeployed = DomainArmy.IsLordDeployed;
AllArmyUnitDivisionList = DomainArmy.AllArmyUnitDivisionList;
if (StartStrategy != null)
{
CurrentStrategy = StartStrategy;
CurrentArmyStrategy = StartArmyStrategy;
}
}
// 데이터가 잘 들어갔는지 확인
public void LogStrategySettingSystemData()
{
//StringBuilder sb = new StringBuilder();
//sb.Append("로드: ");
//sb.Append(domainArmyLord.LordData.Name);
//sb.Append("\n");
//sb.Append("전략 시스템's \n전략 목록: ");
//for (int i = 0; i < strategyList.Count; i++)
//{
// sb.Append(strategyList[i].StrategyData.Name);
// sb.Append(", ");
//}
//sb.Append("\n");
//sb.Append("부대 임무 목록: ");
//for (int i = 0; i < unitDivisionRoleDataList.Count; i++)
//{
// sb.Append(unitDivisionRoleDataList[i].Name);
// sb.Append(", ");
//}
//sb.Append("\n");
//sb.Append("기사 목록: ");
//for (int i = 0; i < knightList.Count; i++)
//{
// sb.Append(knightList[i].KnightData.NameKr);
// sb.Append(", ");
//}
//sb.Append("\n");
//sb.Append("병종 목록: ");
//for (int i = 0; i < unitTypeList.Count; i++)
//{
// sb.Append(unitTypeList[i].UnitTypeData.NameKr);
// sb.Append(", ");
//}
//sb.Append("\n");
//Debug.Log(sb);
}
// UI의 반응과 연계하여 전략 설정 및 저장
public void SetUIStrategySettingData()
{
ui_StrategySetting.SetOwnedKnightData(OwnedKnightDataList);
ui_StrategySetting.SetDeployedKnightData(DeployedKnightDataList);
ui_StrategySetting.SetDeployedUnitTypeData(DeployedUnitTypeDataList);
}
}
using UnityEngine;
public class ArmyCommander : MonoBehaviour
{
// 영주 출전 여부
public bool IsLordDeployed { get; private set; }
public Lord LordData { get; private set; }
public UserKnight KnightData { get; private set; }
public void SetArmyCommander(Lord lordData)
{
IsLordDeployed = true;
LordData = lordData;
}
public void SetArmyCommander(UserKnight knightData)
{
IsLordDeployed = false;
KnightData = knightData;
}
public Lord GetArmyLordCommander()
{
return LordData;
}
public UserKnight GetArmyKnightCommaner()
{
return KnightData;
}
}
using System;
using System.Collections.Generic;
using UnityEngine;
// 전략
public class ArmyStrategy : MonoBehaviour
{
// 영주 출전 여부
public bool IsLordDeployed { get; private set; }
// 전략 정보
public Strategy StrategyData { get; private set; }
// 부대 리스트
public List<ArmyUnitDivision> StrategyUnitDivisionList { get; private set; } = new List<ArmyUnitDivision>();
public List<UserKnight> WholeKnightDataList { get; private set; }
public List<UserUnitType> WholeUnitTypeDataList { get; private set; }
private ArmyUnitDivision armyUnitDivisionPrefab;
private void Awake()
{
armyUnitDivisionPrefab = Resources.Load<ArmyUnitDivision>("Prefabs/ArmyUnitDivisionControll/ArmyUnitDivision");
}
private void Start()
{
WholeKnightDataList = StrategyManager.Instance.strategySettingSystem.WholeKnightDataList;
WholeUnitTypeDataList = StrategyManager.Instance.strategySettingSystem.WholeUnitTypeDataList;
}
public void SetStrategyData(Strategy inputStrategyData, List<UnitDivision> unitDivisionList)
{
if (armyUnitDivisionPrefab == null)
{
Debug.LogError("SetStrategyData: ArmyUnitDivision prefab is not loaded!");
return;
}
if (inputStrategyData == null)
{
Debug.LogError("SetStrategyData: inputStrategyData is null!");
return;
}
if (unitDivisionList == null)
{
Debug.LogError("SetStrategyData: unitDivisionList is null!");
return;
}
StrategyData = inputStrategyData;
for (int i = 0; i < unitDivisionList.Count; i++)
{
if (unitDivisionList[i].StrategyID == StrategyData.ID)
{
// 부대 생성 및 초기화
ArmyUnitDivision armyUnitDivision = Instantiate(armyUnitDivisionPrefab);
if (armyUnitDivision == null)
{
Debug.LogError("SetStrategyData: Failed to instantiate ArmyUnitDivision prefab!");
continue;
}
// 부대 이끄는 자가 로드인지
if (unitDivisionList[i].KnightID[0] == 'l')
{
Lord lord = StrategyManager.Instance.strategySettingSystem.LordData;
armyUnitDivision.SetUnitDivisionData(unitDivisionList[i], lord);
}
else
{
UserKnight knight = FindKnight(unitDivisionList[i].KnightID);
if (knight == null)
{
Debug.LogWarning($"SetStrategyData: Knight with ID {unitDivisionList[i].KnightID} not found.");
}
armyUnitDivision.SetUnitDivisionData(unitDivisionList[i], knight);
}
StrategyUnitDivisionList.Add(armyUnitDivision);
}
}
}
public UserKnight FindKnight(string userKnightID)
{
if (WholeKnightDataList == null)
{
Debug.Log("FindKnight: WholeKnightDataList is null!");
WholeKnightDataList = StrategyManager.Instance.strategySettingSystem.DomainArmy.WholeKnightDataList;
}
for (int i = 0; i < WholeKnightDataList.Count; i++)
{
if (WholeKnightDataList[i].ID == userKnightID)
{
return WholeKnightDataList[i];
}
}
Debug.LogWarning($"FindKnight: Knight with ID {userKnightID} not found in WholeKnightDataList.");
return null;
}
}
using DG.Tweening;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.UIElements;
// 부대
public class ArmyUnitDivision : MonoBehaviour
{
// 부대 정보
public UnitDivision UnitDivisionData { get; private set; }
public UnitDivisionPosition UnitDivisionPositionData { get; private set; }
public UnitDivisionRole UnitDivisionRoleData { get; private set; }
Vector3 position;
Vector3 rotaion;
public bool IsKnightLord { get; private set; } = false;
public Lord LordData { get; private set; }
public UserKnight KnightData { get; private set; }
public ArmyKnight ArmyKnight { get; private set; }
public UserUnitType UnitTypeData { get; private set; }
public List<ArmySoldier> ArmySoldierList { get; private set; }
ArmySoldier soldierPrefab;
private void Awake()
{
}
// Set ArmyUnitDivision - 기사일 때
public void SetUnitDivisionData(UnitDivision inputUnitDivisionData, UserKnight knightData)
{
if (inputUnitDivisionData == null)
{
Debug.LogError("SetUnitDivisionData: inputUnitDivisionData is null!");
return;
}
if (knightData == null)
{
Debug.LogError($"SetUnitDivisionData: Knight with ID {inputUnitDivisionData.KnightID} is null!");
}
UnitDivisionData = inputUnitDivisionData;
// 기사인 부분
KnightData = knightData;
IsKnightLord = false;
List<UnitDivisionPosition> unitDivisionPositionList = LocatorManager.Instance.dataManager.unitDivisionPositionInfo.Data.UnitDivisionPosition;
for (int i = 0; i < unitDivisionPositionList.Count; i++)
{
if (unitDivisionPositionList[i].UnitDivisionID == UnitDivisionData.ID)
{
UnitDivisionPositionData = unitDivisionPositionList[i];
break;
}
}
if (UnitDivisionPositionData == null)
{
Debug.LogError($"SetUnitDivisionData: Position data for UnitDivisionID {UnitDivisionData.ID} is missing!");
}
List<UnitDivisionRole> unitDivisionRoleList = LocatorManager.Instance.dataManager.unitDivisionRoleInfo.Data.UnitDivisionRole;
for (int i = 0; i < unitDivisionRoleList.Count; i++)
{
if (unitDivisionRoleList[i].UnitDivisionID == UnitDivisionData.ID)
{
UnitDivisionRoleData = unitDivisionRoleList[i];
break;
}
}
if (UnitDivisionRoleData == null)
{
Debug.LogError($"SetUnitDivisionData: Role data for UnitDivisionID {UnitDivisionData.ID} is missing!");
}
// Position & Rotation 설정
if (UnitDivisionPositionData != null)
{
position = new Vector3(UnitDivisionPositionData.PositionX, UnitDivisionPositionData.RotationZ, UnitDivisionPositionData.PositionY);
rotaion = new Vector3(UnitDivisionPositionData.RotationX, UnitDivisionPositionData.RotationZ, UnitDivisionPositionData.RotationY);
}
soldierPrefab = Resources.Load<ArmySoldier>("Prefabs/TestUnits/ArmySoldier");
if (soldierPrefab == null)
{
Debug.LogError("Soldier prefab not found in Resources!");
}
// 월드 좌표 설정
SetUnitDivisionToWorld();
}
// Set ArmyUnitDivision - 로드일 때
public void SetUnitDivisionData(UnitDivision inputUnitDivisionData, Lord lordData)
{
if (inputUnitDivisionData == null)
{
Debug.LogError("SetUnitDivisionData: inputUnitDivisionData is null!");
return;
}
if (lordData == null)
{
Debug.LogError($"SetUnitDivisionData: Knight with ID {inputUnitDivisionData.KnightID} is null!");
}
UnitDivisionData = inputUnitDivisionData;
// 영주인 부분
LordData = lordData;
IsKnightLord = true;
List<UnitDivisionPosition> unitDivisionPositionList = LocatorManager.Instance.dataManager.unitDivisionPositionInfo.Data.UnitDivisionPosition;
for (int i = 0; i < unitDivisionPositionList.Count; i++)
{
if (unitDivisionPositionList[i].UnitDivisionID == UnitDivisionData.ID)
{
UnitDivisionPositionData = unitDivisionPositionList[i];
break;
}
}
if (UnitDivisionPositionData == null)
{
Debug.LogError($"SetUnitDivisionData: Position data for UnitDivisionID {UnitDivisionData.ID} is missing!");
}
List<UnitDivisionRole> unitDivisionRoleList = LocatorManager.Instance.dataManager.unitDivisionRoleInfo.Data.UnitDivisionRole;
for (int i = 0; i < unitDivisionRoleList.Count; i++)
{
if (unitDivisionRoleList[i].UnitDivisionID == UnitDivisionData.ID)
{
UnitDivisionRoleData = unitDivisionRoleList[i];
break;
}
}
if (UnitDivisionRoleData == null)
{
Debug.LogError($"SetUnitDivisionData: Role data for UnitDivisionID {UnitDivisionData.ID} is missing!");
}
// Position & Rotation 설정
if (UnitDivisionPositionData != null)
{
position = new Vector3(UnitDivisionPositionData.PositionX, UnitDivisionPositionData.RotationZ, UnitDivisionPositionData.PositionY);
rotaion = new Vector3(UnitDivisionPositionData.RotationX, UnitDivisionPositionData.RotationZ, UnitDivisionPositionData.RotationY);
}
soldierPrefab = Resources.Load<ArmySoldier>("Prefabs/TestUnits/ArmySoldier");
if (soldierPrefab == null)
{
Debug.LogError("Soldier prefab not found in Resources!");
}
// 월드 좌표 설정
SetUnitDivisionToWorld();
}
public void SetUnitDivisionToWorld()
{
transform.position = position;
transform.rotation = Quaternion.Euler(rotaion);
//armyKnight = Instantiate(armyKnight);
//boxCubeFieldGenerator.GenerateField(soldierPrefab, 10, 10);
}
public void SetArmyKnight(ArmyKnight inputArmyKnight)
{
ArmyKnight = inputArmyKnight;
}
public void SetArmyLord(Lord inputLordData)
{
LordData = inputLordData;
}
public void LoadSoldierPrefab<T>()
{
//T prefab = Resources.Load<T>($"Prefabs/TestUnits/{typeof(T)}");
}
// 유닛 배치 변경
public void MoveUnitDivisionPosition()
{
}
}
public class StrategyManager : MonoSingleton<StrategyManager>
{
public StrategySettingSystem strategySettingSystem;
public ArmyPrefabsSO armyPrefabs;
}
using UnityEngine;
[CreateAssetMenu(fileName = "Army Prefabs", menuName = "Army Prefabs")]
public class ArmyPrefabsSO : ScriptableObject
{
public ArmyLord armyCommander;
public ArmyKnight armyKnight;
public ArmySoldier armySoldier;
}
대단합니다!!