Esempio n. 1
0
        public static StreamedCurveKey CalculateStreamedFrame(AnimationCurveTpl <Float> curve, int lhsIndex, int rhsIndex, float timeOffset)
        {
            IReadOnlyList <KeyframeTpl <Float> > keyframes = curve.Curve;
            KeyframeTpl <Float> lhs = keyframes[lhsIndex];
            int curveKeyIndex       = lhsIndex;
            KeyframeTpl <Float> rhs = keyframes[rhsIndex];
            float frameTime         = lhs.Time + timeOffset;
            //TimeEnd = rhs.Time + timeOffset;
            float deltaTime = rhs.Time - lhs.Time;

            if (deltaTime < 0.00009999999747378752)
            {
                deltaTime = 0.000099999997f;
            }
            float deltaValue    = rhs.Value.Value - lhs.Value.Value;
            float inverseTime   = 1.0f / (deltaTime * deltaTime);
            float outTangent    = lhs.OutSlope.Value * deltaTime;
            float inTangent     = rhs.InSlope.Value * deltaTime;
            float curveKeyCoefX = (inTangent + outTangent - deltaValue - deltaValue) * inverseTime / deltaTime;
            float curveKeyCoefY = inverseTime * (deltaValue + deltaValue + deltaValue - outTangent - outTangent - inTangent);
            float curveKeyCoefZ = lhs.OutSlope.Value;
            float curveKeyValue = lhs.Value.Value;

            if (lhs.OutSlope.Value == float.PositiveInfinity || rhs.InSlope.Value == float.PositiveInfinity)
            {
                curveKeyCoefX = 0.0f;
                curveKeyCoefY = 0.0f;
                curveKeyCoefZ = 0.0f;
                curveKeyValue = lhs.Value.Value;
            }
            Vector3f         curveKeyCoef = new Vector3f(curveKeyCoefX, curveKeyCoefY, curveKeyCoefZ);
            StreamedCurveKey curveKey     = new StreamedCurveKey(curveKeyIndex, curveKeyValue, curveKeyCoef);

            return(curveKey);
        }
Esempio n. 2
0
        public MinMaxCurve(ParticleSystemCurveMode mode, float minValue, float maxValue, float minCurve, float maxCurve)
        {
            MinMaxState = mode;
            MinScalar   = minValue;
            Scalar      = maxValue;

            MinCurve = new AnimationCurveTpl <Float>(minCurve, 1.0f / 3.0f);
            MaxCurve = new AnimationCurveTpl <Float>(maxCurve, 1.0f / 3.0f);
        }
Esempio n. 3
0
        public MinMaxCurve(float minValue, float maxValue, float minCurve, float maxCurve1, float maxCurve2)
        {
            MinMaxState = ParticleSystemCurveMode.Curve;
            Scalar      = maxValue;
            MinScalar   = minValue;

            MinCurve = new AnimationCurveTpl <Float>(minCurve, 1.0f / 3.0f);
            MaxCurve = new AnimationCurveTpl <Float>(maxCurve1, 0.0f, 1.0f, maxCurve2, 1.0f, 0.0f, 1.0f / 3.0f);
        }
Esempio n. 4
0
        public MinMaxCurve(ParticleSystemCurveMode mode, float minValue, float maxValue, float minCurve, float maxCurve)
        {
            MinMaxState = mode;
            MinScalar   = minValue;
            Scalar      = maxValue;

            MinCurve = new AnimationCurveTpl <Float>(minCurve, KeyframeTpl <Float> .DefaultFloatWeight);
            MaxCurve = new AnimationCurveTpl <Float>(maxCurve, KeyframeTpl <Float> .DefaultFloatWeight);
        }
Esempio n. 5
0
        public MinMaxCurve(float minValue, float maxValue, float minCurve, float maxCurve1, float maxCurve2)
        {
            MinMaxState = ParticleSystemCurveMode.Curve;
            Scalar      = maxValue;
            MinScalar   = minValue;

            MinCurve = new AnimationCurveTpl <Float>(minCurve, KeyframeTpl <Float> .DefaultFloatWeight);
            MaxCurve = new AnimationCurveTpl <Float>(maxCurve1, 0.0f, 1.0f, maxCurve2, 1.0f, 0.0f, KeyframeTpl <Float> .DefaultFloatWeight);
        }
