增加城市行为调试
This commit is contained in:
parent
5521af6313
commit
b05bcb935a
@ -37,6 +37,7 @@ namespace NodeCanvas.Tasks.Actions
|
||||
data.value.IsExcute = true;
|
||||
data.value.MaxAiAction.CheckIsActionInPlayerSight();
|
||||
data.value.IsInSight = data.value.MaxAiAction.IsInSight;
|
||||
data.value.Time = data.value.MaxAiAction.ActionLogic.GetAnimTime(data.value.MaxAiAction.Param);
|
||||
EndAction(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -54,7 +54,6 @@ namespace NodeCanvas.Tasks.Actions
|
||||
if (!param.MapData.GetCityDataByGid(grid.Id, out var city)) continue;
|
||||
if (param.MapData.GetUnitDataByGid(grid.Id, out var cityUnit)) continue;
|
||||
if (!selfCity.Contains(city)) continue;
|
||||
data.value.TargetParam.CityData = city;
|
||||
data.value.TargetParam.TargetGridData = grid;
|
||||
data.value.TargetParam.OnParamChanged();
|
||||
EndAction(true);
|
||||
|
||||
@ -158,6 +158,7 @@ namespace Logic.AI
|
||||
public bool IsExcute;
|
||||
public bool IsFinish;
|
||||
public bool IsInSight;
|
||||
public float Time;
|
||||
|
||||
|
||||
public AICalculatorData()
|
||||
@ -203,6 +204,7 @@ namespace Logic.AI
|
||||
|
||||
IsFinish = false;
|
||||
IsInSight = false;
|
||||
Time = 0.1f;
|
||||
}
|
||||
|
||||
public void Refresh(MapData map, PlayerData player)
|
||||
@ -212,6 +214,7 @@ namespace Logic.AI
|
||||
IsFinish = false;
|
||||
IsInSight = false;
|
||||
IsExcute = false;
|
||||
Time = 0.1f;
|
||||
|
||||
AIActions.Clear();
|
||||
TargetParam = new CommonActionParams();
|
||||
@ -305,8 +308,10 @@ namespace Logic.AI
|
||||
IsFinish = false;
|
||||
IsInSight = false;
|
||||
IsExcute = false;
|
||||
Time = 0.1f;
|
||||
|
||||
AIActions.Clear();
|
||||
MaxAiAction = null;
|
||||
TargetParam = new CommonActionParams();
|
||||
TargetParam.MapData = Map;
|
||||
TargetParam.PlayerData = Player;
|
||||
|
||||
@ -40,7 +40,7 @@ namespace Logic.AI
|
||||
{
|
||||
public AILogicState AILogicState;
|
||||
|
||||
private float _recordTime;
|
||||
private float _targetTime;
|
||||
private AIActionScoreCalculator _scoreCalculator;
|
||||
private AIActionGenerator _generator;
|
||||
|
||||
@ -96,8 +96,7 @@ namespace Logic.AI
|
||||
if (AILogicState == AILogicState.Finished || AILogicState == AILogicState.Prepare) return;
|
||||
if (AILogicState == AILogicState.Pausing)
|
||||
{
|
||||
if (Time.time - _recordTime > DebugCenter.Instance.DebugAIActionTime)
|
||||
AILogicState = AILogicState.Playing;
|
||||
if (Time.time > _targetTime) AILogicState = AILogicState.Playing;
|
||||
}
|
||||
|
||||
if (AILogicState == AILogicState.Playing)
|
||||
@ -126,8 +125,9 @@ namespace Logic.AI
|
||||
if (_data.IsExcute)
|
||||
{
|
||||
AILogicState = AILogicState.Pausing;
|
||||
if (!_data.IsInSight) _recordTime -= DebugCenter.Instance.DebugAIActionTime - 0.04f;
|
||||
else _recordTime = Time.time;
|
||||
if (!_data.IsInSight) _targetTime = Time.time + 0.04f;
|
||||
else _targetTime = Time.time + _data.Time;
|
||||
MainEditor.Instance.OnActionExcuted();
|
||||
}
|
||||
else AILogicState = AILogicState.Finished;
|
||||
}
|
||||
|
||||
@ -33,6 +33,7 @@ namespace Logic.Editor
|
||||
private GUIStyle _whiteBoxStyle;
|
||||
|
||||
private PlayerData _player;
|
||||
private CityData _city;
|
||||
private Main _main;
|
||||
|
||||
|
||||
@ -73,6 +74,7 @@ namespace Logic.Editor
|
||||
|
||||
OnGUIRunTime();
|
||||
OnShowPlayerInfo();
|
||||
OnShowCityInfo();
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
}
|
||||
@ -95,21 +97,28 @@ namespace Logic.Editor
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth($"玩家{player.Id}")) _player = player;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
var selfCity = new HashSet<CityData>();
|
||||
_main.MapData.GetCityDataListByPlayerId(_main.MapData.PlayerMap.SelfPlayerId, selfCity);
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
foreach (var city in _main.MapData.CityMap.CityList)
|
||||
{
|
||||
if (selfCity.Contains(city)) continue;
|
||||
if (InspectorUtils.InspectorButtonWithTextWidth($"城市{city.Id}")) _city = city;
|
||||
}
|
||||
EditorGUILayout.EndHorizontal();
|
||||
}
|
||||
|
||||
private void OnShowPlayerInfo()
|
||||
{
|
||||
if (_main?.MapData == null || _player == null) return;
|
||||
|
||||
GUI.skin.button.wordWrap = true;
|
||||
_barPosition = EditorGUILayout.BeginScrollView(_barPosition);
|
||||
|
||||
MainEditor.Instance.GetPlayerStrategy(_player.Id, out var playerStrategy);
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>玩家ID: {_player.Id}, 国家战略为: {playerStrategy}</b>");
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle);
|
||||
EditorGUILayout.BeginVertical(_redBoxStyle);
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>城市信息</b>");
|
||||
var selfCity = new HashSet<CityData>();
|
||||
_main.MapData.GetCityDataListByPlayerId(_player.Id, selfCity);
|
||||
@ -124,7 +133,7 @@ namespace Logic.Editor
|
||||
EditorGUILayout.Space();
|
||||
EditorGUILayout.Space();
|
||||
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle);
|
||||
EditorGUILayout.BeginVertical(_redBoxStyle);
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>小兵信息</b>");
|
||||
var selfUnits = new HashSet<UnitData>();
|
||||
_main.MapData.GetUnitDataListByPlayerId(_player.Id, selfUnits);
|
||||
@ -137,8 +146,36 @@ namespace Logic.Editor
|
||||
}
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
}
|
||||
|
||||
EditorGUILayout.EndScrollView();
|
||||
private void OnShowCityInfo()
|
||||
{
|
||||
if (_main?.MapData == null || _city == null) return;
|
||||
|
||||
var actions = MainEditor.Instance.GetCityActions(_city.Id);
|
||||
if (actions == null || actions.Count == 0) return;
|
||||
foreach (var aiAction in actions)
|
||||
{
|
||||
EditorGUILayout.BeginVertical(_whiteBoxStyle);
|
||||
if (aiAction.Param.GridData != null)
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>位置:</b> {aiAction.Param.GridData.Pos.X}, {aiAction.Param.GridData.Pos.Y}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>ActionType:</b> {aiAction.ActionLogic.ActionId.ActionType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>WonderType:</b> {aiAction.ActionLogic.ActionId.WonderType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>ResourceType:</b> {aiAction.ActionLogic.ActionId.ResourceType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>FeatureType:</b> {aiAction.ActionLogic.ActionId.FeatureType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>TerrainType:</b> {aiAction.ActionLogic.ActionId.TerrainType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>UnitType:</b> {aiAction.ActionLogic.ActionId.UnitType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>GiantType:</b> {aiAction.ActionLogic.ActionId.GiantType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>Vegetation:</b> {aiAction.ActionLogic.ActionId.Vegetation}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>UnitActionType:</b> {aiAction.ActionLogic.ActionId.UnitActionType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>CityLevelUpActionType:</b> {aiAction.ActionLogic.ActionId.CityLevelUpActionType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>GridMiscActionType:</b> {aiAction.ActionLogic.ActionId.GridMiscActionType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>SkillType:</b> {aiAction.ActionLogic.ActionId.SkillType}");
|
||||
InspectorUtils.InspectorTextWidthRich($"<b>TechType:</b> {aiAction.ActionLogic.ActionId.TechType}");
|
||||
|
||||
EditorGUILayout.EndVertical();
|
||||
EditorGUILayout.Space();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -162,6 +162,7 @@ namespace Logic
|
||||
_aiPlayers.Add(playerData);
|
||||
}
|
||||
|
||||
MainEditor.Instance.OnAIStarted();
|
||||
Update();
|
||||
}
|
||||
|
||||
|
||||
@ -21,6 +21,7 @@ namespace Logic
|
||||
private Dictionary<uint, Strategy> _unitStrategy;
|
||||
private Dictionary<uint, Strategy> _legionStrategy;
|
||||
private Dictionary<uint, uint> _unitTarget;
|
||||
private Dictionary<uint, List<AIActionBase>> _actionRecord;
|
||||
|
||||
public static MainEditor Instance = new MainEditor();
|
||||
|
||||
@ -31,30 +32,46 @@ namespace Logic
|
||||
_unitStrategy = new Dictionary<uint, Strategy>();
|
||||
_legionStrategy = new Dictionary<uint, Strategy>();
|
||||
_unitTarget = new Dictionary<uint, uint>();
|
||||
}
|
||||
|
||||
public bool GetPlayerStrategy(uint pid, out Strategy strategy)
|
||||
{
|
||||
strategy = Strategy.None;
|
||||
if (!_playerStrategy.TryGetValue(pid, out strategy)) return false;
|
||||
return true;
|
||||
_actionRecord = new Dictionary<uint, List<AIActionBase>>();
|
||||
}
|
||||
|
||||
public bool GetUnitStrategy(uint uid, uint legion, uint playerId, out Strategy strategy, out uint cityId)
|
||||
public void OnAIStarted()
|
||||
{
|
||||
_actionRecord.Clear();
|
||||
}
|
||||
|
||||
public void OnActionExcuted()
|
||||
{
|
||||
if (Data.MaxAiAction?.Param?.CityData == null) return;
|
||||
if (!_actionRecord.ContainsKey(Data.MaxAiAction.Param.CityData.Id))
|
||||
_actionRecord[Data.MaxAiAction.Param.CityData.Id] = new List<AIActionBase>();
|
||||
_actionRecord[Data.MaxAiAction.Param.CityData.Id].Add(Data.MaxAiAction);
|
||||
}
|
||||
|
||||
public List<AIActionBase> GetCityActions(uint cid)
|
||||
{
|
||||
return _actionRecord.GetValueOrDefault(cid);
|
||||
}
|
||||
|
||||
public void GetPlayerStrategy(uint pid, out Strategy strategy)
|
||||
{
|
||||
strategy = Strategy.None;
|
||||
_playerStrategy.TryGetValue(pid, out strategy);
|
||||
}
|
||||
|
||||
public void GetUnitStrategy(uint uid, uint legion, uint playerId, out Strategy strategy, out uint cityId)
|
||||
{
|
||||
cityId = 0;
|
||||
strategy = Strategy.None;
|
||||
_unitTarget.TryGetValue(uid, out cityId);
|
||||
if (legion == 0 && !_unitStrategy.TryGetValue(uid, out strategy))return false;
|
||||
if (legion != 0 && !_legionStrategy.TryGetValue(legion * 10000 + playerId, out strategy))return false;
|
||||
return true;
|
||||
if (legion == 0 && !_unitStrategy.TryGetValue(uid, out strategy))return;
|
||||
if (legion != 0 && !_legionStrategy.TryGetValue(legion * 10000 + playerId, out strategy))return;
|
||||
}
|
||||
|
||||
public bool GetCityStrategy(uint cid, out Strategy strategy)
|
||||
public void GetCityStrategy(uint cid, out Strategy strategy)
|
||||
{
|
||||
strategy = Strategy.None;
|
||||
if (!_cityStrategy.TryGetValue(cid, out strategy)) return false;
|
||||
return true;
|
||||
_cityStrategy.TryGetValue(cid, out strategy);
|
||||
}
|
||||
|
||||
public void Update()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user