NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/GameWrapper/Level/LevelData.cs

661 lines
22 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
using System;
using UnityEngine;
2024-06-04 16:50:16 +08:00
using Sirenix.OdinInspector;
using System.Collections.Generic;
using System.Runtime.Serialization;
2025-07-09 13:12:36 +08:00
using cfg.AICfg;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Level
{
[Serializable]
public class LevelData
{
2025-12-09 13:05:27 +08:00
#region class
[Serializable]
public class Region
{
public int id;
public List<int> positions = new();
[LabelText("手动指定中心格子索引")] public int centerCellIndex = -1;
public string note; // 策划使用备注
}
[Serializable]
public class BlockRegion
{
public int id;
public List<int> positions = new();
/// <summary>
/// 指示路径
/// </summary>
public string path;
/// <summary>
/// 指示位置
/// </summary>
public Vector3 centerPos = Vector3.zero;
public string note; // 策划使用备注
}
2023-08-22 19:08:45 +08:00
[Serializable]
public class NPCInfo
2024-11-12 20:31:06 +08:00
{
2025-06-13 12:49:47 +08:00
[HideInInspector] public int index; // LocalID
[HideInInspector] public int id; // 怪物ID
2025-06-26 12:26:14 +08:00
2024-11-12 20:31:06 +08:00
[ReadOnly] [LabelText("位置")] public Vector2Int position;
[LabelText("初始护盾")] public float shield;
[LabelText("初始血量")] public float ph;
[LabelText("初始士气")] public float morale;
[LabelText("Buff")] public List<int> buff = new List<int>();
[LabelText("DeBuff")] public List<int> deBuff = new List<int>();
[HideInInspector] public CharacterToward npcToward;
2025-12-10 18:54:43 +08:00
[HideInInspector] public List<int> groups = new List<int>(4);
2025-12-30 15:46:47 +08:00
[HideInInspector] public bool isHideOnLoad;
[ReadOnly][LabelText("所属波数")] public int waveIndex;
[LabelText("延迟出现时间(s)")] public float refreshTime;
2025-07-08 17:00:11 +08:00
[LabelText("巡逻路线ID")] public int patrolRoadID = -1;
2025-06-05 19:03:31 +08:00
[LabelText("显示路径")] public bool showRoadLine;
2025-06-05 15:32:06 +08:00
[LabelText("指定区域ID")] public int specifyRegionID = -1;
2025-06-27 18:06:27 +08:00
[LabelText("预设路径id")] public int presetPathId = -1;
2025-07-04 14:00:11 +08:00
[LabelText("阵营ID 0:己方1:敌方2:中立")] public int troopId;
2025-06-30 19:00:22 +08:00
[LabelText("是否开启侦察")] public bool isOpenInvestigate = true;
2025-07-08 17:00:11 +08:00
}
2023-10-19 15:00:19 +08:00
2025-06-30 14:51:47 +08:00
[Serializable]
2023-10-19 15:00:19 +08:00
public class PatrolInfo
{
2025-07-08 17:00:11 +08:00
[HorizontalGroup("PatrolInfo")] [LabelText("巡逻点位")]
public int cellIndex;
2025-06-26 12:26:14 +08:00
2025-07-08 17:00:11 +08:00
[HideInInspector] public Vector2Int patrolPoint;
2024-11-12 20:31:06 +08:00
[HorizontalGroup("PatrolInfo")] [LabelText("等待时间")]
public float waitTime = 0f;
2023-08-22 19:08:45 +08:00
}
2025-06-26 12:26:14 +08:00
[Serializable]
public class PatrolData
{
[HorizontalGroup("PatrolData")] [ReadOnly]
public int id;
[HorizontalGroup("PatrolData")] [LabelText("巡逻点位数据")]
public List<PatrolInfo> patrolInfos = new();
2025-06-26 12:26:14 +08:00
}
2025-12-09 13:05:27 +08:00
[Serializable]
public class TaskInfo
{
[HideInInspector] public int taskID;
[LabelText("任务类型")] public ConditionModifier taskCondition = new(ConditionUtil.GetAllConditionFilter());
[LabelText("任务注释")] public string taskNote; // 策划使用备注
[LabelText("任务文本替换")] public string taskDesc; // 手写stringKey
[LabelText("前置任务")] public int preTaskID;
[LabelText("后置任务")] public int postTaskID;
2025-06-26 12:26:14 +08:00
2025-12-09 13:05:27 +08:00
[OnDeserialized]
public void OnAfterDeserialize(StreamingContext context)
{
taskCondition.SetFilterTypes(ConditionUtil.GetAllConditionFilter());
}
}
2025-06-26 12:26:14 +08:00
[Serializable]
2025-05-30 16:42:07 +08:00
public class SpawnMonsterData
{
2025-06-04 14:06:11 +08:00
[LabelText("波次ID")] public int waveIndex;
[LabelText("刷新方式")] public ELevelUnitGenType refreshType = ELevelUnitGenType.Default;
[LabelText("间隔时间")] [ShowIf("@refreshType==ELevelUnitGenType.TimeLoop")]
public int refreshInterval;
2025-06-04 14:06:11 +08:00
[LabelText("最大次数 (-1无限循环), 如果为跳转则表示跳转ID")]
public int maxCount;
2025-11-17 17:47:26 +08:00
[LabelText("首波延迟时间")] public float firstDelay = 1f; // 首次延迟时间
}
2023-08-22 19:08:45 +08:00
[Serializable]
public class LevelTriggerData
{
[HideInInspector] public int triggerTaskID;
2025-06-03 12:16:38 +08:00
[LabelText("刷怪波次")] public int wave;
2025-06-05 12:27:48 +08:00
[LabelText("触发Effect类型")] public ELevelTriggerEffectType effectType = ELevelTriggerEffectType.StartGenUnit;
2025-06-05 16:49:26 +08:00
[LabelText("怪物波次IDs")] [ShowIf("@effectType==ELevelTriggerEffectType.ForceKillUnits")]
2025-06-05 12:27:48 +08:00
public List<int> waveList = new List<int>();
2025-11-17 17:47:26 +08:00
[LabelText("触发间隔")] [ShowIf("@effectType==ELevelTriggerEffectType.StartFullSceneDamage")]
2025-08-25 15:14:53 +08:00
public float repeatInterval = 3f; // 重复触发间隔(秒)默认3秒
2025-11-17 17:47:26 +08:00
[LabelText("伤害buffId")] [ShowIf("@effectType==ELevelTriggerEffectType.StartFullSceneDamage")]
2025-08-25 15:14:53 +08:00
public int damageBuffId = -1; // 触发后给敌方添加的伤害加成buffID默认-1不添加
2025-06-05 12:27:48 +08:00
}
2026-06-10 17:09:39 +08:00
[Serializable]
public class HoldFlagData
{
[HideInInspector] [LabelText("区域ID")] public int id;
[HideInInspector] [LabelText("区域点位")] public List<int> cellIndex = new List<int>();
[LabelText("所属战旗ID")] public int flagID;
[HideInInspector] [LabelText("区域争夺触发区ID")] public int triggerTaskID;
2026-06-10 17:09:39 +08:00
[LabelText("占领时间")] public float captureTime;
}
[Serializable]
public class RadarInfo
{
[LabelText("雷达建筑LocalID")] public int localId;
[LabelText("雷达范围(半径圈数)")] public int range;
[LabelText("占领时间")] public float captureTime;
2026-06-10 16:44:23 +08:00
[LabelText("扫描速度(度/秒)")] public float scanSpeed = 60f;
}
2026-06-08 16:30:57 +08:00
[Serializable]
public class SearchLightInfo
{
[LabelText("探照灯建筑LocalID")] public int localID;
2026-06-08 16:48:06 +08:00
[LabelText("初始位置")]public int startCellIndex;
2026-06-08 16:30:57 +08:00
[HideInInspector] public List<int> interactivePoints = new List<int>();
[LabelText("点位时间")] public float captureTime;
[LabelText("点位时间(玩家)")] public float captureTimeUser;
2026-06-08 16:30:57 +08:00
[LabelText("照亮范围")]public int range;
[LabelText("是否循环 (否为折返)")]public bool isLoop;
}
2026-06-09 15:35:41 +08:00
[Serializable]
public class BombAreaInfo
{
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
[LabelText("使用的子弹id")] public int bombBulletId;
2026-06-09 15:35:41 +08:00
[LabelText("轰炸间隔")] public float intervalTime;
[LabelText("轰炸次数")] public int bombCount;
[LabelText("最小轰炸中心数量")] public int bombMinCount;
[LabelText("最大轰炸中心数量")] public int bombMaxCount;
}
2025-06-05 17:15:49 +08:00
#region LevelGuide
2025-06-06 15:32:28 +08:00
/// <summary>
/// 波次横幅显示
/// </summary>
[Serializable]
public class WaveInfoData
{
[ReadOnly] [LabelText("ID")] public int localID;
[LabelText("触发波次ID")] public int waveID = -1;
[LabelText("第几次循环")] public int loopCount = 1;
[LabelText("是否显示横幅")] public bool showWaveInfo;
}
2025-06-05 17:15:49 +08:00
/// <summary>
/// 关卡进度引导
/// </summary>
2025-06-05 16:49:26 +08:00
[Serializable]
2025-06-05 17:15:49 +08:00
public class ProgressGuideData
2025-06-05 16:49:26 +08:00
{
2025-11-17 17:47:26 +08:00
[LabelText("ID")] public int id;
2025-07-18 13:42:07 +08:00
2025-06-11 13:31:37 +08:00
[LabelText("关卡进度参数:类型")] public ELevelGuideProgressType progressType;
2025-06-06 12:22:56 +08:00
2025-12-09 16:21:59 +08:00
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
[HideInInspector] [LabelText("完成条件")] public int finishTaskID;
2025-06-05 16:49:26 +08:00
2025-06-11 13:31:37 +08:00
public ProgressGuideData(ProgressGuideData data)
{
progressType = data.progressType;
2025-12-09 16:21:59 +08:00
triggerTaskID = data.triggerTaskID;
finishTaskID = data.finishTaskID;
2025-06-11 13:31:37 +08:00
}
public ProgressGuideData()
{
progressType = ELevelGuideProgressType.SuccessProgress;
2025-06-11 16:44:27 +08:00
}
2025-06-05 17:15:49 +08:00
}
2025-06-05 16:49:26 +08:00
2025-06-05 17:15:49 +08:00
/// <summary>
/// 关卡立标引导
/// </summary>
[Serializable]
public class SetFlagGuideData
{
2025-11-17 17:47:26 +08:00
[LabelText("ID")] public int id;
2025-07-18 13:42:07 +08:00
2025-06-11 13:31:37 +08:00
[LabelText("立标类型")] public ELevelGuideSetFlagType setFlagType;
2025-06-05 17:03:22 +08:00
2025-06-06 14:02:38 +08:00
[LabelText("选择单位类型")] [ShowIf("@setFlagType==ELevelGuideSetFlagType.Unit")]
2025-06-11 13:31:37 +08:00
public ESetFlagUnitType unitType;
2025-06-06 14:02:38 +08:00
2025-06-11 13:31:37 +08:00
[LabelText("对应ID")] public int setFlagID;
2025-06-06 16:31:16 +08:00
2025-06-26 12:26:14 +08:00
[HorizontalGroup("1")] [LabelText("立标提示内容")]
public string setFlagKey;
[HorizontalGroup("1")] [LabelText("备注")]
public string note; // 策划使用备注
2025-06-05 17:03:22 +08:00
2025-06-10 18:45:59 +08:00
[HideInInspector] [LabelText("立标配置ID")]
public int guideTagID; // 编辑器使用
[HideInInspector] [LabelText("立标路径")] public string guideTagPath;
2025-12-09 16:21:59 +08:00
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
[HideInInspector] [LabelText("完成条件")] public int finishTaskID;
2025-06-11 13:31:37 +08:00
public SetFlagGuideData(SetFlagGuideData data)
{
setFlagType = data.setFlagType;
unitType = data.unitType;
setFlagID = data.setFlagID;
setFlagKey = data.setFlagKey;
guideTagID = data.guideTagID;
guideTagPath = data.guideTagPath;
2025-12-09 16:21:59 +08:00
triggerTaskID = data.triggerTaskID;
finishTaskID = data.finishTaskID;
2025-06-11 13:31:37 +08:00
}
2025-06-05 16:49:26 +08:00
2025-06-11 13:31:37 +08:00
public SetFlagGuideData()
{
setFlagType = ELevelGuideSetFlagType.CellIndex;
unitType = ESetFlagUnitType.Self;
setFlagID = -1;
2025-06-11 16:44:27 +08:00
}
2025-06-05 16:49:26 +08:00
}
2025-06-05 17:15:49 +08:00
/// <summary>
/// 关卡信息面板引导
/// </summary>
2025-06-05 17:03:22 +08:00
[Serializable]
2025-06-05 17:15:49 +08:00
public class InfoPanelGuideData
2025-06-05 17:03:22 +08:00
{
2025-11-17 17:47:26 +08:00
[LabelText("ID")] public int id;
2025-07-18 13:42:07 +08:00
2025-06-26 12:26:14 +08:00
[HorizontalGroup("1")] [LabelText("标题ID")]
public string titleKey;
[HorizontalGroup("1")] [LabelText("备注")]
public string noteTitle; // 策划使用备注
[HorizontalGroup("2")] [LabelText("内容ID")]
public string contentKey;
[HorizontalGroup("2")] [LabelText("备注")]
public string noteContent; // 策划使用备注
2025-12-09 16:21:59 +08:00
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
2025-06-05 17:15:49 +08:00
2025-12-09 16:21:59 +08:00
[HideInInspector] [LabelText("完成条件")] public int finishTaskID;
2025-06-11 13:31:37 +08:00
public InfoPanelGuideData(InfoPanelGuideData data)
{
titleKey = data.titleKey;
contentKey = data.contentKey;
2025-12-09 16:21:59 +08:00
triggerTaskID = data.triggerTaskID;
finishTaskID = data.finishTaskID;
2025-06-11 13:31:37 +08:00
}
public InfoPanelGuideData()
{
}
2025-06-05 17:03:22 +08:00
}
2025-06-05 17:15:49 +08:00
#endregion
2025-06-05 19:03:31 +08:00
2025-07-08 20:07:21 +08:00
#region 关卡AI广播
2025-11-17 17:47:26 +08:00
2025-07-08 20:07:21 +08:00
/// <summary>
/// AI广播对象类型
/// </summary>
public enum E_AIBroadcastTargetType
{
2025-11-17 17:47:26 +08:00
[LabelText("怪物组")] EnemyGroup,
[LabelText("所有怪物,包括未出生的")] AllEnemy,
[LabelText("所有怪物,不包括未出生的")] AllCurEnemy,
[LabelText("怪物")] Enemy,
2025-07-08 20:07:21 +08:00
}
2025-07-09 14:22:11 +08:00
/// <summary>
/// AI行为目标类型
/// </summary>
public enum E_AIActionTarget
{
2025-11-17 17:47:26 +08:00
[LabelText("单位目标")] Unit,
[LabelText("建筑目标")] Build,
[LabelText("地格目标")] Cell,
[LabelText("区域目标")] Area,
[LabelText("路径ID")] Path,
2025-11-18 14:38:26 +08:00
[LabelText("我方全体非强隐单位")] SelfTroop,
2025-07-09 14:22:11 +08:00
}
2025-07-09 13:12:36 +08:00
/// <summary>
/// AI预设切换类型
/// </summary>
public enum E_AIPresetChangeType
{
None,
2025-11-17 17:47:26 +08:00
[LabelText("整体预设")] All = 1,
[LabelText("区域巡逻")] AreaPatrol = 2,
[LabelText("路径巡逻")] PathPatrol = 3,
[LabelText("驻守")] Idle = 4,
[LabelText("常规到达")] NormalReach = 5,
2025-07-09 13:12:36 +08:00
//[LabelText("上车到达")]
2025-07-10 13:27:34 +08:00
//VehicleReach = 6,
2025-11-17 17:47:26 +08:00
[LabelText("存活")] Living = 7,
[LabelText("常规")] Normal = 8,
[LabelText("舍命")] LayLive = 9,
[LabelText("牛皮糖")] StickyCandy = 10,
2025-07-09 13:12:36 +08:00
}
2025-07-08 20:07:21 +08:00
/// <summary>
/// AI广播数据
/// </summary>
[Serializable]
public sealed class AIBroadcastData
{
2025-12-09 16:21:59 +08:00
[HideInInspector] [LabelText("触发条件")] public int triggerTaskID;
2025-07-08 20:07:21 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI广播对象类型")] public E_AIBroadcastTargetType aiBroadcastTargetType;
2025-07-08 20:07:21 +08:00
[LabelText("目标id列表")]
2025-11-17 17:47:26 +08:00
[ShowIf(
"@E_AIBroadcastTargetType.EnemyGroup == aiBroadcastTargetType || E_AIBroadcastTargetType.Enemy == aiBroadcastTargetType")]
2025-07-08 20:07:21 +08:00
public List<int> listTargetId;
2025-07-09 13:12:36 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI行为")] public EAIAction AIAction;
2025-07-09 13:12:36 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI行为目标")] [ShowIf("@EAIAction.None != AIAction")]
2025-07-09 14:22:11 +08:00
public E_AIActionTarget AIActionTarget;
2025-12-09 13:05:27 +08:00
[LabelText("单位目标id")]
[ShowIf("@EAIAction.None != AIAction && AIActionTarget != E_AIActionTarget.SelfTroop")]
2025-07-09 14:22:11 +08:00
public int actionTargetId;
2025-07-09 13:12:36 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI状态切换")] public EAIState AIState;
2025-07-09 13:12:36 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI预设切换类型")] public E_AIPresetChangeType AIPresetChangeType;
2025-07-09 13:12:36 +08:00
2025-11-17 17:47:26 +08:00
[LabelText("AI预设ID")] [ShowIf("@E_AIPresetChangeType.All == AIPresetChangeType")]
2025-07-09 13:12:36 +08:00
public int AIPresetId;
2025-07-10 13:27:34 +08:00
[LabelText("是否循环巡逻true:循环false:往返")]
2025-11-17 17:47:26 +08:00
[ShowIf(
"@E_AIPresetChangeType.AreaPatrol == AIPresetChangeType || E_AIPresetChangeType.PathPatrol == AIPresetChangeType")]
2025-07-10 13:27:34 +08:00
public bool isLoopPatrol;
2025-07-09 13:12:36 +08:00
[LabelText("巡逻地点ID")]
2025-11-17 17:47:26 +08:00
[ShowIf(
"@E_AIPresetChangeType.AreaPatrol == AIPresetChangeType || E_AIPresetChangeType.PathPatrol == AIPresetChangeType")]
2025-07-09 13:12:36 +08:00
public int PatrolId;
[LabelText("入住建筑类型")]
2025-11-17 17:47:26 +08:00
[ShowIf(
"@E_AIPresetChangeType.Idle == AIPresetChangeType || E_AIPresetChangeType.Normal == AIPresetChangeType || E_AIPresetChangeType.Living == AIPresetChangeType")]
2025-07-09 13:12:36 +08:00
public List<int> listBuildType;
2025-11-17 17:47:26 +08:00
[LabelText("是否回到出生点")] [ShowIf("@E_AIPresetChangeType.Idle == AIPresetChangeType")]
2025-07-09 13:12:36 +08:00
public bool IsBackBirth;
2025-07-10 13:27:34 +08:00
#region 常规到达
2025-11-17 17:47:26 +08:00
[LabelText("前进速度类型true:移速false:巡逻速度")] [ShowIf("@E_AIPresetChangeType.NormalReach == AIPresetChangeType")]
2025-07-10 13:27:34 +08:00
public bool reachSpeedType;
2025-11-17 17:47:26 +08:00
[LabelText("遇敌后是否攻击")] [ShowIf("@E_AIPresetChangeType.NormalReach == AIPresetChangeType")]
2025-07-10 13:27:34 +08:00
public bool reachOpenAttack;
2025-11-17 17:47:26 +08:00
2025-07-10 13:27:34 +08:00
#endregion
#region 存活
2025-11-17 17:47:26 +08:00
[LabelText("是否回到上一个状态")] [ShowIf("@E_AIPresetChangeType.Living == AIPresetChangeType")]
2025-07-10 13:27:34 +08:00
public bool isBackState;
[LabelText("是否限制追踪距离")]
2025-11-17 17:47:26 +08:00
[ShowIf(
"@E_AIPresetChangeType.Normal == AIPresetChangeType || E_AIPresetChangeType.LayLive == AIPresetChangeType")]
2025-07-10 13:27:34 +08:00
public bool isLimitDistance;
2025-11-17 17:47:26 +08:00
2025-07-10 13:27:34 +08:00
#endregion
2025-07-08 20:07:21 +08:00
}
2025-11-17 17:47:26 +08:00
2025-07-08 20:07:21 +08:00
#endregion
2025-07-02 13:34:22 +08:00
/// <summary>
/// 角色方向(兼容老方向)
/// </summary>
2023-08-22 19:08:45 +08:00
public enum CharacterToward
{
2025-07-02 14:57:40 +08:00
Toward1 = 6,
Toward2 = 1,
Toward3 = 7,
Toward4 = 2,
Toward5 = 8,
Toward6 = 3,
Toward7 = 9,
Toward8 = 4,
Toward9 = 10,
Toward10 = 5,
Toward11 = 11,
Toward12 = 0,
2023-08-22 19:08:45 +08:00
}
2025-12-09 13:05:27 +08:00
/// <summary>
/// 占领数据
/// </summary>
[Serializable]
public class CaptureInfo
{
[LabelText("占领区ID")] public int captureRegionID;
[LabelText("占领点位")] public List<int> capturePoints = new List<int>();
[LabelText("进度标识点")] public int captureFlag;
[LabelText("占领时间")] public int CaptureProgress = 0;
[LabelText("占领地面特效ID")] public int captureEffectID;
[LabelText("占领地面完成特效ID")] public int captureFinishEffectID;
[LabelText("占领地面特效创建地格")] public int captureEffectPoint;
}
/// <summary>
/// 撤离数据
/// </summary>
[Serializable]
public class RetreatInfo
{
public List<int> retreatPoints = new List<int>();
public int retreatFlag;
}
2025-12-23 16:58:55 +08:00
[Serializable]
public class GroupInfo
{
public int groupID;
public string groupName;
}
2025-12-09 13:05:27 +08:00
#endregion
2023-11-21 15:04:56 +08:00
public LevelData()
{
2023-08-22 19:08:45 +08:00
}
2025-12-09 13:05:27 +08:00
[HideInInspector] public List<TaskInfo> taskInfos = new();
2023-08-22 19:08:45 +08:00
2025-12-09 13:05:27 +08:00
/// <summary>
/// 巡逻路径
/// </summary>
[HideInInspector] public List<PatrolData> patrolRoadData = new();
2023-08-22 19:08:45 +08:00
2025-12-09 13:05:27 +08:00
/// <summary>
/// 巡逻区域
/// </summary>
[HideInInspector] public List<PatrolData> patrolRegionData = new();
2025-12-23 16:58:55 +08:00
2025-12-09 13:05:27 +08:00
#region 关卡胜利失败星级条件
[HideInInspector] public int successTaskID;
[HideInInspector] public int failTaskID;
[HideInInspector] public List<int> starTaskIDs = new() { 0, 0, 0 };
#endregion
#region 评分关卡条件
2025-12-09 16:21:59 +08:00
[BoxGroup("支线(战役)")] [LabelText("设置该关卡为评分关卡")] [HideInInspector]
public bool scoreLevel;
[HideInInspector] public List<int> scoreTaskID = new(15);
2024-08-27 14:18:39 +08:00
2025-12-09 18:00:25 +08:00
[HideInInspector] public List<ConditionModifier> scoreTarget = new(15);
2024-06-04 16:50:16 +08:00
2025-12-09 13:05:27 +08:00
#endregion
2025-12-30 13:45:24 +08:00
[HideInInspector] public List<LevelTriggerData> levelTriggerDatas = new();
[BoxGroup("特殊需求")] [LabelText("初始生命百分值")]
public float initialHealthPercent = 1.0f;
[BoxGroup("特殊需求")] [LabelText("初始护盾百分值")]
public float initialShieldPercent = 1.0f;
2025-12-10 13:23:32 +08:00
[BoxGroup("敌人波次管理")] [LabelText("敌人波次刷新类型")]
2025-05-30 16:42:07 +08:00
public List<SpawnMonsterData> spawnMonsterDatas;
2025-12-10 13:23:32 +08:00
[BoxGroup("敌人波次管理")] [LabelText("波次横幅显示数据")] [ListDrawerSettings(CustomAddFunction = "OnAddWaveInfoData")]
2025-06-06 15:32:28 +08:00
public List<WaveInfoData> waveInfoDatas = new();
private void OnAddWaveInfoData()
{
var waveInfoData = new WaveInfoData
{
localID = waveInfoDatas.Count + 1
};
waveInfoDatas.Add(waveInfoData);
}
2025-06-06 13:27:32 +08:00
#region 关卡引导
2025-06-05 17:03:22 +08:00
2025-06-10 18:45:59 +08:00
[HideInInspector] [LabelText("关卡进度")] public List<ProgressGuideData> progressGuideDatas = new();
2025-06-06 13:27:32 +08:00
2025-06-10 18:45:59 +08:00
[HideInInspector] [LabelText("立标数据")] public List<SetFlagGuideData> setFlagGuideDatas = new();
2025-06-06 13:27:32 +08:00
2025-06-10 18:45:59 +08:00
[HideInInspector] [LabelText("信息板数据")] public List<InfoPanelGuideData> infoPanelGuideDatas = new();
2025-06-06 13:27:32 +08:00
#endregion
2025-07-09 13:12:36 +08:00
#region 关卡AI广播
2025-11-17 17:47:26 +08:00
[HideInInspector] [LabelText("关卡AI广播进度")]
2025-07-09 13:12:36 +08:00
public List<AIBroadcastData> listAIBroadcastData = new();
2025-11-17 17:47:26 +08:00
2025-07-09 13:12:36 +08:00
#endregion
2025-12-23 16:58:55 +08:00
[HideInInspector] public List<NPCInfo> npcInfos = new();
2024-11-12 20:31:06 +08:00
2025-06-30 18:46:13 +08:00
[HideInInspector] public List<NPCInfo> midNpcInfos = new();
2024-11-12 20:31:06 +08:00
2025-06-30 18:46:13 +08:00
[HideInInspector] public List<NPCInfo> selfNpcInfos = new();
2025-06-30 14:51:47 +08:00
2025-06-11 12:02:40 +08:00
[HideInInspector] public Dictionary<int, List<int>> npcGroupInfos = new();
2025-09-03 14:43:56 +08:00
/// <summary>
/// 阻挡攻击数据
/// </summary>
[HideInInspector] public List<MapData.BlockSphereInfo> BlockSphereInfos = new();
2025-11-17 17:47:26 +08:00
[HideInInspector] public List<CaptureInfo> CapturePoints = new(8);
2024-11-12 20:31:06 +08:00
[HideInInspector] public List<int> enemyRetreatReusablePoints = new List<int>();
2024-11-12 20:31:06 +08:00
2025-11-17 17:47:26 +08:00
[HideInInspector] public RetreatInfo retreatPoints = new RetreatInfo();
2024-11-26 16:58:42 +08:00
[HideInInspector] public int fallBackCount;
#region 地区相关
2025-12-23 16:58:55 +08:00
/// <summary>
/// 出战区
/// </summary>
[HideInInspector] public int preparingRegionId;
/// <summary>
/// 出战区朝向
/// </summary>
[HideInInspector] public CharacterToward preparingRegionToward;
/// <summary>
/// PVP防守区
/// </summary>
[HideInInspector] public int pvpDefendRegionId;
/// <summary>
/// PVP防守方朝向
/// </summary>
[HideInInspector] public CharacterToward pvpDefendToward;
/// <summary>
/// 雷区
/// </summary>
[HideInInspector] public List<Region> minesRegions = new();
/// <summary>
/// 阻挡区
/// </summary>
[HideInInspector] public List<BlockRegion> blockRegions = new();
/// <summary>
/// 触发区
/// </summary>
[HideInInspector] public List<Region> defenseRegions = new();
2026-06-10 17:09:39 +08:00
/// <summary>
/// 战旗
/// </summary>
[HideInInspector] public List<HoldFlagData> holdGFlagInfos = new List<HoldFlagData>();
/// <summary>
/// 雷达信息
/// </summary>
[HideInInspector] public List<RadarInfo> radarInfos = new List<RadarInfo>();
2026-06-08 16:30:57 +08:00
/// <summary>
/// 探照灯信息
/// </summary>
2026-06-09 15:35:41 +08:00
[HideInInspector] public List<SearchLightInfo> searchLightInfos = new List<SearchLightInfo>();
/// <summary>
/// 轰炸区信息
/// </summary>
[HideInInspector] public List<BombAreaInfo> bombAreaInfos = new List<BombAreaInfo>();
#endregion
2025-12-23 16:58:55 +08:00
#region 怪物组相关 策划使用
2025-12-29 19:07:03 +08:00
[HideInInspector] public List<GroupInfo> groupInfos = new();
2025-12-23 16:58:55 +08:00
#endregion
2023-08-22 19:08:45 +08:00
}
2026-06-10 16:44:23 +08:00
}