private void ChangeHueForAnimations(double hue, double saturation, double lightness, Type0.Parameter parameter) { Type0 r = Type0.FirstOrDefault(e => e.I_01_a == ECF.Type0.Component.R && e.I_00 == parameter); Type0 g = Type0.FirstOrDefault(e => e.I_01_a == ECF.Type0.Component.G && e.I_00 == parameter); Type0 b = Type0.FirstOrDefault(e => e.I_01_a == ECF.Type0.Component.B && e.I_00 == parameter); if (r == null || g == null || b == null) { return; } foreach (var r_frame in r.Keyframes) { float g_frame = g.GetValue(r_frame.Index); float b_frame = b.GetValue(r_frame.Index); if (r_frame.Float != 0.0 || g_frame != 0.0 || b_frame != 0.0) { HslColor.HslColor color = new RgbColor(r_frame.Float, g_frame, b_frame).ToHsl(); color.ChangeHue(hue); color.ChangeSaturation(saturation); color.ChangeLightness(lightness); RgbColor convertedColor = color.ToRgb(); r_frame.Float = (float)convertedColor.R; g.SetValue(r_frame.Index, (float)convertedColor.G); b.SetValue(r_frame.Index, (float)convertedColor.B); } } }
public void AddKeyframesFromAnim(Type0 anim) { foreach (var keyframe in anim.Keyframes) { var existing = GetKeyframe(keyframe.Index); if (existing == null) { var newKeyframe = new Type0_Keyframe() { Index = keyframe.Index, Float = GetValue(keyframe.Index) }; Keyframes.Add(newKeyframe); } } }
private void Parse() { ecfFile.I_12 = BitConverter.ToUInt16(rawBytes, 12); if (totalMainEntries > 0) { ecfFile.Entries = new List <ECF_Entry>(); for (int i = 0; i < totalMainEntries; i++) { ecfFile.Entries.Add(new ECF_Entry()); ecfFile.Entries[i].I_52 = (PlayMode)BitConverter.ToInt16(rawBytes, mainEntryOffset + 52); ecfFile.Entries[i].F_00 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 0); ecfFile.Entries[i].F_04 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 4); ecfFile.Entries[i].F_08 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 8); ecfFile.Entries[i].F_12 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 12); ecfFile.Entries[i].F_16 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 16); ecfFile.Entries[i].F_20 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 20); ecfFile.Entries[i].F_24 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 24); ecfFile.Entries[i].F_28 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 28); ecfFile.Entries[i].F_32 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 32); ecfFile.Entries[i].F_36 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 36); ecfFile.Entries[i].F_40 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 40); ecfFile.Entries[i].F_44 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 44); ecfFile.Entries[i].F_48 = BitConverter.ToSingle(rawBytes, mainEntryOffset + 48); ecfFile.Entries[i].I_54 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 54); ecfFile.Entries[i].I_56 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 56); ecfFile.Entries[i].I_58 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 58); ecfFile.Entries[i].I_60 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 60); ecfFile.Entries[i].I_62 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 62); ecfFile.Entries[i].I_64 = new UInt16[14]; for (int a = 0; a < 28; a += 2) { ecfFile.Entries[i].I_64[a / 2] = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 64 + a); } ecfFile.Entries[i].I_96 = BitConverter.ToUInt16(rawBytes, mainEntryOffset + 96); //Type0 data int Type0_Offset = BitConverter.ToInt32(rawBytes, mainEntryOffset + 100) + 96 + mainEntryOffset; int Type0_Count = BitConverter.ToInt16(rawBytes, mainEntryOffset + 98); if (Type0_Count > 0) { ecfFile.Entries[i].Type0 = new List <Type0>(); for (int a = 0; a < Type0_Count; a++) { int startOffset = BitConverter.ToInt32(rawBytes, Type0_Offset + 8) + Type0_Offset; int floatOffset = BitConverter.ToInt32(rawBytes, Type0_Offset + 12) + Type0_Offset; ecfFile.Entries[i].Type0.Add(new Type0() { I_00 = (ECF.Type0.Parameter)rawBytes[Type0_Offset + 0], I_01_a = Type0.GetComponent((ECF.Type0.Parameter)rawBytes[Type0_Offset + 0], Int4Converter.ToInt4(rawBytes[Type0_Offset + 1])[0]), I_01_b = BitConverter_Ex.ToBoolean(Int4Converter.ToInt4(rawBytes[Type0_Offset + 1])[1]), I_02 = (rawBytes[Type0_Offset + 2] == 0)? false : true, I_03 = rawBytes[Type0_Offset + 3], I_04 = BitConverter.ToUInt16(rawBytes, Type0_Offset + 4), Keyframes = ParseKeyframes(BitConverter.ToInt16(rawBytes, Type0_Offset + 6), startOffset, floatOffset) }); Type0_Offset += 16; } } //Unk_Str int Str_Offset = BitConverter.ToInt32(rawBytes, mainEntryOffset + 92) + mainEntryOffset; if (Str_Offset != 0) { ecfFile.Entries[i].Unk_Str = Utils.GetString(bytes, Str_Offset); } else { ecfFile.Entries[i].Unk_Str = String.Empty; } mainEntryOffset += 104; } } }