Esempio n. 6
0
 public LineParameters(Version version)
 {
     WidthMultiplier      = 1.0f;
     WidthCurve           = new AnimationCurveTpl <Float>(false);
     WidthCurve.Curve     = new KeyframeTpl <Float>[] { new KeyframeTpl <Float>(0.0f, 1.0f, KeyframeTpl <Float> .DefaultFloatWeight), };
     ColorGradient        = new ParticleSystems.Gradient(ColorRGBAf.White, ColorRGBAf.White);
     NumCornerVertices    = 0;
     NumCapVertices       = 0;
     Alignment            = LineAlignment.View;
     TextureMode          = LineTextureMode.Stretch;
     ShadowBias           = 0.5f;
     GenerateLightingData = false;
 }
Esempio n. 7
0
        public MinMaxCurve(float minValue, float maxValue, float minCurve, float maxCurve0, float maxCurve1)
        {
            MinMaxState = ParticleSystemCurveMode.Curve;
            Scalar      = maxValue;
            MinScalar   = minValue;

            Float defWeight = new Float(1.0f / 3.0f);
            Float zero      = new Float(0.0f);
            Float one       = new Float(1.0f);

            MaxCurve = new AnimationCurveTpl <Float>(new Float(maxCurve0), zero, one, new Float(maxCurve1), one, zero, defWeight);
            MinCurve = new AnimationCurveTpl <Float>(new Float(minCurve), defWeight);
        }
Esempio n. 8
0
        public static AnimationCurveTpl <T> Convert <T>(IExportContainer container, ref AnimationCurveTpl <T> origin)
            where T : struct, IAsset
        {
            AnimationCurveTpl <T> instance = new AnimationCurveTpl <T>();

            instance.Curve        = origin.Curve.Select(t => t.Convert(container)).ToArray();
            instance.PreInfinity  = origin.PreInfinity;
            instance.PostInfinity = origin.PostInfinity;
            if (AnimationCurveTpl <T> .HasRotationOrder(container.ExportVersion))
            {
                instance.RotationOrder = GetRotationOrder(container, ref origin);
            }
            return(instance);
        }
Esempio n. 9
0
        private static void GenerateEngineStruct(TypeTreeContext context, SerializableType origin, string name)
        {
            switch (origin.Name)
            {
            case SerializableType.Vector2Name:
                Vector2f.GenerateTypeTree(context, name);
                break;

            case SerializableType.Vector2IntName:
                Vector2i.GenerateTypeTree(context, name);
                break;

            case SerializableType.Vector3Name:
                Vector3f.GenerateTypeTree(context, name);
                break;

            case SerializableType.Vector3IntName:
                Vector3i.GenerateTypeTree(context, name);
                break;

            case SerializableType.Vector4Name:
                Vector4f.GenerateTypeTree(context, name);
                break;

            case SerializableType.RectName:
                Rectf.GenerateTypeTree(context, name);
                break;

            case SerializableType.BoundsName:
                AABB.GenerateTypeTree(context, name);
                break;

            case SerializableType.BoundsIntName:
                AABBi.GenerateTypeTree(context, name);
                break;

            case SerializableType.QuaternionName:
                Quaternionf.GenerateTypeTree(context, name);
                break;

            case SerializableType.Matrix4x4Name:
                Matrix4x4f.GenerateTypeTree(context, name);
                break;

            case SerializableType.ColorName:
                ColorRGBAf.GenerateTypeTree(context, name);
                break;

            case SerializableType.Color32Name:
                ColorRGBA32.GenerateTypeTree(context, name);
                break;

            case SerializableType.LayerMaskName:
                LayerMask.GenerateTypeTree(context, name);
                break;

            case SerializableType.AnimationCurveName:
                AnimationCurveTpl <Float> .GenerateTypeTree(context, name, Float.GenerateTypeTree);

                break;

            case SerializableType.GradientName:
                Gradient.GenerateTypeTree(context, name);
                break;

            case SerializableType.RectOffsetName:
                RectOffset.GenerateTypeTree(context, name);
                break;

            case SerializableType.GUIStyleName:
                GUIStyle.GenerateTypeTree(context, name);
                break;

            case SerializableType.PropertyNameName:
                PropertyName.GenerateTypeTree(context, name);
                break;

            default:
                throw new Exception($"Unknown engine struct {origin.Name}");
            }
        }
Esempio n. 10
0
 private static RotationOrder GetRotationOrder <T>(IExportContainer container, ref AnimationCurveTpl <T> origin)
     where T : struct, IAsset
 {
     return(AnimationCurveTpl <T> .HasRotationOrder(container.Version) ? origin.RotationOrder : RotationOrder.OrderZXY);
 }
Esempio n. 11
0
 private static RotationOrder GetRotationOrder <T>(IExportContainer container, ref AnimationCurveTpl <T> origin)
     where T : struct, IAsset
 {
     return(container.Layout.Serialized.AnimationCurveTpl.HasRotationOrder ? origin.RotationOrder : RotationOrder.OrderZXY);
 }