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