应急人员配置数据串联

This commit is contained in:
lq 2024-12-09 23:53:38 +08:00
parent 441a9a200c
commit 5db2740f34
8 changed files with 314 additions and 174 deletions

View File

@ -143,6 +143,8 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
schoolId: 0 schoolId: 0
schoolName: {fileID: 8240735975125479954} schoolName: {fileID: 8240735975125479954}
maskImage: {fileID: 0}
isOpen: 0
--- !u!1 &8240735974858230823 --- !u!1 &8240735974858230823
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -312,7 +314,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &8240735975124526756 --- !u!224 &8240735975124526756
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -1,8 +1,8 @@
[ [
{ {
"ID": 2001, "ID": "2001",
"Note": "厨房起火", "Note": "厨房起火",
"Name": 2001, "Name": "2001",
"Scene": "9003", "Scene": "9003",
"Position": "36,1,2", "Position": "36,1,2",
"Volume": "-1", "Volume": "-1",
@ -12,9 +12,9 @@
"GeneralRole": "8000,8001,8002,8003,8004,8005,8006,8008,8009,8010" "GeneralRole": "8000,8001,8002,8003,8004,8005,8006,8008,8009,8010"
}, },
{ {
"ID": 2002, "ID": "2002",
"Note": "学生宿舍起火", "Note": "学生宿舍起火",
"Name": 2002, "Name": "2002",
"Scene": "9002", "Scene": "9002",
"Position": "0,0,0", "Position": "0,0,0",
"Volume": "-1", "Volume": "-1",
@ -22,5 +22,29 @@
"SpecialEvent": "-1,-1,-1,-1|1,50,10,20|1,50,20,20", "SpecialEvent": "-1,-1,-1,-1|1,50,10,20|1,50,20,20",
"Role": "8000,8001,8002,8003,8004,8005,8007,8011|8000,8001,8002,8003,8004,8005,8007,8011|8000,8001,8002,8003,8004,8005,8007,8011", "Role": "8000,8001,8002,8003,8004,8005,8007,8011|8000,8001,8002,8003,8004,8005,8007,8011|8000,8001,8002,8003,8004,8005,8007,8011",
"GeneralRole": "8000,8001,8002,8003,8004,8005,8007,8010,8011" "GeneralRole": "8000,8001,8002,8003,8004,8005,8007,8010,8011"
},
{
"ID": "2003",
"Note": "test1",
"Name": "2003",
"Scene": "9003",
"Position": "1,1,1",
"Volume": "-1",
"Difficulty": "2|3",
"SpecialEvent": "-1,-1,-1,-1|1,50,10,20",
"Role": "8001,8002,8003,8004,8005|8001,8002,8003,8004,8005",
"GeneralRole": "8010"
},
{
"ID": "2004",
"Note": "test2",
"Name": "2004",
"Scene": "9003",
"Position": "2,2,2",
"Volume": "-1",
"Difficulty": "1|5|6",
"SpecialEvent": "-1,-1,-1,-1|1,50,10,20|1,50,20,20",
"Role": "8000,8001,8002,8003,8004,8005,8006,8008,8009|8000,8001,8002,8003,8004,8005,8006,8008,8009|8000,8001,8002,8003,8004,8005,8006,8008,8009,8010",
"GeneralRole": "8010"
} }
] ]

View File

@ -4,13 +4,13 @@
"Note": "火灾", "Note": "火灾",
"Name": "5001", "Name": "5001",
"Role": "8000|8001|8002|8003|8004|8005|8006|8008|8009|8010", "Role": "8000|8001|8002|8003|8004|8005|8006|8008|8009|8010",
"DisasterLocation": "2001" "DisasterLocation": "2001|2002|2003"
}, },
{ {
"ID": "5002", "ID": "5002",
"Note": "塌方", "Note": "塌方",
"Name": "5002", "Name": "5002",
"Role": "8000|8001|8002|8003|8004|8005|8006|8008|8009|8010", "Role": "8000|8001|8002|8003|8004|8005|8006|8008|8009|8010",
"DisasterLocation": "2004|2002" "DisasterLocation": "2004"
} }
] ]

View File

