Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Warning instead of IndexOutOfBoundsException #786

Merged
merged 7 commits into from
Dec 9, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
106 changes: 72 additions & 34 deletions Editor/APIInternal/ComponentInfos.VRCSDK.cs
Original file line number Diff line number Diff line change
@@ -55,23 +55,38 @@ protected override void CollectMutations(T component, ComponentMutationsCollecto
case VRC_AvatarDescriptor.LipSyncStyle.JawFlapBone:
collector.TransformRotation(component.lipSyncJawBone);
break;
case VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape when component.VisemeSkinnedMesh != null:
case VRC_AvatarDescriptor.LipSyncStyle.JawFlapBlendShape:
{
collector.ModifyProperties(component.VisemeSkinnedMesh,
$"blendShape.{component.MouthOpenBlendShapeName}");
if (component.VisemeSkinnedMesh != null)
{
collector.ModifyProperties(component.VisemeSkinnedMesh,
$"blendShape.{component.MouthOpenBlendShapeName}");
} else {
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:NoVisemeSkinnedMesh")
?.WithContext(component);
}
break;
}
case VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape when component.VisemeSkinnedMesh != null:
case VRC_AvatarDescriptor.LipSyncStyle.VisemeBlendShape:
{
collector.ModifyProperties(component.VisemeSkinnedMesh,
component.VisemeBlendShapes.Select(blendShape => $"blendShape.{blendShape}"));
if (component.VisemeSkinnedMesh != null)
{
collector.ModifyProperties(component.VisemeSkinnedMesh,
component.VisemeBlendShapes.Select(blendShape => $"blendShape.{blendShape}"));
} else {
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:NoVisemeSkinnedMesh")
?.WithContext(component);
}
break;
}
case VRC_AvatarDescriptor.LipSyncStyle.VisemeParameterOnly:
// NOP
break;
default:
throw new ArgumentOutOfRangeException();
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:UnknownLipSyncStyle",
component.lipSync.ToString())
?.WithContext(component);
break;
}
}

@@ -122,7 +137,8 @@ protected override void ApplySpecialMapping(T component, MappingSource mappingSo
// NOP
break;
default:
throw new ArgumentOutOfRangeException();
// Warning Reported in CollectMutations
break;
}
}

