增加自动调试版本

This commit is contained in:
wuwenbo 2025-07-09 17:29:36 +08:00
parent 4b91f841dc
commit 9e9da24d1d
11 changed files with 191 additions and 14 deletions

View File

@ -27,7 +27,7 @@ MonoBehaviour:
_version: 3.33
_category:
_comments:
_translation: {x: 443, y: 169}
_translation: {x: -215, y: 43}
_zoomFactor: 1
_haltSerialization: 0
_externalSerializationFile: {fileID: 0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,49 @@
/*
* @Author:
* @Description:
* @Date: 20250606 19:06:16
* @Modify:
*/
using System;
using Logic.AI;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
namespace NodeCanvas.Tasks.Actions
{
[Category("AIAction")]
[Serializable]
public class AIParamCityUnitCountLimit : ActionTask
{
public bool IsGreater;
public int Count;
protected override string info
{
get
{
if (IsGreater) return string.Format($" 城市人数大于 {Count}");
return string.Format($" 城市人数小于 {Count}");
}
}
protected override void OnExecute()
{
// 直接从Blackboard获取AICalculatorData
var data = blackboard.GetVariable<AICalculatorData>("Data");
if (data?.value?.TargetParam.CityData == null)
{
EndAction(false);
return;
}
var city = data.value.TargetParam.CityData;
var count = data.value.TargetParam.MapData.GetUnitCount(city.Id);
if (IsGreater) EndAction(count > Count);
else EndAction(count < Count);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 29d035e4d96c480f8094efcdb6370f03
timeCreated: 1752045507

View File

@ -0,0 +1,51 @@
/*
* @Author:
* @Description:
* @Date: 20250606 19:06:16
* @Modify:
*/
using System;
using System.Collections.Generic;
using Logic.AI;
using NodeCanvas.Framework;
using ParadoxNotion.Design;
using RuntimeData;
namespace NodeCanvas.Tasks.Actions
{
[Category("AIAction")]
[Serializable]
public class AIParamCityUnitRatio : ActionTask
{
public bool IsGreater;
public float Ratio;
protected override string info
{
get
{
if (IsGreater) return string.Format($" 城市人数大于 {Ratio}%");
return string.Format($" 城市人数小于 {Ratio}%");
}
}
protected override void OnExecute()
{
// 直接从Blackboard获取AICalculatorData
var data = blackboard.GetVariable<AICalculatorData>("Data");
if (data?.value?.TargetParam.CityData == null)
{
EndAction(false);
return;
}
var city = data.value.TargetParam.CityData;
var ratio = data.value.TargetParam.MapData.GetUnitCount(city.Id) / city.Level;
if (IsGreater) EndAction(ratio > Ratio);
else EndAction(ratio < Ratio);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: abb10756c33f47afb2658b47439ba2c7
timeCreated: 1752045263

View File

@ -1536,8 +1536,8 @@ namespace Logic.AI
var dis = Map.GridMap.CalcDistance(unitGrid, cityGrid);
ratio = dis switch
{
0 => 3,
1 => 2,
0 => 4,
1 => 3,
2 => 1,
3 => 0,
_ => ratio
@ -1553,8 +1553,8 @@ namespace Logic.AI
var dis = Map.GridMap.CalcDistance(unitGrid, cityGrid);
ratio = dis switch
{
0 => 3,
1 => 2,
0 => 4,
1 => 3,
2 => 1,
3 => 0,
_ => ratio

View File

@ -0,0 +1,47 @@
using UnityEditor;
using UnityEngine;
namespace Logic.Editor
{
public class BuildManager
{
// 定义宏名称
public const string GAME_AUTO_DEBUG = "GAME_AUTO_DEBUG";
// 添加宏定义
[MenuItem("Build/开启全自动模式")]
public static void AddMacro()
{
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
if (!defines.Contains(GAME_AUTO_DEBUG))
{
defines = string.IsNullOrEmpty(defines)
? GAME_AUTO_DEBUG
: defines + ";" + GAME_AUTO_DEBUG;
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, defines);
}
}
// 移除宏定义
[MenuItem("Build/关闭全自动模式")]
public static void RemoveMacro()
{
string defines = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone);
if (defines.Contains(GAME_AUTO_DEBUG))
{
defines = defines.Replace($"{GAME_AUTO_DEBUG};", "")
.Replace($";{GAME_AUTO_DEBUG}", "")
.Replace(GAME_AUTO_DEBUG, "")
.Replace(";;", ";")
.Trim(';');
PlayerSettings.SetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone, defines);
}
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8640a67a3b834c90bf7ce4a9063fc7c1
timeCreated: 1752049414

View File

@ -111,6 +111,8 @@ namespace Logic
public class PlayerRoundState : GameStateBase
{
private AILogic _aiLogic;
public PlayerRoundState(GameLogic gameLogic) : base(gameLogic)
{
@ -131,8 +133,6 @@ namespace Logic
_gameLogic.Main.MapData.CityMap.OnTurnStart(_gameLogic.Main.MapData, _curPlayer);
_gameLogic.Main.MapData.UnitMap.OnTurnStart(_gameLogic.Main.MapData, _curPlayer);
_gameLogic.Main.MapData.GridMap.OnTurnStart(_gameLogic.Main.MapData);
_gameLogic.Main.UIManager.EndTurn();
_gameLogic.Main.UIManager.AIPlayingHint.SetActive(false);
@ -143,6 +143,10 @@ namespace Logic
//uiManager.EndTurn();
PlayerPrefs.SetInt("Archive", 1);
MapData.SaveMapData(_gameLogic.Main.MapData);
#if GAME_AUTO_DEBUG
_aiLogic = new AILogic();
#endif
}
@ -154,7 +158,6 @@ namespace Logic
// TODO endturn逻辑要重新梳理
Main.PlayerLogic.EndThisTurn(_gameLogic.Main.MapData, _gameLogic.Main.MapData.PlayerMap.SelfPlayerData);
//处理当前每一个unit的回合结束前自动行为。每一个选手回合结束自动回血是在这个阶段出发的
foreach (var unitData in _gameLogic.Main.MapData.UnitMap.UnitList)
if(_gameLogic.Main.MapData.GetPlayerDataByUnitId(unitData.Id,out var player)
@ -169,7 +172,25 @@ namespace Logic
public override void Update()
{
#if GAME_AUTO_DEBUG
if (_aiLogic.AILogicState == AILogicState.Finished)
{
_gameLogic.ChangeState(GameState.AIRound);
return;
}
if (_aiLogic.AILogicState == AILogicState.Prepare)
{
_curPlayer.PlayerWealth += (int)_curPlayer.Turn / 10;
_gameLogic.Main.MapData.PlayerMap.OnTurnStart(_gameLogic.Main.MapData, _curPlayer);
_gameLogic.Main.MapData.CityMap.OnTurnStart(_gameLogic.Main.MapData, _curPlayer);
_gameLogic.Main.MapData.UnitMap.OnTurnStart(_gameLogic.Main.MapData, _curPlayer);
_gameLogic.Main.MapData.GridMap.OnTurnStart(_gameLogic.Main.MapData);
_aiLogic.StartAILogic(_gameLogic.Main.MapData, _curPlayer);
}
_aiLogic.Update();
#endif
}
}