@ -2133,7 +2133,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 1 m_IsActive: 0
--- !u!224 &618256459 --- !u!224 &618256459
RectTransform: RectTransform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -8210,6 +8210,7 @@ MonoBehaviour:
incidentSiteJosnFile: {fileID: 4900000, guid: 1efa4372b10d4294199638c49173ff4c, type: 3} incidentSiteJosnFile: {fileID: 4900000, guid: 1efa4372b10d4294199638c49173ff4c, type: 3}
NPCJosnFile: {fileID: 4900000, guid: 41009f009f0718647a782c7e1aec97dd, type: 3} NPCJosnFile: {fileID: 4900000, guid: 41009f009f0718647a782c7e1aec97dd, type: 3}
LanguageJsonFile: {fileID: 4900000, guid: 62a41129c4663ee41a06274114d28feb, type: 3} LanguageJsonFile: {fileID: 4900000, guid: 62a41129c4663ee41a06274114d28feb, type: 3}
SelectJsonFile: {fileID: 4900000, guid: 3efd15f4195557144a45659d2baa1ba3, type: 3}
--- !u!4 &1417128758 --- !u!4 &1417128758
Transform: Transform:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -14630,9 +14631,9 @@ RectTransform:
m_Father: {fileID: 7468736063934366934} m_Father: {fileID: 7468736063934366934}
m_RootOrder: 1 m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 334.1322, y: -55} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 187, y: 110} m_SizeDelta: {x: 187, y: 110}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064122132329 --- !u!1 &7468736064122132329
@ -14913,9 +14914,9 @@ RectTransform:
m_Father: {fileID: 7468736063934366934} m_Father: {fileID: 7468736063934366934}
m_RootOrder: 3 m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 753.3966, y: -55} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 187, y: 110} m_SizeDelta: {x: 187, y: 110}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064198941274 --- !u!1 &7468736064198941274
@ -15673,7 +15674,7 @@ RectTransform:
m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 3.3229} m_AnchoredPosition: {x: 0, y: 3.3229}
m_SizeDelta: {x: 1834, y: 1070} m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064579811972 --- !u!1 &7468736064579811972
GameObject: GameObject:
@ -15695,7 +15696,7 @@ GameObject:
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0
m_StaticEditorFlags: 0 m_StaticEditorFlags: 0
m_IsActive: 0 m_IsActive: 1
--- !u!114 &7468736064579811982 --- !u!114 &7468736064579811982
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -16153,9 +16154,9 @@ RectTransform:
m_Father: {fileID: 7468736063934366934} m_Father: {fileID: 7468736063934366934}
m_RootOrder: 2 m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 543.7644, y: -55} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 187, y: 110} m_SizeDelta: {x: 187, y: 110}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064659112359 --- !u!1 &7468736064659112359
@ -16359,9 +16360,9 @@ RectTransform:
m_Father: {fileID: 7468736064579811971} m_Father: {fileID: 7468736064579811971}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 917, y: -53.335} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 1834, y: 106.67} m_SizeDelta: {x: 1834, y: 106.67}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064728012045 --- !u!1 &7468736064728012045
@ -16521,9 +16522,9 @@ RectTransform:
m_Father: {fileID: 7468736063934366934} m_Father: {fileID: 7468736063934366934}
m_RootOrder: 0 m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 124.5, y: -55} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 187, y: 110} m_SizeDelta: {x: 187, y: 110}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064820222392 --- !u!1 &7468736064820222392
@ -16934,9 +16935,9 @@ RectTransform:
m_Father: {fileID: 7468736064579811971} m_Father: {fileID: 7468736064579811971}
m_RootOrder: 4 m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1} m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 0}
m_AnchoredPosition: {x: 917, y: -588.33496} m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 1834, y: 498.685} m_SizeDelta: {x: 1834, y: 498.685}
m_Pivot: {x: 0.5, y: 0.5} m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &7468736064937661071 --- !u!1 &7468736064937661071

View File

