Exemple #1
0
 /// <summary>
 /// Get effect for the specified bone. If no effect should be applied, null should be returned.
 /// The modifier will be multiplied with other modifiers used on this bone, so 1 is the no-change value.
 /// Called every time for each character, should be fast.
 /// </summary>
 /// <param name="bone">Bone to get effect for</param>
 /// <param name="origin">Bone controller that this effect applies to</param>
 /// <param name="coordinate">Coordinate the effect should apply to</param>
 public abstract BoneModifierData GetEffect(string bone, BoneController origin, CoordinateType coordinate);
Exemple #2
0
            public static void Init()
            {
                Harmony.CreateAndPatchAll(typeof(Hooks), GUID);

#if EC
                ExtendedSave.CardBeingImported += importedData =>
                {
                    if (importedData.TryGetValue(GUID, out var pluginData) && pluginData != null)
                    {
                        var modifiers = BoneController.ReadModifiers(pluginData);

                        // Only 1st coord is used in EC so remove others
                        foreach (var modifier in modifiers)
                        {
                            modifier.MakeNonCoordinateSpecific();
                        }

                        importedData[GUID] = BoneController.SaveModifiers(modifiers);
                    }
                };
#elif KKS
                ExtendedSave.CardBeingImported += (data, mapping) =>
                {
                    if (data.TryGetValue(ExtDataGUID, out var pluginData) && pluginData != null)
                    {
                        var modifiers  = BoneController.ReadModifiers(pluginData);
                        var coordCount = (int)mapping.Values.Max(x => x) + 1;
                        foreach (var modifier in modifiers)
                        {
                            if (!modifier.IsCoordinateSpecific())
                            {
                                continue;
                            }

                            var newArr = new BoneModifierData[coordCount];

                            foreach (var map in mapping)
                            {
                                // Discard unused
                                if (map.Value == null)
                                {
                                    continue;
                                }

                                if (map.Key < modifier.CoordinateModifiers.Length)
                                {
                                    newArr[(int)map.Value] = modifier.CoordinateModifiers[map.Key];
                                }
                                else
                                {
                                    newArr[(int)map.Value] = new BoneModifierData();
                                }
                            }

                            modifier.CoordinateModifiers = newArr;
                        }

                        data[ExtDataGUID] = BoneController.SaveModifiers(modifiers);
                    }
                };
#endif
            }
Exemple #3
0
 /// <summary>
 /// Should return names of all bones that can be affected by this effect. Only called when reloading/rebuilding modifiers.
 /// </summary>
 /// <param name="origin">Bone controller that this effect applies to</param>
 public abstract IEnumerable <string> GetAffectedBones(BoneController origin);