feat(ai): 新增 IBossControl facet——Boss 阶段状态经 IAiContext 供图读取
非 Boss 敌人访问 IAiContext.Boss 显式抛 InvalidOperationException, 不返回空对象掩盖小怪图误挂 Boss 边的错误。BossResource 补 IsFull 供图条件边判定。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,46 @@
|
||||
using System;
|
||||
using NUnit.Framework;
|
||||
using UnityEngine;
|
||||
using UnityEngine.TestTools;
|
||||
using BaseGames.Enemies;
|
||||
|
||||
namespace BaseGames.Tests.EditMode.Enemies
|
||||
{
|
||||
public class EnemyBrainContextBossFacetTests
|
||||
{
|
||||
// EnemyBase.Awake 会对缺失的碰撞体/引用报错,这些与本测试无关。
|
||||
[SetUp] public void SetUp() => LogAssert.ignoreFailingMessages = true;
|
||||
[TearDown] public void TearDown() => LogAssert.ignoreFailingMessages = false;
|
||||
|
||||
static T MakeEnemy<T>(string name) where T : EnemyBase
|
||||
{
|
||||
var go = new GameObject(name);
|
||||
return go.AddComponent<T>();
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void NonBoss_AccessingBossFacet_Throws()
|
||||
{
|
||||
var enemy = MakeEnemy<EnemyBase>("plain-enemy");
|
||||
var ctx = new EnemyBrainContext(enemy);
|
||||
|
||||
Assert.Throws<InvalidOperationException>(() => { var _ = ctx.Boss; });
|
||||
|
||||
UnityEngine.Object.DestroyImmediate(enemy.gameObject);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void Boss_AccessingBossFacet_ReturnsTheBoss()
|
||||
{
|
||||
var boss = MakeEnemy<BossBase>("boss");
|
||||
var ctx = new EnemyBrainContext(boss);
|
||||
|
||||
Assert.AreSame(boss, ctx.Boss);
|
||||
Assert.AreEqual(0, ctx.Boss.CurrentPhase);
|
||||
Assert.IsFalse(ctx.Boss.IsPhaseTransitioning);
|
||||
Assert.IsFalse(ctx.Boss.ResourceFull); // 未挂 BossResource
|
||||
|
||||
UnityEngine.Object.DestroyImmediate(boss.gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 90d0535e362d3b9469d2c91a70c4c8ca
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user