This commit is contained in:
huyulong 2025-01-03 09:56:39 +08:00
commit a63fa4959a
6 changed files with 1135 additions and 34 deletions

File diff suppressed because it is too large Load Diff

View File

@ -6,6 +6,7 @@ using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using Unity.VisualScripting;
using UnityEditor.SearchService;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
@ -38,6 +39,8 @@ public class Panel : Base
public Text arrangeText;//整体安排
[Header("确认信息按钮")]
public Button sureBtn;//确认信息按钮
[Header("最少人员要求警告")]
public Button requirementsBtn;
[Header("场景的ToggleGroup")]
public ToggleGroup scenetoggleGroup;//场景的ToggleGroup
[Header("筛选输入框")]
@ -75,6 +78,9 @@ public class Panel : Base
public Transform sceneCount;//存放场景预制体的地方
[Header("人员管理面板")]
public GameObject ManagerPanelPrefab; // 预制体,包含人员管理面板
[Header("最低配置面板")]
public GameObject requirementsPrefab; // 预制体,最低配置面板
[Header("数据")]
@ -95,6 +101,7 @@ public class Panel : Base
public SelectScenePanel selectScenePanel;
public DatePanel datePanel;
public WarningPopPanel warningPopPanel;
public RequirementPanel requirementPanel;
private bool isPersonSelected = false; // 标志是否选择了人员
private bool isDutySelected = false; // 标志是否选择了职责
@ -106,6 +113,7 @@ public class Panel : Base
sureBtn.interactable = false;
ChangeImage(sureBtn.interactable);
selectedInfo = new SelectedInfo();
requirementsBtn.onClick.AddListener(() => OnclickRequirementsBtn());
InstantiateToggle();
}
@ -121,27 +129,27 @@ public class Panel : Base
//动态加载人员
public async void DynamicLoadingPeople()
{
for (int i = 0; i < 10; i++)
{
GameObject item = GameObject.Instantiate<GameObject>(peoplePrefab, peopleCountent);
PeopleItem peopleItem = item.GetComponent<PeopleItem>();
peopleItem.nameText.text = "角色1";
peopleItem.peopleId = "0";
Button peoplebutton = item.transform.Find("TextBtn").GetComponent<Button>();
peoplebutton.onClick.AddListener(() => OnPeopleItemClicked(item, Color.yellow, selectedPerson));
peopleList.Add(item);// 将每个实例化的角色添加到列表中
}
//PlayerListResponse playerListResponse = await userInfo.GetPlayerList();
//foreach (PlayerListData player in playerListResponse.data)
//for (int i = 0; i < 10; i++)
//{
// GameObject item = GameObject.Instantiate<GameObject>(peoplePrefab, peopleCountent);
// PeopleItem peopleItem = item.GetComponent<PeopleItem>();
// peopleItem.nameText.text = player.NickName;
// peopleItem.peopleId = player.UserId;
// peopleItem.nameText.text = "角色1";
// peopleItem.peopleId = "0";
// Button peoplebutton = item.transform.Find("TextBtn").GetComponent<Button>();
// peoplebutton.onClick.AddListener(() => OnPeopleItemClicked(item, Color.yellow, selectedPerson));
// peopleList.Add(item);// 将每个实例化的角色添加到列表中
//}
PlayerListResponse playerListResponse = await userInfo.GetPlayerList();
foreach (PlayerListData player in playerListResponse.data)
{
GameObject item = GameObject.Instantiate<GameObject>(peoplePrefab, peopleCountent);
PeopleItem peopleItem = item.GetComponent<PeopleItem>();
peopleItem.nameText.text = player.NickName;
peopleItem.peopleId = player.UserId;
Button peoplebutton = item.transform.Find("TextBtn").GetComponent<Button>();
peoplebutton.onClick.AddListener(() => OnPeopleItemClicked(item, Color.yellow, selectedPerson));
peopleList.Add(item);// 将每个实例化的角色添加到列表中
}
}
//动态加载职责
@ -477,21 +485,13 @@ public class Panel : Base
// 将当前选中的人员信息添加到对应场景的人员列表中
currentSceneInfo.Add(newSelectedInfo);
// 禁用确认按钮并清空选择标志
sureBtn.interactable = false;
ChangeImage(sureBtn.interactable);
WhetherToMeet();
isPersonSelected = false;
isDutySelected = false;
isSceneSelected = false;
// 上传数据
//UploadData(selectedInfo.peopleId, selectedInfo.dutyId.ToString(), selectedInfo.sceneId.ToString());
// 更新已添加人员的显示颜色
//UpdatePeopleListVisual();
Debug.Log($"Added new person: {newSelectedInfo.name} to scene: {sceneName}");
}
else
{
@ -807,7 +807,108 @@ public class Panel : Base
//判断是否满足最低配置要求
public void WhetherToMeet()
{
bool allRequirementsMet = true; // 标记是否所有需求都满足
// 遍历所有的场景数据
foreach (var item in jsonReader1.locationDictionary)
{
string[] limit = item.Value.RoleLimit.Split('|'); // 拆分角色限制
foreach (var entry in limit)
{
string[] limitDetails = entry.Split(',');
if (limitDetails.Length == 4)
{
string sceneLimitId = limitDetails[0]; // 事故位置ID
string difficultyLimitId = limitDetails[1]; // 处置难度ID
string dutyId = limitDetails[2]; // 职业ID
string dutyNum = limitDetails[3]; // 最低要求人数
if (dutyNum == "-1")
{
continue;
}
if (sceneLimitId == selectScenePanel.idcidentId.ToString() && difficultyLimitId == selectScenePanel.difficultyId.ToString())
{
List<SelectedInfo> sceneData = null;
if (sceneDataDictionary.TryGetValue(item.Key.ToString(), out sceneData)) // 获取该场景的职业信息
{
var dutyCount = new Dictionary<string, int>();
foreach (var npc in sceneData)
{
if (dutyCount.ContainsKey(npc.dutyId))
{
dutyCount[npc.dutyId]++;
}
else
{
dutyCount[npc.dutyId] = 1;
}
}
int requiredDutyNum = int.Parse(dutyNum);
if (!dutyCount.ContainsKey(dutyId))
{
// 该职业不在场景数据中,直接打印出缺少的职业
int missingNum = requiredDutyNum;
Debug.Log($"缺少职业 {dutyId},需求人数: {missingNum}");
allRequirementsMet = false; // 标记为需求未满足
}
else
{
// 该职业在场景数据中,判断是否缺少人数
int currentDutyCount = dutyCount[dutyId];
if (currentDutyCount < requiredDutyNum)
{
int missingNum = requiredDutyNum - currentDutyCount;
Debug.Log($"缺少职业 {dutyId},缺少人数: {missingNum}");
allRequirementsMet = false; // 标记为需求未满足
}
}
}
else
{
// 如果没有找到该场景的职业数据,列出所缺职业
Debug.Log($"场景 {item.Key} 的职业数据未找到,列出缺少的职业和人数:");
// 根据 RoleLimit 列出缺少的职业及其要求人数
foreach (var entryInLimit in limit)
{
string[] limitDetailsInner = entryInLimit.Split(',');
if (limitDetailsInner.Length == 4)
{
string innerDutyId = limitDetailsInner[2]; // 职业ID
string innerDutyNum = limitDetailsInner[3]; // 最低要求人数
// 如果要求人数不为 -1输出缺少的职业及数量
if (innerDutyNum != "-1")
{
int requiredDutyNum = int.Parse(innerDutyNum);
Debug.Log($"缺少职业 {innerDutyId},需求人数: {requiredDutyNum}");
allRequirementsMet = false; // 标记为需求未满足
}
}
}
}
}
}
}
}
// 根据是否满足所有需求来显示或隐藏按钮
if (!allRequirementsMet)
{
requirementsBtn.transform.gameObject.SetActive(true); // 显示按钮
}
else
{
requirementsBtn.transform.gameObject.SetActive(false); // 隐藏按钮
}
}
//打开最低要求面板
public void OnclickRequirementsBtn()
{
requirementsPrefab.gameObject.SetActive(true);
requirementPanel.LoadingSceneLable();
}
}

View File

@ -63,7 +63,6 @@ public class DatePanel : MonoBehaviour
createTemplateInfo.Instance.auth_CreateTemplate.isTemplate = "1";
}
panel.UploadData();
Debug.LogError("+++++++++");
createTemplateInterface.createTemplate(dataText.text);
SceneManager.LoadScene("yhj");
}

View File

@ -124,7 +124,6 @@ public class DistributionPanel : MonoBehaviour
}
}
}
// 输出缺少的职业ID并返回
if (missingDutyIds.Count > 0)
{

View File

@ -697,10 +697,9 @@ public class SelectScenePanel : Base
{
if(!transform.gameObject.activeInHierarchy)
{
Debug.LogError("++++++++++++++++++++++++++++++");
}
transform.gameObject.SetActive(false);
panel.gameObject.SetActive(true);
Debug.Log("111111111111111111111111111111");
}
}

View File

@ -96,7 +96,6 @@ public class JueseChoicePop : MonoBehaviour
string test = a;
button.onClick.AddListener(() =>
{
Debug.LogError("zzzzzzzzzzzzzzzzzzzzzzzzzz" + test);
SetClassMate(classMate, test);
});
classMate.name = info.name;