private static AnimTrack ParseAnimTrack(JsonReader reader, AnimationNode group, STInterpoaltionType type) { string effect = reader.ReadAsString(); AnimTrack track = new AnimTrack(group); track.ValueIdx = group.ValueIndex; track.TrackMode = group.Mode; track.TrackEffect = ParseEffect(group.Mode, effect); track.InterpolationType = type; track.KeyFrames = new List <STKeyFrame>(); track.Unknown = 0; reader.Read(); track.KeyFrames = ParseKeyFrames(reader, type); return(track); }
public HSFMotionTrackText(AnimTrack track) { Effect = track.TrackEffect; UnknownValue = track.Unknown; ConstantValue = track.Constant; Interpolation = track.InterpolationType; if (track.InterpolationType == STInterpoaltionType.Constant) { ConstantFlags = track.ConstantUnk; } foreach (var key in track.KeyFrames) { switch (track.InterpolationType) { case STInterpoaltionType.Bezier: KeyFrames.Add(new HSFMotionBeizerKeyFrameText() { Value = key.Value, Frame = key.Frame, SlopeIn = ((STBezierKeyFrame)key).SlopeIn, SlopeOut = ((STBezierKeyFrame)key).SlopeOut, }); break; default: KeyFrames.Add(new HSFMotionKeyFrameText() { Value = key.Value, Frame = key.Frame, }); break; } } }
private static HSFMotionAnimation TextConverter(string text) { HSFMotionAnimation anim = new HSFMotionAnimation(); StringReader sr = new StringReader(text); using (JsonReader reader = new JsonTextReader(sr)) { AnimationNode group = null; while (reader.Read()) { if (reader.Value == null) { continue; } if (reader.Value.Equals("Name")) { anim.Name = reader.ReadAsString(); } else if (reader.Value.Equals("FrameCount")) { anim.FrameCount = (float)reader.ReadAsDecimal(); } else if (reader.Value.Equals("Group")) { group = new AnimationNode(); anim.AnimGroups.Add(group); string name = reader.ReadAsString(); reader.Read(); //ID group.ValueIndex = (short)reader.ReadAsInt32(); //index reader.Read(); //mode group.Mode = (TrackMode)reader.ReadAsInt32(); if (group.Mode == TrackMode.Normal || group.Mode == TrackMode.Object) { group.Name = name; } else { group.Name = ""; } } else if (reader.Value.Equals("Track_Constant")) { string effect = reader.ReadAsString(); reader.Read(); //Value float value = (float)reader.ReadAsDecimal(); reader.Read(); //Flags string flags = reader.ReadAsString().Replace("0x", string.Empty); AnimTrack track = new AnimTrack(group); track.ValueIdx = group.ValueIndex; track.TrackMode = group.Mode; track.TrackEffect = ParseEffect(group.Mode, effect); track.Constant = value; track.ConstantUnk = short.Parse(flags, System.Globalization.NumberStyles.HexNumber); track.InterpolationType = STInterpoaltionType.Constant; track.KeyFrames = new List <STKeyFrame>(); track.Unknown = 0; group.TrackList.Add(track); } else if (reader.Value.Equals("Track_Bezier")) { group.TrackList.Add(ParseAnimTrack(reader, group, STInterpoaltionType.Bezier)); } else if (reader.Value.Equals("Track_Linear")) { group.TrackList.Add(ParseAnimTrack(reader, group, STInterpoaltionType.Linear)); } else if (reader.Value.Equals("Track_Bezier")) { group.TrackList.Add(ParseAnimTrack(reader, group, STInterpoaltionType.Bezier)); } else if (reader.Value.Equals("Track_Bitmap")) { group.TrackList.Add(ParseAnimTrack(reader, group, STInterpoaltionType.Bitmap)); } else if (reader.Value.Equals("Track_Step")) { group.TrackList.Add(ParseAnimTrack(reader, group, STInterpoaltionType.Step)); } } } return(anim); }