This commit is contained in:
daixiawu 2025-07-28 15:06:09 +08:00
commit 0613c06458
12 changed files with 54 additions and 70 deletions

View File

@ -40,7 +40,7 @@ namespace NodeCanvas.Tasks.Actions
var action = ActionLogicFactory.GetActionLogic(actionId);
if (action.CheckCan(data.value.TargetParam))
{
action.Execute(data.value.TargetParam);
action.Execute(data.value.TargetParam, false);
EndAction(true);
return;
}

View File

@ -35,6 +35,7 @@ namespace NodeCanvas.Tasks.Actions
data.value.MaxAiAction.Param.MapData = data.value.Map;
data.value.MaxAiAction.Param.RefreshParams();
data.value.MaxAiAction.CheckIsActionInPlayerSight();
data.value.MaxAiAction.CheckIsActionDuration();
if (data.value.MaxAiAction.IsInSight)
data.value.MaxAiAction.ActionLogic.CameraControl(data.value.MaxAiAction.Param);
EndAction(true);

View File

@ -85,12 +85,7 @@ namespace RuntimeData
{
var units = new HashSet<UnitData>();
map.GetUnitDataListByPlayerId(player.Id, units);
foreach (var unit in UnitList)
{
if (!units.Contains(unit)) continue;
unit.OnTurnStart(map);
}
foreach (var unit in units) unit.OnTurnStart(map);
}
public void OnTurnEnd(MapData map, PlayerData player)
@ -98,11 +93,7 @@ namespace RuntimeData
var units = new HashSet<UnitData>();
map.GetUnitDataListByPlayerId(player.Id, units);
foreach (var unit in UnitList)
{
if (!units.Contains(unit)) continue;
unit.OnTurnEnd(map);
}
foreach (var unit in units) unit.OnTurnEnd(map);
}
// 新建小兵

View File

