行为树

This commit is contained in:
wuwenbo 2025-06-19 21:48:50 +08:00
parent 92ff20e5c1
commit d4877d80ef
7 changed files with 48 additions and 30 deletions

View File

@ -7,6 +7,7 @@
using System.Linq;
using Logic.Action;
using Logic.AI;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
@ -50,6 +51,7 @@ namespace NodeCanvas.Tasks.Actions
data.value.ForeachLegion.RemoveAt(0);
}
data.value.TargetParam = new CommonActionParams();
data.value.TargetParam.MapData = data.value.Map;
data.value.TargetParam.PlayerData = data.value.Player;
if (data.value.ForeachCity.Count != 0) data.value.TargetParam.CityData = data.value.ForeachCity[0];

View File

@ -36,6 +36,8 @@ namespace NodeCanvas.Tasks.Actions
return;
}
data.value.AIActions.Clear();
data.value.MaxAiAction = null;
foreach (var actionType in ActionTypes)AIActionGenerator.GeneratorActionIds(data.value, actionType);
if (data.value.AIActions.Count == 0)
{

View File

@ -196,7 +196,20 @@ namespace RuntimeData
// 是否存活
public bool Alive;
// 财富总额
public int PlayerWealth;
public int PlayerWealth2;
public int PlayerWealth
{
get => PlayerWealth2;
set
{
PlayerWealth2 = value;
if (PlayerWealth2 < 0)
{
Debug.Log(111);
}
}
}
//分数
public int PlayerScore;
@ -258,7 +271,7 @@ namespace RuntimeData
PlayerForceId = copyData.PlayerForceId;
CradleCityId = copyData.CradleCityId;
Alive = copyData.Alive;
PlayerWealth = copyData.PlayerWealth;
PlayerWealth2 = copyData.PlayerWealth2;
Sight = new MapSightData(copyData.Sight);
TechTree = new TechTreeData(copyData.TechTree);
@ -286,7 +299,7 @@ namespace RuntimeData
PlayerForceId = copyData.PlayerForceId;
CradleCityId = copyData.CradleCityId;
Alive = copyData.Alive;
PlayerWealth = copyData.PlayerWealth;
PlayerWealth2 = copyData.PlayerWealth2;
Sight.DeepCopy(copyData.Sight);
TechTree.DeepCopy(copyData.TechTree);
@ -318,7 +331,7 @@ namespace RuntimeData
private void InitData(uint civId,uint forceId)
{
Alive = true;
PlayerWealth = 5;
PlayerWealth2 = 5;
PlayerCivId = civId;
PlayerForceId = forceId;

View File

@ -283,6 +283,7 @@ namespace Logic.AI
TargetParam = new CommonActionParams();
TargetParam.MapData = Map;
TargetParam.PlayerData = Player;
TargetParam.OnParamChanged();
}
// 计算军团战略

View File

@ -330,6 +330,7 @@ namespace Logic.AI
var result = Main.UnitLogic.CheckUnitCanMoveOrAttack(data.Map, data.TargetParam.UnitData, grid);
if (result != MoveAttackType.Move && result != MoveAttackType.MoveToPort && result != MoveAttackType.MoveAshore) continue;
if (data.TargetParam.UnitData.MP <= 0) continue;
data.TargetParam.GridData = grid;
data.TargetParam.OnParamChanged();
foreach (var action in actions)

View File

@ -665,34 +665,34 @@ namespace Logic.AI
var result = new CalculateResult();
foreach (var type in types)
{
if (type == CalculateType.PlayerTechDefend) CalculatePlayerTechDefend(data, data.TargetParam, result);
if (type == CalculateType.PlayerTechAttack) CalculatePlayerTechDefend(data, data.TargetParam, result);
if (type == CalculateType.PlayerTechScore) CalculatePlayerTechDefend(data, data.TargetParam, result);
if (type == CalculateType.PlayerTechDefend) CalculatePlayerTechDefend(data, param, result);
if (type == CalculateType.PlayerTechAttack) CalculatePlayerTechDefend(data, param, result);
if (type == CalculateType.PlayerTechScore) CalculatePlayerTechDefend(data, param, result);
if (type == CalculateType.CityLevelUpDefend) CalculateCityLevelUpDefend(data, data.TargetParam, result);
if (type == CalculateType.CityTrainDefend) CalculateCityTrainDefend(data, data.TargetParam, result);
if (type == CalculateType.CityTrainAttack) CalculateCityTrainAttack(data, data.TargetParam, result);
if (type == CalculateType.CityDevelopment) CalculateCityDevelopment(data, data.TargetParam, result);
if (type == CalculateType.CityLevelUpDefend) CalculateCityLevelUpDefend(data, param, result);
if (type == CalculateType.CityTrainDefend) CalculateCityTrainDefend(data, param, result);
if (type == CalculateType.CityTrainAttack) CalculateCityTrainAttack(data, param, result);
if (type == CalculateType.CityDevelopment) CalculateCityDevelopment(data, param, result);
if (type == CalculateType.LegionDefendKill) CalculateLegionDefendKill(data, data.TargetParam, result);
if (type == CalculateType.LegionDefendMove) CalculateLegionDefendMove(data, data.TargetParam, result);
if (type == CalculateType.LegionDefendAttack) CalculateLegionDefendAttack(data, data.TargetParam, result);
if (type == CalculateType.LegionDefendMoveForTrain) CalculateLegionDefendMoveForTrain(data, data.TargetParam, result);
if (type == CalculateType.LegionDefendKill) CalculateLegionDefendKill(data, param, result);
if (type == CalculateType.LegionDefendMove) CalculateLegionDefendMove(data, param, result);
if (type == CalculateType.LegionDefendAttack) CalculateLegionDefendAttack(data, param, result);
if (type == CalculateType.LegionDefendMoveForTrain) CalculateLegionDefendMoveForTrain(data, param, result);
if (type == CalculateType.UnitRecovery) CalculateUnitRecovery(data, data.TargetParam, result);
if (type == CalculateType.UnitAttackCityCenter) CalculateUnitAttackCityCenter(data, data.TargetParam, result);
if (type == CalculateType.UnitExplore) CalculateExplore(data, data.TargetParam, result);
if (type == CalculateType.UnitRetreat) CalculateUnitRetreat(data, data.TargetParam, result);
if (type == CalculateType.UnitMoveToTargetGrid) CalculateUnitMoveToTargetGrid(data, data.TargetParam, result);
if (type == CalculateType.UnitKill) CalculateUnitKill(data, data.TargetParam, result);
if (type == CalculateType.UnitRecovery) CalculateUnitRecovery(data, param, result);
if (type == CalculateType.UnitAttackCityCenter) CalculateUnitAttackCityCenter(data, param, result);
if (type == CalculateType.UnitExplore) CalculateExplore(data, param, result);
if (type == CalculateType.UnitRetreat) CalculateUnitRetreat(data, param, result);
if (type == CalculateType.UnitMoveToTargetGrid) CalculateUnitMoveToTargetGrid(data, param, result);
if (type == CalculateType.UnitKill) CalculateUnitKill(data, param, result);
if (type == CalculateType.LegionAttackMoveToCity) CalculateLegionAttackMoveToCity(data, data.TargetParam, result);
if (type == CalculateType.LegionAttackMoveToCity) CalculateLegionAttackMoveToCity(data, param, result);
if (type == CalculateType.LegionDevelopmentMoveToCityTerritory) CalculateLegionDevelopmentMoveToCityTerritory(data, data.TargetParam, result);
if (type == CalculateType.LegionDevelopmentKill) CalculateLegionDevelopmentKill(data, data.TargetParam, result);
if (type == CalculateType.LegionDevelopmentMoveToCity) CalculateLegionDevelopmentMoveToCity(data, data.TargetParam, result);
if (type == CalculateType.LegionDevelopmentAttackUnit) CalculateLegionDevelopmentAttackUnit(data, data.TargetParam, result);
if (type == CalculateType.LegionDevelopmentMoveToOtherCity) CalculateLegionDevelopmentMoveToOtherCity(data, data.TargetParam, result);
if (type == CalculateType.LegionDevelopmentMoveToCityTerritory) CalculateLegionDevelopmentMoveToCityTerritory(data, param, result);
if (type == CalculateType.LegionDevelopmentKill) CalculateLegionDevelopmentKill(data, param, result);
if (type == CalculateType.LegionDevelopmentMoveToCity) CalculateLegionDevelopmentMoveToCity(data, param, result);
if (type == CalculateType.LegionDevelopmentAttackUnit) CalculateLegionDevelopmentAttackUnit(data, param, result);
if (type == CalculateType.LegionDevelopmentMoveToOtherCity) CalculateLegionDevelopmentMoveToOtherCity(data, param, result);
}
return result;

View File

@ -137,7 +137,6 @@ namespace Logic.Action
param.GridId = GridId;
param.TargetUnitId = TargetUnitId;
param.TargetGridId = TargetGridId;
RefreshParams();
return param;
}
}