feat: add actor behavior example config
This commit is contained in:
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"type": "fighter",
|
||||||
|
"version": 1,
|
||||||
|
"buffs": [
|
||||||
|
{
|
||||||
|
"id": "slow_01",
|
||||||
|
"duration": 3.0,
|
||||||
|
"tickInterval": 1.0,
|
||||||
|
"repeatCount": 3,
|
||||||
|
"stacking": "RefreshDuration",
|
||||||
|
"logicEffects": [
|
||||||
|
{
|
||||||
|
"id": "slow_tick",
|
||||||
|
"shape": "Locked",
|
||||||
|
"target": "Owner",
|
||||||
|
"effects": [
|
||||||
|
{ "type": "Attribute", "attribute": "moveSpeed", "value": -0.2 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
"type": "fighter",
|
||||||
|
"version": 1,
|
||||||
|
"flyObjects": [
|
||||||
|
{
|
||||||
|
"id": "blade_wave",
|
||||||
|
"duration": 1.5,
|
||||||
|
"movement": { "kind": "Line", "speed": 6.0 },
|
||||||
|
"collision": { "shape": "Sphere", "radius": 0.4, "hitLimit": 1 },
|
||||||
|
"timeline": [
|
||||||
|
{ "time": 0.0, "kind": "Effect", "prefab": "Assets/Game/Art/Effect/blade_wave.prefab", "duration": 1.5 },
|
||||||
|
{ "time": 0.0, "kind": "LogicEffect", "effectId": "blade_wave_hit", "trigger": "OnCollision" }
|
||||||
|
],
|
||||||
|
"logicEffects": [
|
||||||
|
{
|
||||||
|
"id": "blade_wave_hit",
|
||||||
|
"shape": "Locked",
|
||||||
|
"target": "HitActor",
|
||||||
|
"effects": [
|
||||||
|
{ "type": "Attribute", "attribute": "hp", "value": -20 },
|
||||||
|
{ "type": "Buff", "buffId": "slow_01" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"type": "fighter",
|
||||||
|
"version": 1,
|
||||||
|
"behaviors": [
|
||||||
|
{
|
||||||
|
"id": "slash",
|
||||||
|
"duration": 0.8,
|
||||||
|
"canBeInterrupted": true,
|
||||||
|
"input": "DirectionOrTarget",
|
||||||
|
"timeline": [
|
||||||
|
{ "time": 0.0, "kind": "Animation", "animation": "slash_01", "duration": 0.8 },
|
||||||
|
{ "time": 0.12, "kind": "Effect", "prefab": "Assets/Game/Art/Effect/slash.prefab", "duration": 0.5 },
|
||||||
|
{ "time": 0.25, "kind": "LogicEffect", "effectId": "slash_hit" },
|
||||||
|
{ "time": 0.32, "kind": "Projectile", "flyObjectId": "blade_wave" }
|
||||||
|
],
|
||||||
|
"logicEffects": [
|
||||||
|
{
|
||||||
|
"id": "slash_hit",
|
||||||
|
"shape": "Sector",
|
||||||
|
"radius": 2.4,
|
||||||
|
"angle": 90,
|
||||||
|
"target": "Enemy",
|
||||||
|
"effects": [
|
||||||
|
{ "type": "Attribute", "attribute": "hp", "value": -30 }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -44,6 +44,36 @@ namespace XWorld.Framework.Tests.ActorBehavior
|
|||||||
|
|
||||||
Assert.Contains("missing_wave", ex.Message);
|
Assert.Contains("missing_wave", ex.Message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void ExampleConfigFiles_LoadFromRepository()
|
||||||
|
{
|
||||||
|
string root = FindRepoRoot();
|
||||||
|
string dir = System.IO.Path.Combine(root, "Client", "Assets", "Resources", "Config", "ActorBehavior");
|
||||||
|
|
||||||
|
BehaviorConfigCatalog catalog = BehaviorConfigCatalog.LoadFromJson(
|
||||||
|
"fighter",
|
||||||
|
System.IO.File.ReadAllText(System.IO.Path.Combine(dir, "fighter_skill.json")),
|
||||||
|
System.IO.File.ReadAllText(System.IO.Path.Combine(dir, "fighter_flyobj.json")),
|
||||||
|
System.IO.File.ReadAllText(System.IO.Path.Combine(dir, "fighter_buff.json")));
|
||||||
|
|
||||||
|
Assert.True(catalog.Behaviors.ContainsKey("slash"));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string FindRepoRoot()
|
||||||
|
{
|
||||||
|
string? dir = AppContext.BaseDirectory;
|
||||||
|
while (dir != null)
|
||||||
|
{
|
||||||
|
string gitPath = System.IO.Path.Combine(dir, ".git");
|
||||||
|
if (System.IO.Directory.Exists(gitPath) || System.IO.File.Exists(gitPath))
|
||||||
|
{
|
||||||
|
return dir;
|
||||||
|
}
|
||||||
|
dir = System.IO.Directory.GetParent(dir)?.FullName;
|
||||||
|
}
|
||||||
|
throw new InvalidOperationException("repo root not found");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static class TestBehaviorJson
|
internal static class TestBehaviorJson
|
||||||
|
|||||||
Reference in New Issue
Block a user