コード例 #1
0
ファイル: BoneModifier.cs プロジェクト: zo845845/ABMX
        private BoneModifierData CombineModifiers(BoneModifierData baseModifier, IList <BoneModifierData> additionalModifiers)
        {
            var scale    = baseModifier.ScaleModifier;
            var len      = baseModifier.LengthModifier;
            var position = baseModifier.PositionModifier;
            var rotation = baseModifier.RotationModifier;

            for (var i = 0; i < additionalModifiers.Count; i++)
            {
                var additionalModifier = additionalModifiers[i];
                scale = new Vector3(
                    scale.x * additionalModifier.ScaleModifier.x,
                    scale.y * additionalModifier.ScaleModifier.y,
                    scale.z * additionalModifier.ScaleModifier.z);
                len *= additionalModifier.LengthModifier;

                position += additionalModifier.PositionModifier;
                rotation += additionalModifier.RotationModifier;
            }

            _combineModifiersCachedReturn.ScaleModifier    = scale;
            _combineModifiersCachedReturn.LengthModifier   = len;
            _combineModifiersCachedReturn.PositionModifier = position;
            _combineModifiersCachedReturn.RotationModifier = rotation;
            return(_combineModifiersCachedReturn);
        }
コード例 #2
0
ファイル: BoneModifier.cs プロジェクト: AxSaber/KKABMX
        private static BoneModifierData CombineModifiers(BoneModifierData baseModifier, IEnumerable <BoneModifierData> additionalModifiers)
        {
            var scale = baseModifier.ScaleModifier;
            var len   = baseModifier.LengthModifier;

            foreach (var additionalModifier in additionalModifiers)
            {
                scale = new Vector3(
                    scale.x * additionalModifier.ScaleModifier.x,
                    scale.y * additionalModifier.ScaleModifier.y,
                    scale.z * additionalModifier.ScaleModifier.z);
                len *= additionalModifier.LengthModifier;
            }

            return(new BoneModifierData(scale, len));
        }
コード例 #3
0
ファイル: BoneModifier.cs プロジェクト: AxSaber/KKABMX
        private bool CanApply(BoneModifierData data)
        {
            if (!data.IsEmpty())
            {
                _forceApply = true;
                return(true);
            }

            // The point is to let the boner run for 1 extra frame after it's disabled to properly reset stuff
            if (_forceApply)
            {
                _forceApply        = false;
                _lenModForceUpdate = true;
                return(true);
            }

            if (_lenModForceUpdate)
            {
                return(true);
            }

            return(false);
        }
コード例 #4
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
            }