@@ -141,21 +157,21 @@ protected override void CollectDependency(VRCAvatarDescriptor component,
{
base.CollectDependency(component, collector);

AddCollider(component.collider_head);
AddCollider(component.collider_torso);
AddCollider(component.collider_footR);
AddCollider(component.collider_footL);
AddCollider(component.collider_handR);
AddCollider(component.collider_handL);
AddCollider(component.collider_fingerIndexL);
AddCollider(component.collider_fingerMiddleL);
AddCollider(component.collider_fingerRingL);
AddCollider(component.collider_fingerLittleL);
AddCollider(component.collider_fingerIndexR);
AddCollider(component.collider_fingerMiddleR);
AddCollider(component.collider_fingerRingR);
AddCollider(component.collider_fingerLittleR);
void AddCollider(VRCAvatarDescriptor.ColliderConfig collider)
AddCollider(component.collider_head, "Head");
AddCollider(component.collider_torso, "Torso");
AddCollider(component.collider_footR, "FootR");
AddCollider(component.collider_footL, "FootL");
AddCollider(component.collider_handR, "HandR");
AddCollider(component.collider_handL, "HandL");
AddCollider(component.collider_fingerIndexL, "FingerIndexL");
AddCollider(component.collider_fingerMiddleL, "FingerMiddleL");
AddCollider(component.collider_fingerRingL, "FingerRingL");
AddCollider(component.collider_fingerLittleL, "FingerLittleL");
AddCollider(component.collider_fingerIndexR, "FingerIndexR");
AddCollider(component.collider_fingerMiddleR, "FingerMiddleR");
AddCollider(component.collider_fingerRingR, "FingerRingR");
AddCollider(component.collider_fingerLittleR, "FingerLittleR");
void AddCollider(VRCAvatarDescriptor.ColliderConfig collider, string where)
{
switch (collider.state)
{
@@ -166,7 +182,10 @@ void AddCollider(VRCAvatarDescriptor.ColliderConfig collider)
case VRCAvatarDescriptor.ColliderConfig.State.Disabled:
break;
default:
throw new ArgumentOutOfRangeException();
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:UnknownColliderState",
collider.ToString(), where)
?.WithContext(component);
break;
}
}
}
@@ -199,20 +218,38 @@ protected override void CollectMutations(VRCAvatarDescriptor component, Componen
collector.TransformRotation(eyelids);
}
break;
case VRCAvatarDescriptor.EyelidType.Blendshapes
when component.customEyeLookSettings.eyelidsSkinnedMesh != null:
case VRCAvatarDescriptor.EyelidType.Blendshapes:
{
var skinnedMeshRenderer = component.customEyeLookSettings.eyelidsSkinnedMesh;
var mesh = skinnedMeshRenderer.sharedMesh;
if (component.customEyeLookSettings.eyelidsSkinnedMesh != null)
{
var skinnedMeshRenderer = component.customEyeLookSettings.eyelidsSkinnedMesh;
var mesh = skinnedMeshRenderer.sharedMesh;

collector.ModifyProperties(skinnedMeshRenderer,
from index in component.customEyeLookSettings.eyelidsBlendshapes
where 0 <= index && index < mesh.blendShapeCount
select $"blendShape.{mesh.GetBlendShapeName(index)}");
if (mesh != null)
{
collector.ModifyProperties(skinnedMeshRenderer,
from index in component.customEyeLookSettings.eyelidsBlendshapes
where 0 <= index && index < mesh.blendShapeCount
select $"blendShape.{mesh.GetBlendShapeName(index)}");
}
else
{
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:NoMeshInEyelidsSkinnedMesh")
?.WithContext(component);
}
}
else
{
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:NoEyelidsSkinnedMesh")
?.WithContext(component);
}
}
break;
default:
throw new ArgumentOutOfRangeException();
BuildReport.LogWarning("ComponentInfos:VRCAvatarDescriptor:warning:UnknownEyelidType",
component.customEyeLookSettings.eyelidType.ToString())
?.WithContext(component);
break;
}
}
}
@@ -249,7 +286,8 @@ protected override void ApplySpecialMapping(VRCAvatarDescriptor component, Mappi
}
break;
default:
throw new ArgumentOutOfRangeException();
// Warning Reported in CollectMutations
break;
}
}
}
10 changes: 8 additions & 2 deletions Editor/AnimatorParsers/AnimatorParser.cs
Original file line number Diff line number Diff line change
@@ -315,7 +315,10 @@ void CollectWeightChangesInBehaviors(StateMachineBehaviour[] stateBehaviours)
layer = VRCAvatarDescriptor.AnimLayerType.Additive;
break;
default:
throw new ArgumentOutOfRangeException();
LogWarning("AnimatorParser:PlayableLayerControl:UnknownBlendablePlayableLayer",
$"{playableLayerControl.layer}")
?.WithContext(stateMachineBehaviour);
continue;
}

var current = AnimatorLayerWeightStates.WeightStateFor(playableLayerControl.blendDuration,
@@ -341,7 +344,10 @@ void CollectWeightChangesInBehaviors(StateMachineBehaviour[] stateBehaviours)
layer = VRCAvatarDescriptor.AnimLayerType.Additive;
break;
default:
throw new ArgumentOutOfRangeException();
LogWarning("AnimatorParser:AnimatorLayerControl:UnknownBlendablePlayableLayer",
$"{animatorLayerControl.layer}")
?.WithContext(stateMachineBehaviour);
continue;
}

var current = AnimatorLayerWeightStates.WeightStateFor(animatorLayerControl.blendDuration,
4 changes: 3 additions & 1 deletion Editor/Processors/TraceAndOptimize/OptimizePhysBone.cs
Original file line number Diff line number Diff line change
@@ -107,7 +107,9 @@ bool IsAnimated()
});
break;
default:
throw new ArgumentOutOfRangeException();
BuildReport.LogWarning("TraceAndOptimize:OptimizePhysBone:UnknownPhysBoneColliderShape", shapeType.ToString())
?.WithContext(colliders);
break;
}
}

