关卡编辑器轰炸区

main
zhangaotian 2026-06-09 15:35:41 +08:00
parent 07a146a12c
commit bbb8c007b5
4 changed files with 74 additions and 8 deletions

View File

@ -159,6 +159,16 @@ namespace Gameplay.Level
[LabelText("是否循环 (否为折返)")]public bool isLoop;
}
[Serializable]
public class BombAreaInfo
{
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
[LabelText("轰炸间隔")] public float intervalTime;
[LabelText("轰炸次数")] public int bombCount;
[LabelText("最小轰炸中心数量")] public int bombMinCount;
[LabelText("最大轰炸中心数量")] public int bombMaxCount;
}
#region LevelGuide
/// <summary>
@ -614,7 +624,12 @@ namespace Gameplay.Level
/// <summary>
/// 探照灯信息
/// </summary>
[HideInInspector] public List<SearchLightInfo> SearchLightInfos = new List<SearchLightInfo>();
[HideInInspector] public List<SearchLightInfo> searchLightInfos = new List<SearchLightInfo>();
/// <summary>
/// 轰炸区信息
/// </summary>
[HideInInspector] public List<BombAreaInfo> bombAreaInfos = new List<BombAreaInfo>();
#endregion

View File

@ -1515,7 +1515,7 @@ public partial class LevelEditorWindow
var map = currWindow._curMap;
currWindow._currEditSearchLight = this;
var searchLightInfos = currWindow.currentLevelData.SearchLightInfos;
var searchLightInfos = currWindow.currentLevelData.searchLightInfos;
foreach (var searchLight in searchLightInfos)
{
map.SetBlocksColor(searchLight.interactivePoints, false, SearchLightColor);
@ -1545,7 +1545,7 @@ public partial class LevelEditorWindow
private void UpdateSearchLightInfo()
{
searchLightList.Clear();
foreach (var searchLight in currentLevelData.SearchLightInfos)
foreach (var searchLight in currentLevelData.searchLightInfos)
{
var ra = new SearchLightEditorInfo(searchLight);
searchLightList.Add(ra);
@ -1557,12 +1557,39 @@ public partial class LevelEditorWindow
if (_curMap == null || currentLevelData == null)
return;
foreach (var searchLight in currentLevelData.SearchLightInfos)
foreach (var searchLight in currentLevelData.searchLightInfos)
{
_curMap.SetBlocksColor(searchLight.interactivePoints, false, SearchLightColor);
}
}
#endregion
#region 轰炸区
[Serializable]
public class BombAreaInfoEditor
{
[HorizontalGroup("1")] [LabelText("触发条件"), Indent] [ReadOnly]
public string triggerTask;
[HorizontalGroup("1")]
[Button("搜索/选择触发条件", ButtonSizes.Small)]
private void OpenTriggerTaskSelector()
{
currWindow.ShowTaskSelector("选择触发条件", taskName => triggerTask = taskName,
id => info.triggerTaskID = id);
}
[LabelText("轰炸信息")] public BombAreaInfo info;
public BombAreaInfoEditor(BombAreaInfo bombArea)
{
info = bombArea;
triggerTask = currWindow.GetTaskName(info.triggerTaskID);
}
}
#endregion
#endregion

View File

@ -782,7 +782,10 @@ public partial class LevelEditorWindow
radarInfoList = currentLevelData.radarInfos.Select(r => new RadarEditorInfo(r)).ToList();
// 探照灯
searchLightList = currentLevelData.SearchLightInfos.Select(s => new SearchLightEditorInfo(s)).ToList();
searchLightList = currentLevelData.searchLightInfos.Select(s => new SearchLightEditorInfo(s)).ToList();
// 轰炸区
bombAreaInfoList = currentLevelData.bombAreaInfos.Select(b => new BombAreaInfoEditor(b)).ToList();
// 加载当前关卡的Monster配置
LoadAllNpcConfig();

View File

@ -801,19 +801,37 @@ public partial class LevelEditorWindow : OdinEditorWindow
private void CustomAddSearchLight()
{
var searchLight = new LevelData.SearchLightInfo();
currentLevelData.SearchLightInfos.Add(searchLight);
currentLevelData.searchLightInfos.Add(searchLight);
UpdateSearchLightInfo();
}
private void CustomRemoveSearchLight(int index)
{
ClearSearchLightColor();
currentLevelData.SearchLightInfos.RemoveAt(index);
currentLevelData.searchLightInfos.RemoveAt(index);
UpdateSearchLightInfo();
}
#endregion
#region 轰炸区
[FoldoutGroup("地区相关")]
[BoxGroup("地区相关/编辑轰炸区")]
[HorizontalGroup("地区相关/编辑轰炸区/bomb")]
[LabelText("编辑编辑轰炸区"), Indent]
[LabelWidth(100)]
[SerializeField]
private bool canEditorBombAreaInfo;
[FoldoutGroup("地区相关")]
[VerticalGroup("地区相关/编辑轰炸区/bombInfo"), Indent]
[LabelText("轰炸区列表")]
[ShowIf("canEditorBombAreaInfo")]
public List<BombAreaInfoEditor> bombAreaInfoList = new();
#endregion
#endregion
#region 指定路线
@ -1582,7 +1600,10 @@ public partial class LevelEditorWindow : OdinEditorWindow
currentLevelData.radarInfos = radarInfoList.Select(r => r.radarInfo).ToList();
// 探照灯
currentLevelData.SearchLightInfos = searchLightList.Select(s => s.info).ToList();
currentLevelData.searchLightInfos = searchLightList.Select(s => s.info).ToList();
// 轰炸区
currentLevelData.bombAreaInfos = bombAreaInfoList.Select(b => b.info).ToList();
// 阻挡球
SaveBlockSphereInfo();