/// <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);
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 }
/// <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);