35 changes: 35 additions & 0 deletions Localization/en.po
Original file line number Diff line number Diff line change
@@ -469,6 +469,9 @@ msgstr "Prevents removing end bones whose parent is not removed."
msgid "TraceAndOptimize:prop:removeZeroSizedPolygons"
msgstr "Automatically Remove Zero Sized Polygons"

msgid "TraceAndOptimize:OptimizePhysBone:UnknownPhysBoneColliderShape"
msgstr "Unknown PhysBone Collider Shape '{0}' specified"
Sayamame-beans marked this conversation as resolved.
Show resolved Hide resolved

# endregion

#region ApplyObjectMapping
@@ -481,6 +484,38 @@ msgstr "BlendShape(s) for viseme are Removed / frozen."

#endregion

#region ComponentInfos

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoVisemeSkinnedMesh"
msgstr "No Skinned Mesh Renderer is specified for lip sync.

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownLipSyncStyle"
msgstr "Unknown Lip Sync Style '{0}' is specified."

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownColliderState"
msgstr "Unknown Standard Collider State '{0}' is specified for {1}."

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoMeshInEyelidsSkinnedMesh"
msgstr "No Mesh is specified for eyelids SkinnedMesh."

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoEyelidsSkinnedMesh"
msgstr "No Skinned Mesh Renderer is specified for eyelids."

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownEyelidType"
msgstr "Unknown Eyelid Type '{0}' is specified."

#endregion

#region AnimatorParser

msgid "AnimatorParser:PlayableLayerControl:UnknownBlendablePlayableLayer"
msgstr "Unknown Playable Layer '{0}' is specified for Playable Layer Control."

msgid "AnimatorParser:AnimatorLayerControl:UnknownBlendablePlayableLayer"
msgstr "Unknown Playable Layer '{0}' is specified for Animator Layer Control."

#endregion

#region MeshInfo2

msgid "MeshInfo2:warning:multiPassRendering"
35 changes: 35 additions & 0 deletions Localization/ja.po
Original file line number Diff line number Diff line change
@@ -400,6 +400,9 @@ msgstr "親が削除されていないendボーンを削除しないようにし
msgid "TraceAndOptimize:prop:removeZeroSizedPolygons"
msgstr "面積がゼロのポリゴンを自動的に削除する"

msgid "TraceAndOptimize:OptimizePhysBone:UnknownPhysBoneColliderShape"
msgstr "未知のPhysBone Colliderの形状'{0}'が指定されています"

# endregion

#region ApplyObjectMapping
@@ -417,6 +420,38 @@ msgstr ""

#endregion

#region ComponentInfos

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoVisemeSkinnedMesh"
msgstr "リップシンク用のSkinnedMeshがありません。"

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownLipSyncStyle"
msgstr "未知のリップシンクの種類'{0}'が指定されています。"

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownColliderState"
msgstr "未知のStandard Colliderの状態'{0}'が{1}に指定されています。"

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoMeshInEyelidsSkinnedMesh"
msgstr "瞬き用のSkinnedMeshにメッシュがありません。"

msgid "ComponentInfos:VRCAvatarDescriptor:warning:NoEyelidsSkinnedMesh"
msgstr "瞬き用のSkinnedMeshがありません。"

msgid "ComponentInfos:VRCAvatarDescriptor:warning:UnknownEyelidType"
msgstr "未知の瞬きの種類'{0}’が指定されています。"

#endregion

#region AnimatorParser

msgid "AnimatorParser:PlayableLayerControl:UnknownBlendablePlayableLayer"
msgstr "未知のレイヤー'{0}'がPlayable Layer Controlに指定されています。"

msgid "AnimatorParser:AnimatorLayerControl:UnknownBlendablePlayableLayer"
msgstr "未知のレイヤー'{0}'がAnimator Layer Controlに指定されています。"

#endregion

#region MeshInfo2

msgid "MeshInfo2:warning:multiPassRendering"