@ -42,9 +42,9 @@ public class JSONReader : MonoBehaviour
GetLanguageByID(20008); GetLanguageByID(20008);
foreach (var npc in sceneDictionary) foreach (var npc in npcDictionary)
{ {
// Debug.Log(npc.Value.ID); //Debug.Log(npc.Value.ID);
//Debug.Log(npc.Value.Name); //Debug.Log(npc.Value.Name);
} }
GetNpcDataByID(8001); GetNpcDataByID(8001);
@ -271,6 +271,16 @@ public class JSONReader : MonoBehaviour
else return null; else return null;
} }
public NPCData GetRoleDateById(int id)
{
NPCData info = null;
if (npcDictionary.TryGetValue(id, out info))
{
return info;
}
else return null;
}
//设置UI文本的方法 //设置UI文本的方法
public void SetUIText(Text text, int id) public void SetUIText(Text text, int id)
{ {
@ -356,7 +366,7 @@ public class MatialData
public class SceneData public class SceneData
{ {
public int ID; public int ID;
public int Name; public string Name;
public int Type; public int Type;
public string IncidentType; public string IncidentType;
public string ObjList; public string ObjList;
@ -374,6 +384,8 @@ public class IncidentSite
public int Volume; public int Volume;
public string Difficulty; public string Difficulty;
public string SpecialEvent; public string SpecialEvent;
public string Role;
public string GeneralRole;
} }
[System.Serializable] [System.Serializable]

View File

@ -4,6 +4,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Threading;
using Unity.VisualScripting; using Unity.VisualScripting;
using UnityEngine; using UnityEngine;
using UnityEngine.Events; using UnityEngine.Events;
@ -91,13 +92,8 @@ public class Panel : MonoBehaviour
{ {
selectedInfo = new SelectedInfo(); selectedInfo = new SelectedInfo();
DynamicLoadingPeople(); DynamicLoadingPeople();
DynamicLoadingDuty();
DynamicLoadingScene(); DynamicLoadingScene();
for (int i = 1; i < panelToggle.Length; i++) InstantiateToggle();
{
panelToggle[i].interactable = false;
panelToggle[i].gameObject.transform.GetComponent<Image>().sprite = toggleImage[0];
}
} }
// Update is called once per frame // Update is called once per frame
@ -124,36 +120,48 @@ public class Panel : MonoBehaviour
} }
//动态加载职责 //动态加载职责
public void DynamicLoadingDuty() public void DynamicLoadingDuty(int id)
{ {
foreach (var npcData in jsonReader1.npcDictionary) if (selectScenePanel.difficultyToRoles.ContainsKey(id))
{ {
string[] nameSections = npcData.Value.Name.Split('|'); List<string> rolesForSelectedDifficulty = selectScenePanel.difficultyToRoles[id];
foreach (var section in nameSections)
{
string[] sectionParts = section.Split(',');
//判断事件然后确定有哪些职责 // 遍历角色并做相关处理
if (int.Parse(sectionParts[0]) == 2001) foreach (var role in rolesForSelectedDifficulty)
{ {
int key = int.Parse(sectionParts[1]); int roleId = int.Parse(role);
if (jsonReader1.npcDictionary.ContainsKey(key)) NPCData npcData = jsonReader1.GetRoleDateById(roleId);
if (jsonReader1.npcDictionary.ContainsKey(roleId))
{ {
var npcInfo = jsonReader1.npcDictionary[key]; var npcInfo = jsonReader1.npcDictionary[roleId];
// 创建DutyItem实例 // 创建DutyItem实例
GameObject item = GameObject.Instantiate(dutyPrefab, dutyCount); GameObject item = GameObject.Instantiate(dutyPrefab, dutyCount);
DutyItem dutyItem = item.GetComponent<DutyItem>(); DutyItem dutyItem = item.GetComponent<DutyItem>();
Button dutuybutton = item.transform.Find("TextBtn").GetComponent<Button>(); Button dutuybutton = item.transform.Find("TextBtn").GetComponent<Button>();
dutuybutton.onClick.AddListener(() => OnDutyItemClicked(item, Color.red, selectedDuty)); dutuybutton.onClick.AddListener(() =>
dutyItem.dutyNameText.text = npcData.Value.Note; {
dutyItem.leader = npcData.Value.GroupLeader; OnDutyItemClicked(item, Color.red, selectedDuty);
dutyItem.dutyId = npcData.Value.ID; if(dutyItem.dutyNameText.text=="主持人")
{
peopleList.Clear();
foreach (Transform child in sceneCount)
{
Destroy(child.gameObject);
}
Debug.Log("无需指定位置");
}
else
{
SetScene(dutyItem.dutyId);
}
});
dutyItem.dutyNameText.text = npcData.Note;
dutyItem.leader = npcData.GroupLeader;
dutyItem.dutyId = npcData.ID;
peopleList.Add(item); peopleList.Add(item);
} }
} }
} }
}
} }
//动态加载场景 //动态加载场景
@ -163,7 +171,7 @@ public class Panel : MonoBehaviour
{ {
// 解析角色限制字段 // 解析角色限制字段
string roleLimit = npcData.Value.RoleLimit; string roleLimit = npcData.Value.RoleLimit;
int sceneLimit = npcData.Value.Scene;
if (!string.IsNullOrEmpty(roleLimit)) if (!string.IsNullOrEmpty(roleLimit))
{ {
// 先按“|”分隔 // 先按“|”分隔
@ -183,12 +191,13 @@ public class Panel : MonoBehaviour
} }
} }
else else
{
if(selectScenePanel.scnenId== sceneLimit)
{ {
GameObject item = GameObject.Instantiate<GameObject>(scenePrefab, sceneCount); GameObject item = GameObject.Instantiate<GameObject>(scenePrefab, sceneCount);
SceneItem sceneItem = item.GetComponent<SceneItem>(); SceneItem sceneItem = item.GetComponent<SceneItem>();
Button scenebutton = item.transform.Find("TextBtn").GetComponent<Button>(); Button scenebutton = item.transform.Find("TextBtn").GetComponent<Button>();
scenebutton.onClick.AddListener(() => OnSceneItemClicked(item, Color.green, selectedScene)); scenebutton.onClick.AddListener(() => OnSceneItemClicked(item, Color.green, selectedScene));
// 设置limitNum // 设置limitNum
sceneItem.dutyId = int.Parse(roleLimits[1]); sceneItem.dutyId = int.Parse(roleLimits[1]);
sceneItem.limitNum = int.Parse(roleLimits[2]); sceneItem.limitNum = int.Parse(roleLimits[2]);
@ -197,6 +206,7 @@ public class Panel : MonoBehaviour
peopleList.Add(item); peopleList.Add(item);
} }
} }
}
// 如果不满足实例化条件跳过当前NPC的实例化 // 如果不满足实例化条件跳过当前NPC的实例化
if (!shouldInstantiate) if (!shouldInstantiate)
{ {
@ -226,6 +236,57 @@ public class Panel : MonoBehaviour
ManagerPanel.gameObject.SetActive(true); ManagerPanel.gameObject.SetActive(true);
} }
} }
//根据选择的职责加载出对应场景
public void SetScene(int id)
{
peopleList.Clear();
foreach(Transform child in sceneCount)
{
Destroy(child.gameObject);
}
// 遍历所有的 NPC 数据
foreach (var npcData in jsonReader1.locationDictionary)
{
// 判断是否属于当前选择的场景
if (npcData.Value.Scene == selectScenePanel.scnenId)
{
// 按“|”分隔不同的角色限制部分
string[] roleLimitSections = npcData.Value.RoleLimit.Split('|');
bool shouldInstantiate = true;
// 遍历每个角色限制部分
foreach (var section in roleLimitSections)
{
// 按“,”分隔出事故位置ID、职业ID和最低要求人数
string[] roleLimits = section.Split(',');
if (section.Contains("-1"))
{
if (roleLimits[0] == "-1")
{
shouldInstantiate = false; // 不实例化该NPC
break; // 跳出循环直接处理下一个NPC
}
}
else
{
int accidentLocationId = int.Parse(roleLimits[0]); // 事故位置ID
int roleId = int.Parse(roleLimits[1]); // 职业ID
int minRequired = int.Parse(roleLimits[2]); // 最低要求人数
if (accidentLocationId == selectScenePanel.idcidentId && roleId == id)
{
GameObject item = GameObject.Instantiate<GameObject>(scenePrefab, sceneCount);
SceneItem sceneItem = item.GetComponent<SceneItem>();
Button scenebutton = item.transform.Find("TextBtn").GetComponent<Button>();
scenebutton.onClick.AddListener(() => OnSceneItemClicked(item, Color.green, selectedScene));
sceneItem.dutyId = accidentLocationId;
sceneItem.limitNum = minRequired;
sceneItem.sceneName.text = npcData.Value.Note;
peopleList.Add(item);
}
}
}
}
}
}
//处理点击确认按钮 //处理点击确认按钮
public void ClickSureBtn() public void ClickSureBtn()
{ {
@ -374,7 +435,17 @@ public class Panel : MonoBehaviour
panelToggle[4].interactable = selectScenePanel.isSure; // 启用第三个Toggle panelToggle[4].interactable = selectScenePanel.isSure; // 启用第三个Toggle
} }
} }
//设置最初的时候Toggle的状态
public void InstantiateToggle()
{
for (int i = 1; i < panelToggle.Length; i++)
{
panelToggle[i].interactable = false;
panelToggle[i].gameObject.transform.GetComponent<Image>().sprite = toggleImage[0];
}
}
//判断确认按钮是否可以点击
private void UpdateConfirmButtonState() private void UpdateConfirmButtonState()
{ {
// 如果人员、职责和场景都已选择,则启用确认按钮,否则禁用 // 如果人员、职责和场景都已选择,则启用确认按钮,否则禁用

View File

@ -5,6 +5,7 @@ using System.Xml.Serialization;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using static System.Collections.Specialized.BitVector32; using static System.Collections.Specialized.BitVector32;
using static UnityEditor.Progress;
public class EvacuationPanel : MonoBehaviour public class EvacuationPanel : MonoBehaviour
{ {
@ -65,6 +66,11 @@ public class EvacuationPanel : MonoBehaviour
nPC.roleId = roleid; nPC.roleId = roleid;
createTemplateInfo.Instance.auth_CreateTemplate.npcList = new List<NpcList>(); createTemplateInfo.Instance.auth_CreateTemplate.npcList = new List<NpcList>();
createTemplateInfo.Instance.auth_CreateTemplate.npcList.Add(nPC); createTemplateInfo.Instance.auth_CreateTemplate.npcList.Add(nPC);
//foreach(NpcList item in createTemplateInfo.Instance.auth_CreateTemplate.npcList)
//{
// Debug.Log("npcType>>>>>>>>>>>>>>>>>" + item.userId);
// Debug.Log("roleid>>>>>>>>>>>>>>>>>" + item.roleId);
//}
} }
public void SetNpcType() public void SetNpcType()

View File

@ -56,7 +56,9 @@ public class SelectScenePanel : MonoBehaviour
public string idcidentName{ get; set; } public string idcidentName{ get; set; }
public string difficulty { get; set; } public string difficulty { get; set; }
public string isBuy { get; set; } public string isBuy { get; set; }
public int difficultyId { get; set; }
public bool isSure { get; set; } = false;//判断是否点击了提交按钮 public bool isSure { get; set; } = false;//判断是否点击了提交按钮
public Dictionary<int, List<string>> difficultyToRoles = new Dictionary<int, List<string>>();
public JSONReader jsonReader; public JSONReader jsonReader;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
@ -66,7 +68,7 @@ public class SelectScenePanel : MonoBehaviour
eventChoiceLable.gameObject.SetActive(false); eventChoiceLable.gameObject.SetActive(false);
incidentLable.gameObject.SetActive(false); incidentLable.gameObject.SetActive(false);
InstantiateScenePrefab(); InstantiateScenePrefab();
InstantiateSchoolPrefab(); //InstantiateSchoolPrefab();
SetEventToggleOpenorClose(incidentInfos); SetEventToggleOpenorClose(incidentInfos);
continueBtn.onClick.AddListener(OnClickContinueBtn); continueBtn.onClick.AddListener(OnClickContinueBtn);
SetFirstChoise(scenetoggleList); SetFirstChoise(scenetoggleList);
@ -123,26 +125,60 @@ public class SelectScenePanel : MonoBehaviour
toggle.group = sceneGroup; toggle.group = sceneGroup;
scenetoggleList.Add(toggle); // 使用 Add() 方法添加 Toggle 元素 scenetoggleList.Add(toggle); // 使用 Add() 方法添加 Toggle 元素
sceneItemList.Add(item); sceneItemList.Add(item);
} }
toggle.onValueChanged.AddListener((isSelected) =>
{
if (isSelected) // 只有当Toggle被选中时才调用SelectEventBtn
{
// 清空事件列表
schoolInfoList.Clear();
foreach (Transform child in schoolList)
{
Destroy(child.gameObject);
}
this.scnenId = item.sceneId; // 获取 Text 组件的文本
this.sceneName = item.sceneName.text;
InstantiateSchoolPrefab(scnenId);
}
});
} }
} }
//动态加载学校选择预制体(这里面的东西需要判断场景的Id来加载对应的场景) //动态加载学校选择预制体(这里面的东西需要判断场景的Id来加载对应的场景)
public void InstantiateSchoolPrefab() public void InstantiateSchoolPrefab(int id)
{ {
for (int i = 0; i < 6; i++) foreach (var sceneDate in jsonReader.sceneDictionary)
{
if (sceneDate.Key == id)
{ {
GameObject slot = GameObject.Instantiate<GameObject>(schoolPrefab, schoolList); GameObject slot = GameObject.Instantiate<GameObject>(schoolPrefab, schoolList);
SchoolInfo item = slot.GetComponent<SchoolInfo>(); SchoolInfo item = slot.GetComponent<SchoolInfo>();
item.schoolName.text = "南山中学"; item.schoolName.text = sceneDate.Value.Name;
item.schoolId = i; item.schoolId = sceneDate.Value.ID;
Toggle toggle = slot.GetComponent<Toggle>(); Toggle toggle = slot.GetComponent<Toggle>();
if (toggle != null) if (toggle != null)
{ {
toggle.group = schoolGroup; // 将 Toggle 添加到 ToggleGroup 中
toggle.group = incidentGroup;
toggle.isOn = false;
schooltoggleList.Add(toggle); schooltoggleList.Add(toggle);
schoolInfoList.Add(item); schoolInfoList.Add(item);
} }
else
{
break;
}
toggle.onValueChanged.AddListener((isSelected) =>
{
if (isSelected) // 只有当Toggle被选中时才调用SelectEventBtn
{
this.schoolId = item.schoolId; // 获取 Text 组件的文本
this.schoolName = item.schoolName.text;
}
});
}
} }
} }
@ -153,13 +189,13 @@ public class SelectScenePanel : MonoBehaviour
{ {
if (eventData.Key == eventId) if (eventData.Key == eventId)
{ {
//Debug.Log("<<<<<<<<<<<<<<<<<eventId" + eventData.Key);
GameObject slot = GameObject.Instantiate<GameObject>(incidentPrefab, incidentList); GameObject slot = GameObject.Instantiate<GameObject>(incidentPrefab, incidentList);
IncidentInfo item = slot.GetComponent<IncidentInfo>(); IncidentInfo item = slot.GetComponent<IncidentInfo>();
item.incidentText.text = eventData.Value.Note; item.incidentText.text = eventData.Value.Note;
item.incidentID = eventData.Value.ID; item.incidentID = eventData.Value.ID;
this.idcidentId = item.incidentID;
this.idcidentName = item.incidentText.text;
Toggle toggle = slot.GetComponent<Toggle>(); Toggle toggle = slot.GetComponent<Toggle>();
if (toggle != null) if (toggle != null)
{ {
// 将 Toggle 添加到 ToggleGroup 中 // 将 Toggle 添加到 ToggleGroup 中
@ -167,10 +203,6 @@ public class SelectScenePanel : MonoBehaviour
toggle.isOn = false; toggle.isOn = false;
eventToggleList.Add(toggle); eventToggleList.Add(toggle);
incidentInfos.Add(item); incidentInfos.Add(item);
if (incidentInfos.Count > 1)
{
//随机按钮设置
}
} }
else else
{ {
@ -178,30 +210,43 @@ public class SelectScenePanel : MonoBehaviour
} }
toggle.onValueChanged.AddListener((isSelected) => toggle.onValueChanged.AddListener((isSelected) =>
{ {
if (isSelected) if (isSelected)
{ {
this.idcidentName = item.incidentText.text; this.idcidentName = item.incidentText.text;
this.idcidentId = item.incidentID; this.idcidentId = item.incidentID;
datePanel.placeId = item.incidentID; datePanel.placeId = item.incidentID;
string[] difficulty = eventData.Value.Difficulty.Split('|'); string[] difficulty = eventData.Value.Difficulty.Split('|');
string[] roleGroups = eventData.Value.Role.Split('|'); // 分割Role字段得到多个角色组
// 确保difficultyList和difficulty的长度匹配 // 确保difficultyList和difficulty的长度匹配
for (int i = 0; i < difficultyList.Count && i < difficulty.Length; i++) for (int i = 0; i < difficultyList.Count && i < difficulty.Length; i++)
{ {
Toggle item = difficultyList[i]; // 获取对应的Toggle Toggle item = difficultyList[i]; // 获取对应的Toggle
DifficultyInfo difficultyInfo = item.gameObject.GetComponent<DifficultyInfo>(); DifficultyInfo difficultyInfo = item.gameObject.GetComponent<DifficultyInfo>();
if (difficultyInfo == null) if (difficultyInfo == null)
{ {
difficultyInfo = item.gameObject.AddComponent<DifficultyInfo>(); difficultyInfo = item.gameObject.AddComponent<DifficultyInfo>();
} }
// 给每个Toggle设置不同的difficulty值 // 给每个Toggle设置不同的difficulty值
difficultyInfo.difficulty = int.Parse(difficulty[i]); difficultyInfo.difficulty = int.Parse(difficulty[i]);
// 打印出设置的难度值,帮助调试 // 将难度和对应的角色存入字典
Debug.Log($"Toggle {i} - Difficulty: {difficultyInfo.difficulty}"); if (difficultyInfo.difficulty == int.Parse(difficulty[i]))
{
// 获取与当前难度相关的角色组(根据索引)
string[] correspondingRoles = roleGroups[i].Split(',');
// 打印或者处理角色
List<string> rolesList = new List<string>(correspondingRoles); // 转换为List
if (!difficultyToRoles.ContainsKey(difficultyInfo.difficulty))
{
difficultyToRoles.Add(difficultyInfo.difficulty, rolesList);
}
else
{
difficultyToRoles[difficultyInfo.difficulty] = rolesList; // 如果已存在,更新角色列表
}
}
} }
} }
}); });
@ -212,6 +257,11 @@ public class SelectScenePanel : MonoBehaviour
//点击继续按钮后更换场景图片及名称 //点击继续按钮后更换场景图片及名称
public void InstantiateEventPrefab(int id) public void InstantiateEventPrefab(int id)
{ {
incidentInfos.Clear();
foreach (Transform child in incidentList)
{
Destroy(child.gameObject);
}
text20008.text = sceneName; text20008.text = sceneName;
// 通过 id 获取对应的 sceneData // 通过 id 获取对应的 sceneData
if (jsonReader.sceneDictionary.TryGetValue(id, out var sceneData)) if (jsonReader.sceneDictionary.TryGetValue(id, out var sceneData))
@ -228,8 +278,6 @@ public class SelectScenePanel : MonoBehaviour
{ {
// 根据 incidentId 获取对应的事件数据 // 根据 incidentId 获取对应的事件数据
EventData eventData=jsonReader.GetEvenById(incidentId); EventData eventData=jsonReader.GetEvenById(incidentId);
Debug.Log("eventData.ID:" + eventData.ID);
Debug.Log("eventData.DisasterLocation:" + eventData.DisasterLocation);
string[] incidentIds2 = eventData.DisasterLocation.Split('|'); string[] incidentIds2 = eventData.DisasterLocation.Split('|');
GameObject slot = GameObject.Instantiate<GameObject>(eventPrefab, eventList); GameObject slot = GameObject.Instantiate<GameObject>(eventPrefab, eventList);
EventInfo item = slot.GetComponent<EventInfo>(); EventInfo item = slot.GetComponent<EventInfo>();
@ -285,46 +333,6 @@ public class SelectScenePanel : MonoBehaviour
} }
} }
//学校选择
public void SelectSchoolBtn()
{
if (isSure)
{
SchoolInfo gameObject = GetComponentInChildren<SchoolInfo>();
foreach (SchoolInfo item in schoolInfoList)
{
if (item.gameObject.transform.GetComponent<Toggle>().isOn)
{
this.schoolId = item.schoolId;
this.schoolName = item.schoolName.text;
title.text = item.schoolName.text;
}
}
Debug.Log("###############1:" + this.schoolId);
Debug.Log("###############2:" + this.schoolName);
}
}
//场景选择
public void SelectSceneBtn()
{
bool sceneSelected = false; // 检查是否有场景被选择
foreach (SceneItem item in sceneItemList)
{
// 检查当前的 Toggle 是否被选中
if (item.gameObject.transform.GetComponent<Toggle>().isOn)
{
// 设置场景名称
this.sceneName = item.sceneName.text; // 获取 Text 组件的文本
this.scnenId = item.sceneId;
Debug.Log("------------this.scnenId:" + this.scnenId);
createTemplateInfo.Instance.auth_CreateTemplate.sceneId = item.sceneId.ToString();
sceneSelected = true;
break; // 找到选中的场景后退出循环
}
}
}
//事件及难度选择 //事件及难度选择
public void SelectEvent() public void SelectEvent()
{ {
@ -337,8 +345,6 @@ public class SelectScenePanel : MonoBehaviour
this.eventName = item.eventName.text; this.eventName = item.eventName.text;
} }
} }
Debug.Log("%%%%%%%%%%%%%1:" + this.eventId);
Debug.Log("%%%%%%%%%%%%%2:" + this.eventName);
} }
//随机事件 //随机事件
@ -386,6 +392,8 @@ public class SelectScenePanel : MonoBehaviour
{ {
if (item.isOn) if (item.isOn)
{ {
DifficultyInfo difficultyInfo = item.GetComponent<DifficultyInfo>();
this.difficultyId = difficultyInfo.difficulty;
this.difficulty = item.transform.parent.GetComponentInChildren<Text>().text; this.difficulty = item.transform.parent.GetComponentInChildren<Text>().text;
auth_CreateTemplate.mode = this.difficulty;//给结构体“难度”赋值 auth_CreateTemplate.mode = this.difficulty;//给结构体“难度”赋值
} }
@ -395,8 +403,8 @@ public class SelectScenePanel : MonoBehaviour
//继续按钮,点击后上传数据 //继续按钮,点击后上传数据
public void OnClickContinueBtn() public void OnClickContinueBtn()
{ {
SelectSchoolBtn(); //SelectSchoolBtn();
SelectSceneBtn(); //SelectSceneBtn();
InstantiateEventPrefab(this.scnenId); InstantiateEventPrefab(this.scnenId);
SetFirstChoise(evnetsceneList); SetFirstChoise(evnetsceneList);
if (continueBtn.interactable) if (continueBtn.interactable)
@ -415,12 +423,12 @@ public class SelectScenePanel : MonoBehaviour
//提交按钮,点击上传数据和隐藏界面 //提交按钮,点击上传数据和隐藏界面
public void SubmitBtn() public void SubmitBtn()
{ {
SelectEvent();
SelsctDifficulty(); SelsctDifficulty();
SetDataPanelInfo(); SetDataPanelInfo();
this.gameObject.SetActive(false); this.gameObject.SetActive(false);
panel.gameObject.SetActive(true); panel.gameObject.SetActive(true);
DisableUIInteraction(); DisableUIInteraction();
panel.DynamicLoadingDuty(this.difficultyId);
isSure = true; isSure = true;
} }
@ -456,24 +464,35 @@ public class SelectScenePanel : MonoBehaviour
//通过判断Toggle的IsOn是否被打开来判断继续按钮是否置灰 //通过判断Toggle的IsOn是否被打开来判断继续按钮是否置灰
public void IsClick() public void IsClick()
{ {
bool anyToggleSelected = true; bool anysceneSelected = false;
bool anyschoolSelected = false;
bool isOk = false;
// 检查场景选择 // 检查场景选择
foreach (Toggle toggle in scenetoggleList) foreach (Toggle toggle in scenetoggleList)
{ {
if (toggle.isOn) if (toggle.isOn)
{ {
anyToggleSelected = true; anysceneSelected = true;
break; // 如果有一个场景 Toggle 被选中,停止检查
}
}
foreach (Toggle toggle in schooltoggleList)
{
if (toggle.isOn)
{
anyschoolSelected = true;
break; // 如果有一个场景 Toggle 被选中,停止检查 break; // 如果有一个场景 Toggle 被选中,停止检查
} }
} }
// 根据是否有 Toggle 被选中,设置 ContinueBtn 是否可交互 // 根据是否有 Toggle 被选中,设置 ContinueBtn 是否可交互
if (continueBtn != null) if (continueBtn != null&& anysceneSelected==true&& anyschoolSelected==true)
{ {
continueBtn.interactable = anyToggleSelected; // 如果有选中的 Toggle继续按钮可交互否则不可交互 isOk = true;
continueBtn.interactable = isOk; // 如果有选中的 Toggle继续按钮可交互否则不可交互
} }
else else
{ {
continueBtn.interactable = isOk;
Debug.LogError("ContinueBtn 按钮组件未找到!"); Debug.LogError("ContinueBtn 按钮组件未找到!");
} }
} }
@ -497,7 +516,6 @@ public class SelectScenePanel : MonoBehaviour
//检查事件选择 //检查事件选择
foreach (Toggle toggle in eventToggleList) foreach (Toggle toggle in eventToggleList)
{ {
Debug.LogError("事件选择:" + anyToggleSelected);
if (toggle.isOn) if (toggle.isOn)
{ {
anyeventSelected = true; anyeventSelected = true;
@ -505,18 +523,15 @@ public class SelectScenePanel : MonoBehaviour
break; // 如果有一个场景 Toggle 被选中,停止检查 break; // 如果有一个场景 Toggle 被选中,停止检查
} }
} }
Debug.Log(submitBtn != null && anyToggleSelected == true && anyeventSelected == true);
// 根据是否有 Toggle 被选中,设置 ContinueBtn 是否可交互 // 根据是否有 Toggle 被选中,设置 ContinueBtn 是否可交互
if (submitBtn != null && anyToggleSelected == true&& anyeventSelected==true) if (submitBtn != null && anyToggleSelected == true&& anyeventSelected==true)
{ {
Debug.LogError("提交按钮组件未找到!");
isOk = true; isOk = true;
submitBtn.interactable = isOk; // 如果有选中的 Toggle继续按钮可交互否则不可交互 submitBtn.interactable = isOk; // 如果有选中的 Toggle继续按钮可交互否则不可交互
} }
else else
{ {
submitBtn.interactable = isOk; submitBtn.interactable = isOk;
Debug.LogWarning("提交按钮组件未找到!");
} }
} }
@ -605,26 +620,35 @@ public class SelectScenePanel : MonoBehaviour
// 禁用场景选择中的所有Toggle按钮 // 禁用场景选择中的所有Toggle按钮
foreach (Toggle toggle in scenetoggleList) foreach (Toggle toggle in scenetoggleList)
{ {
toggle.interactable = false; // 设置Toggle为不可交互 if (toggle != null)
{
toggle.interactable = false;
}
} }
// 禁用学校选择中的所有Toggle按钮 // 禁用学校选择中的所有Toggle按钮
foreach (Toggle toggle in schooltoggleList) foreach (Toggle toggle in schooltoggleList)
{
if (toggle != null)
{ {
toggle.interactable = false; toggle.interactable = false;
} }
}
// 禁用事件选择中的所有Toggle按钮 // 禁用事件选择中的所有Toggle按钮
foreach (Toggle toggle in eventToggleList) foreach (Toggle toggle in eventToggleList)
{ {
toggle.interactable = false; if (toggle != null)
}
// 禁用事件场景选择中的所有Toggle按钮
foreach (Toggle toggle in evnetsceneList)
{ {
toggle.interactable = false; toggle.interactable = false;
} }
}
// 禁用事件场景选择中的所有Toggle按钮
foreach (Toggle toggle in evnetsceneList)
{
if (toggle != null)
{
toggle.interactable = false;
}
}
// 禁用继续按钮 // 禁用继续按钮
continueBtn.interactable = false; continueBtn.interactable = false;