@ -1776,11 +1776,6 @@ namespace Logic.AI
public void CheckIsActionInPlayerSight()
{
IsInSight = true;
if (ActionLogic.ActionId.ActionType == CommonActionType.UnitAttack)
{
Duration = ActionLogic.Duration;
return;
}
var player = Param.MapData.PlayerMap.SelfPlayerData;
if (Param.MapData.GridMap.GetGridDataByGid(Param.GridId, out var grid)
&& player.Sight.CheckIsInSight(grid.Id)) return;
@ -1793,6 +1788,22 @@ namespace Logic.AI
IsInSight = false;
}
public void CheckIsActionDuration()
{
if (!IsInSight)
{
Duration = 0.04f;
return;
}
if (ActionLogic.ActionId.ActionType == CommonActionType.UnitAttack)
{
Duration = ActionLogic.Duration;
return;
}
Duration = Table.Instance.AnimDataAssets.AIBeforeAnimWaitTime;
}
public string DebugInfo()
{
if (ActionLogic.ActionId.ActionType == CommonActionType.Gain || ActionLogic.ActionId.ActionType == CommonActionType.Build || ActionLogic.ActionId.ActionType == CommonActionType.BuildWonder)

View File

@ -117,7 +117,7 @@ namespace Logic.AI
calMap.DeepCopy(mapData);
aiAction.Param.MapData = calMap;
aiAction.Param.RefreshParams();
aiAction.ActionLogic.Execute(aiAction.Param);
aiAction.ActionLogic.Execute(aiAction.Param, true);
aiAction.Result = CalculateScore(aiAction.Param.MapData, player, cfg);
// 科技类行为要计算下科技额外收益
@ -573,7 +573,7 @@ namespace Logic.AI
calMap.DeepCopy(data.Map);
aiAction.Param.MapData = calMap;
aiAction.Param.RefreshParams();
aiAction.ActionLogic.Execute(aiAction.Param);
aiAction.ActionLogic.Execute(aiAction.Param, true);
aiAction.Result = CalculateAIActionScore(data, aiAction.Param, types);
var scoreOffset = aiAction.Result.GetAllScore() - startResult.GetAllScore();

View File

@ -43,7 +43,6 @@ namespace Logic.AI
public AILogicState AILogicState;
private float _targetTime;
private float _excuteTime;
private AIActionScoreCalculator _scoreCalculator;
private AIActionGenerator _generator;
@ -104,23 +103,6 @@ namespace Logic.AI
{
if (AILogicState == AILogicState.Finished || AILogicState == AILogicState.Prepare) return;
if (AILogicState == AILogicState.PrePlay)
{
if (Time.time < _excuteTime) return;
if (_data.MaxAiAction == null)
{
AILogicState = AILogicState.Playing;
return;
}
_data.MaxAiAction.ActionLogic.Execute(_data.MaxAiAction.Param);
var animTime = _data.MaxAiAction.ActionLogic.GetAnimTime(_data.MaxAiAction.Param);
if (!_data.MaxAiAction.IsInSight) _targetTime = Time.time + 0.04f;
else _targetTime = Time.time + animTime;
MainEditor.Instance.OnActionExcuted();
_data.MaxAiAction = null;
AILogicState = AILogicState.Pausing;
}
if (AILogicState == AILogicState.Pausing)
{
if (Time.time > _targetTime) AILogicState = AILogicState.Playing;
@ -152,14 +134,11 @@ namespace Logic.AI
if (_data.MaxAiAction == null || index > 100) AILogicState = AILogicState.Finished;
else
{
if (_data.MaxAiAction.IsInSight)
{
if (_data.MaxAiAction.Duration == 0)
_excuteTime = Time.time + Table.Instance.AnimDataAssets.AIBeforeAnimWaitTime;
else _excuteTime = Time.time + _data.MaxAiAction.Duration;
}
else _excuteTime = Time.time;
AILogicState = AILogicState.PrePlay;
_data.MaxAiAction.ActionLogic.Execute(_data.MaxAiAction.Param, !_data.MaxAiAction.IsInSight);
_targetTime = Time.time + _data.MaxAiAction.Duration;
MainEditor.Instance.OnActionExcuted();
_data.MaxAiAction = null;
AILogicState = AILogicState.Pausing;
}
}

View File

@ -674,7 +674,7 @@ namespace Logic.Action
return 1f;
}
public abstract bool Execute(CommonActionParams actionParams);
public abstract bool Execute(CommonActionParams actionParams, bool isMoment);
public abstract bool CheckCan(CommonActionParams actionParams);
@ -694,7 +694,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if(!actionParams.MapData.GetCityDataByTerritoryGid(actionParams.GridData.Id,out var city))
return false;
@ -804,7 +804,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
CityData cityData = actionParams.CityData;
if (cityData == null)
@ -912,7 +912,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
CityData cityData = actionParams.CityData;
//鲁棒性用
@ -1413,7 +1413,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if (_actionId.UnitType == UnitType.None)
return false;
@ -1788,7 +1788,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
//鲁棒性判断
if (actionParams.UnitData == null) return false;
@ -2370,7 +2370,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
//鲁棒性判断
if (actionParams.CityData == null) return false;
@ -2507,7 +2507,7 @@ namespace Logic.Action
{
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if (actionParams.MapData.GetGridDataByUnitId(actionParams.UnitData.Id, out var unitGrid))
{
@ -2552,9 +2552,9 @@ namespace Logic.Action
{
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
Main.UnitLogic.Attack(actionParams.MapData, actionParams.UnitData, actionParams.TargetUnitData, out _duration);
Main.UnitLogic.Attack(actionParams.MapData, actionParams.UnitData, actionParams.TargetUnitData, out _duration, isMoment);
return true;
}
@ -2600,7 +2600,7 @@ namespace Logic.Action
{
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
return false;
}
@ -2622,7 +2622,7 @@ namespace Logic.Action
{
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
return false;
}
@ -2645,7 +2645,7 @@ namespace Logic.Action
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if (actionParams.PlayerData == null || actionParams.GridData == null)
return false;
@ -2872,7 +2872,7 @@ namespace Logic.Action
{
}
public override bool Execute(CommonActionParams actionParams)
public override bool Execute(CommonActionParams actionParams, bool isMoment)
{
if (actionParams.MainObjectType != MainObjectType.Player)
return false;

View File

@ -126,6 +126,7 @@ namespace Logic
//gameLogic.EndTurn();
//uiManager.EndTurn();
PlayerPrefs.SetInt("Archive", 1);
PlayerPrefs.Save();
MapData.SaveMapData(Main.MapData);
AchievementDataManager.Instance.OnTurnStart(Main.MapData, _curPlayer);
@ -211,6 +212,7 @@ namespace Logic
public override void End()
{
_curPlayer = null;
_aiLogic.FinishAILogic();
TryTurnEndCurPlayerTurn();
}

View File

@ -14,7 +14,7 @@ namespace Logic
{
bool MoveTo(MapData mapData, UnitData unitData, GridData gridData, MoveType moveType);
//unit[uid]移动到grid[pos]
bool Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB, out float duration);
bool Attack(MapData mapData, UnitData unitDataA, UnitData unitDataB, out float duration, bool isMoment=false);
//unit[A]攻击unit[B]
void Upgrade(MapData mapData, UnitData unitData);
//unit[uid]升级

View File

@ -53,7 +53,7 @@ namespace Logic
{
float[,] MoveInfoCostMap;
float[,] MoveInfoMap;
public UnitLogic()
{
@ -208,7 +208,7 @@ namespace Logic
return counterAttackBack;
}
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2, out float duration)
public bool Attack(MapData mapData, UnitData unit1, UnitData unit2, out float duration, bool isMoment=false)
{
duration = 0;
if (!mapData.GetPlayerDataByUnitId(unit1.Id, out var player1)) return false;
@ -277,8 +277,8 @@ namespace Logic
fragment.OriginPlayer = player1;
fragment.TargetPlayer = player2;
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
if (isMoment) fragment.Excute();
else TimelineManager.Instance.AddFragment(fragment);
}
else
{
@ -295,8 +295,8 @@ namespace Logic
fragment.AttackTime = attackWait;
fragment.AttackBackTime = attackBack;
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
if (isMoment) fragment.Excute();
else TimelineManager.Instance.AddFragment(fragment);
}
}
//如果杀不死对方
@ -319,8 +319,8 @@ namespace Logic
fragment.CounterAttackWait = counterAttackWait;
fragment.CounterAttackBack = counterAttackBack;
duration = fragment.Duration;
if (mapData == Main.MapData) TimelineManager.Instance.AddFragment(fragment);
else fragment.Excute();
if (isMoment) fragment.Excute();
else TimelineManager.Instance.AddFragment(fragment);
}
return true;
}

View File

@ -570,7 +570,7 @@ public class BottomInfoUI// : MonoBehaviour
//Debug.Log($"{actionId.ActionType},{actionId.WonderType},{actionId.ResourceType},{actionId.FeatureType},{actionId.UnitType},{actionId.Vegetation}");
//如果成功执行,隐藏当前面板
if (ActionLogicFactory.GetActionLogic(fakeActionId).Execute(actionParams))
if (ActionLogicFactory.GetActionLogic(fakeActionId).Execute(actionParams, false))
{
SetBottomInfoHide();
_main.MapInteractionLogic.CancelAllHighlight();

View File

@ -97,7 +97,7 @@ public class CityUpgradeActionUI
var fakeActionId = clickedItem.GetComponent<ActionIdMono>().ActionId;
var commonActionParams = new CommonActionParams(mapData:MapData,playerData:MapData.PlayerMap.SelfPlayerData,
cityData:_cityData,mainObjectType:MainObjectType.City);
if(ActionLogicFactory.GetActionLogic(fakeActionId).Execute(commonActionParams))
if(ActionLogicFactory.GetActionLogic(fakeActionId).Execute(commonActionParams, false))
FadeOut();
}