Skip to content

Commit 79ed1b3

Browse files
committed
Merge branch 'master' of https://github.com/knah/VRCMods
2 parents 5f970e6 + 8dde3d9 commit 79ed1b3

23 files changed

+1057
-1940
lines changed

.github/workflows/dotnet.yml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,6 @@ jobs:
2222
token: ${{ secrets.LibsRepositoryToken }}
2323
path: Libs
2424

25-
- name: Checkout IKTweaks/FinalIK
26-
uses: actions/checkout@v2
27-
with:
28-
repository: knah/IKTweaks-FinalIK
29-
token: ${{ secrets.IKTRepositoryToken }}
30-
path: IKTweaks/FinalIK
31-
3225
- name: Setup .NET
3326
uses: actions/setup-dotnet@v1
3427
with:

IKTweaks/AnimationsHandler.cs

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
using System;
2+
using System.Linq;
3+
using UnhollowerBaseLib;
4+
using UnityEngine;
5+
6+
namespace IKTweaks
7+
{
8+
internal class AnimationsHandler
9+
{
10+
private readonly Il2CppStructArray<float> myMuscles = new(HumanTrait.MuscleCount);
11+
private readonly HumanPoseHandler myPoseHandler;
12+
private readonly Transform myHips;
13+
private readonly CachedSolver mySolver;
14+
15+
public AnimationsHandler(HumanPoseHandler poseHandler, Transform hips, in CachedSolver solver)
16+
{
17+
myPoseHandler = poseHandler;
18+
myHips = hips;
19+
mySolver = solver;
20+
}
21+
22+
internal void ResetBonePositions(bool onlySpine, bool hasLegTargets)
23+
{
24+
if (mySolver.Solver.IKPositionWeight < 0.9f) return;
25+
26+
myHips.get_position_Injected(out var hipPos);
27+
myHips.get_rotation_Injected(out var hipRot);
28+
29+
myPoseHandler.GetHumanPose(out var bodyPos, out var bodyRot, myMuscles);
30+
31+
for (var i = 0; i < myMuscles.Count; i++)
32+
{
33+
var currentMask = ourBoneResetMasks[i];
34+
if (onlySpine && currentMask != BoneResetMask.Spine) continue;
35+
if (!hasLegTargets && (currentMask == BoneResetMask.LeftLeg || currentMask == BoneResetMask.RightLeg)) continue;
36+
37+
if (IkTweaksSettings.IgnoreAnimationsModeParsed == IgnoreAnimationsMode.All)
38+
{
39+
myMuscles[i] *= currentMask == BoneResetMask.Never ? 1 : 0;
40+
continue;
41+
}
42+
43+
switch (currentMask)
44+
{
45+
case BoneResetMask.Never:
46+
break;
47+
case BoneResetMask.Spine:
48+
myMuscles[i] *= 1 - mySolver.Spine.pelvisPositionWeight;
49+
break;
50+
case BoneResetMask.LeftArm:
51+
myMuscles[i] *= 1 - mySolver.LeftArm.positionWeight;
52+
break;
53+
case BoneResetMask.RightArm:
54+
myMuscles[i] *= 1 - mySolver.RightArm.positionWeight;
55+
break;
56+
case BoneResetMask.LeftLeg:
57+
myMuscles[i] *= 1 - mySolver.LeftLeg.positionWeight;
58+
break;
59+
case BoneResetMask.RightLeg:
60+
myMuscles[i] *= 1 - mySolver.RightLeg.positionWeight;
61+
break;
62+
default:
63+
throw new ArgumentOutOfRangeException();
64+
}
65+
}
66+
67+
myPoseHandler.SetHumanPose(ref bodyPos, ref bodyRot, myMuscles);
68+
69+
myHips.position = hipPos;
70+
myHips.rotation = hipRot;
71+
}
72+
73+
74+
private enum BoneResetMask
75+
{
76+
Never,
77+
Spine,
78+
LeftArm,
79+
RightArm,
80+
LeftLeg,
81+
RightLeg,
82+
}
83+
84+
private static readonly string[] ourNeverBones = { "Index", "Thumb", "Middle", "Ring", "Little", "Jaw", "Eye" };
85+
private static readonly string[] ourArmBones = { "Arm", "Forearm", "Hand", "Shoulder" };
86+
private static readonly string[] ourLegBones = { "Leg", "Foot", "Toes" };
87+
88+
private static BoneResetMask JudgeBone(string name)
89+
{
90+
if (ourNeverBones.Any(name.Contains))
91+
return BoneResetMask.Never;
92+
93+
if (ourArmBones.Any(name.Contains))
94+
{
95+
return name.Contains("Left") ? BoneResetMask.LeftArm : BoneResetMask.RightArm;
96+
}
97+
98+
if (ourLegBones.Any(name.Contains))
99+
return name.Contains("Left") ? BoneResetMask.LeftLeg : BoneResetMask.RightLeg;
100+
101+
return BoneResetMask.Spine;
102+
}
103+
104+
private static readonly BoneResetMask[] ourBoneResetMasks = HumanTrait.MuscleName.Select(JudgeBone).ToArray();
105+
}
106+
}

IKTweaks/BundleHolder.cs

Lines changed: 0 additions & 26 deletions
This file was deleted.

IKTweaks/CachedSolver.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using RootMotion.FinalIK;
2+
3+
namespace IKTweaks
4+
{
5+
public struct CachedSolver
6+
{
7+
public readonly IKSolverVR Solver;
8+
public readonly IKSolverVR.Spine Spine;
9+
public readonly IKSolverVR.Leg LeftLeg;
10+
public readonly IKSolverVR.Leg RightLeg;
11+
public readonly IKSolverVR.Arm LeftArm;
12+
public readonly IKSolverVR.Arm RightArm;
13+
public readonly IKSolverVR.Locomotion Locomotion;
14+
15+
public CachedSolver(IKSolverVR solver)
16+
{
17+
Solver = solver;
18+
Spine = solver.spine;
19+
LeftArm = solver.leftArm;
20+
LeftLeg = solver.leftLeg;
21+
RightArm = solver.rightArm;
22+
RightLeg = solver.rightLeg;
23+
Locomotion = solver.locomotion;
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)