mirror of
https://github.com/bdunderscore/modular-avatar.git
synced 2024-12-29 18:55:06 +08:00
chore: update for NDMF API changes (#883)
This commit is contained in:
parent
628c07a505
commit
4c20d1e052
2
.github/ProjectRoot/vpm-manifest-2022.json
vendored
2
.github/ProjectRoot/vpm-manifest-2022.json
vendored
@ -19,7 +19,7 @@
|
|||||||
"dependencies": {}
|
"dependencies": {}
|
||||||
},
|
},
|
||||||
"nadena.dev.ndmf": {
|
"nadena.dev.ndmf": {
|
||||||
"version": "1.5.0-alpha.1"
|
"version": "1.5.0-alpha.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -37,15 +37,15 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ReactiveValue<IImmutableList<IImmutableList<Renderer>>> TargetGroups { get; } =
|
public ReactiveValue<ImmutableList<RenderGroup>> TargetGroups { get; } =
|
||||||
ReactiveValue<IImmutableList<IImmutableList<Renderer>>>.Create(
|
ReactiveValue<ImmutableList<RenderGroup>>.Create(
|
||||||
"Scale Adjuster: Find targets",
|
"Scale Adjuster: Find targets",
|
||||||
async ctx =>
|
async ctx =>
|
||||||
{
|
{
|
||||||
var scaleAdjusters = await ctx.Observe(CommonQueries.GetComponentsByType<ModularAvatarScaleAdjuster>());
|
var scaleAdjusters = await ctx.Observe(CommonQueries.GetComponentsByType<ModularAvatarScaleAdjuster>());
|
||||||
|
|
||||||
HashSet<Renderer> targets = new HashSet<Renderer>();
|
ImmutableList<RenderGroup>.Builder result = ImmutableList.CreateBuilder<RenderGroup>();
|
||||||
|
|
||||||
foreach (var adjuster in scaleAdjusters)
|
foreach (var adjuster in scaleAdjusters)
|
||||||
{
|
{
|
||||||
// Find parent object
|
// Find parent object
|
||||||
@ -57,14 +57,18 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
|
|
||||||
foreach (var renderer in renderers)
|
foreach (var renderer in renderers)
|
||||||
{
|
{
|
||||||
targets.Add(renderer);
|
if (renderer is SkinnedMeshRenderer smr)
|
||||||
|
{
|
||||||
|
result.Add(RenderGroup.For(renderer));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return targets.Select(r => (IImmutableList<Renderer>)ImmutableList.Create(r)).ToImmutableList();
|
return result.ToImmutable();
|
||||||
});
|
});
|
||||||
|
|
||||||
public Task<IRenderFilterNode> Instantiate(IEnumerable<(Renderer, Renderer)> proxyPairs, ComputeContext context)
|
public Task<IRenderFilterNode> Instantiate(RenderGroup group, IEnumerable<(Renderer, Renderer)> proxyPairs,
|
||||||
|
ComputeContext context)
|
||||||
{
|
{
|
||||||
return Task.FromResult((IRenderFilterNode)new ScaleAdjusterPreviewNode());
|
return Task.FromResult((IRenderFilterNode)new ScaleAdjusterPreviewNode());
|
||||||
}
|
}
|
||||||
@ -78,8 +82,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public ulong Reads => IRenderFilterNode.Shapes;
|
public RenderAspects Reads => RenderAspects.Shapes;
|
||||||
public ulong WhatChanged => IRenderFilterNode.Shapes;
|
public RenderAspects WhatChanged => RenderAspects.Shapes;
|
||||||
|
|
||||||
public void OnFrame(Renderer original, Renderer proxy)
|
public void OnFrame(Renderer original, Renderer proxy)
|
||||||
{
|
{
|
||||||
|
@ -17,61 +17,51 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
{
|
{
|
||||||
public class ShapeChangerPreview : IRenderFilter
|
public class ShapeChangerPreview : IRenderFilter
|
||||||
{
|
{
|
||||||
private static ReactiveValue<ImmutableDictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>>>
|
public ReactiveValue<ImmutableList<RenderGroup>> TargetGroups { get; }
|
||||||
InternalTargetGroups
|
= ReactiveValue<ImmutableList<RenderGroup>>.Create(
|
||||||
= ReactiveValue<ImmutableDictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>>>.Create(
|
|
||||||
"ShapeChangerPreview.TargetGroups", async ctx =>
|
|
||||||
{
|
|
||||||
var allChangers =
|
|
||||||
await ctx.Observe(CommonQueries.GetComponentsByType<ModularAvatarShapeChanger>());
|
|
||||||
|
|
||||||
Dictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>.Builder> groups =
|
|
||||||
new Dictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>.Builder>(
|
|
||||||
new ObjectIdentityComparer<Renderer>());
|
|
||||||
|
|
||||||
foreach (var changer in allChangers)
|
|
||||||
{
|
|
||||||
// TODO: observe avatar root
|
|
||||||
ctx.Observe(changer);
|
|
||||||
if (!ctx.ActiveAndEnabled(changer)) continue;
|
|
||||||
|
|
||||||
var target = ctx.Observe(changer.targetRenderer.Get(changer));
|
|
||||||
var renderer = ctx.GetComponent<SkinnedMeshRenderer>(target);
|
|
||||||
|
|
||||||
if (renderer == null) continue;
|
|
||||||
|
|
||||||
if (!groups.TryGetValue(renderer, out var group))
|
|
||||||
{
|
|
||||||
group = ImmutableList.CreateBuilder<ModularAvatarShapeChanger>();
|
|
||||||
groups[renderer] = group;
|
|
||||||
}
|
|
||||||
|
|
||||||
group.Add(changer);
|
|
||||||
}
|
|
||||||
|
|
||||||
return groups.ToImmutableDictionary(p => p.Key, p => p.Value.ToImmutable());
|
|
||||||
});
|
|
||||||
|
|
||||||
public ReactiveValue<IImmutableList<IImmutableList<Renderer>>> TargetGroups { get; } =
|
|
||||||
ReactiveValue<IImmutableList<IImmutableList<Renderer>>>.Create(
|
|
||||||
"ShapeChangerPreview.TargetGroups", async ctx =>
|
"ShapeChangerPreview.TargetGroups", async ctx =>
|
||||||
{
|
{
|
||||||
var targetGroups = await ctx.Observe(InternalTargetGroups);
|
var allChangers =
|
||||||
|
await ctx.Observe(CommonQueries.GetComponentsByType<ModularAvatarShapeChanger>());
|
||||||
|
|
||||||
return targetGroups.Keys
|
Dictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>.Builder> groups =
|
||||||
.Select(v => (IImmutableList<Renderer>)ImmutableList.Create(v))
|
new Dictionary<Renderer, ImmutableList<ModularAvatarShapeChanger>.Builder>(
|
||||||
|
new ObjectIdentityComparer<Renderer>());
|
||||||
|
|
||||||
|
foreach (var changer in allChangers)
|
||||||
|
{
|
||||||
|
// TODO: observe avatar root
|
||||||
|
ctx.Observe(changer);
|
||||||
|
if (!ctx.ActiveAndEnabled(changer)) continue;
|
||||||
|
|
||||||
|
var target = ctx.Observe(changer.targetRenderer.Get(changer));
|
||||||
|
var renderer = ctx.GetComponent<SkinnedMeshRenderer>(target);
|
||||||
|
|
||||||
|
if (renderer == null) continue;
|
||||||
|
|
||||||
|
if (!groups.TryGetValue(renderer, out var group))
|
||||||
|
{
|
||||||
|
group = ImmutableList.CreateBuilder<ModularAvatarShapeChanger>();
|
||||||
|
groups[renderer] = group;
|
||||||
|
}
|
||||||
|
|
||||||
|
group.Add(changer);
|
||||||
|
}
|
||||||
|
|
||||||
|
return groups.Select(g => RenderGroup.For(g.Key).WithData(g.Value.ToImmutable()))
|
||||||
.ToImmutableList();
|
.ToImmutableList();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
public async Task<IRenderFilterNode> Instantiate(
|
||||||
public async Task<IRenderFilterNode> Instantiate(IEnumerable<(Renderer, Renderer)> proxyPairs,
|
RenderGroup group,
|
||||||
|
IEnumerable<(Renderer, Renderer)> proxyPairs,
|
||||||
ComputeContext context)
|
ComputeContext context)
|
||||||
{
|
{
|
||||||
var node = new Node();
|
var node = new Node();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
await node.Init(proxyPairs, context);
|
await node.Init(group, proxyPairs, context);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
@ -101,16 +91,16 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task Init(IEnumerable<(Renderer, Renderer)> renderers, ComputeContext context)
|
public async Task Init(RenderGroup group, IEnumerable<(Renderer, Renderer)> renderers,
|
||||||
|
ComputeContext context)
|
||||||
{
|
{
|
||||||
var targetGroups = await context.Observe(InternalTargetGroups);
|
|
||||||
|
|
||||||
var (original, proxy) = renderers.First();
|
var (original, proxy) = renderers.First();
|
||||||
|
|
||||||
if (original == null || proxy == null) return;
|
if (original == null || proxy == null) return;
|
||||||
if (!targetGroups.TryGetValue(original, out _changers)) return;
|
|
||||||
if (!(proxy is SkinnedMeshRenderer smr)) return;
|
if (!(proxy is SkinnedMeshRenderer smr)) return;
|
||||||
|
|
||||||
|
_changers = group.GetData<ImmutableList<ModularAvatarShapeChanger>>();
|
||||||
|
|
||||||
HashSet<int> toDelete = new HashSet<int>();
|
HashSet<int> toDelete = new HashSet<int>();
|
||||||
var mesh = smr.sharedMesh;
|
var mesh = smr.sharedMesh;
|
||||||
|
|
||||||
@ -179,8 +169,8 @@ namespace nadena.dev.modular_avatar.core.editor
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public ulong Reads => IRenderFilterNode.Shapes | IRenderFilterNode.Mesh;
|
public RenderAspects Reads => RenderAspects.Shapes | RenderAspects.Mesh;
|
||||||
public ulong WhatChanged => IRenderFilterNode.Shapes | IRenderFilterNode.Mesh;
|
public RenderAspects WhatChanged => RenderAspects.Shapes | RenderAspects.Mesh;
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
|
@ -16,6 +16,6 @@
|
|||||||
},
|
},
|
||||||
"vpmDependencies": {
|
"vpmDependencies": {
|
||||||
"com.vrchat.avatars": ">=3.4.0",
|
"com.vrchat.avatars": ">=3.4.0",
|
||||||
"nadena.dev.ndmf": ">=1.5.0-alpha.1 <2.0.0-a"
|
"nadena.dev.ndmf": ">=1.5.0-alpha.2 <2.0.0-a"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user