private void AnimationChanged(AnimationReference selectedAnimation) { Animation = null; if (selectedAnimation != null) { Animation = _packFileService.FindFile(selectedAnimation.AnimationFile, selectedAnimation.Container) as PackFile; } if (Animation != null) { HeaderText = _skeletonPackFile.Name + " - " + Animation.Name; } else if (_skeletonPackFile != null) { HeaderText = _skeletonPackFile.Name + " - No Animation"; } else { HeaderText = "No Skeleton - No Animation"; } if (Animation != null) { var animFile = AnimationFile.Create(Animation); var animClip = new AnimationClip(animFile); Player.SetAnimation(animClip, Skeleton); if (Player.IsPlaying && Player.IsEnabled) { Player.Play(); } MaxFrames = Player.FrameCount(); CurrentFrame = 0; } }
private void ReadLog(Stream logStream) { string logPattern = @"^0x(?<offset>[a-fA-F0-9]+?) : \((?<type>[^\)]+?)\)(?<name>.*?) 0x(?<offset2>[a-fA-F0-9]+?)$"; string comportNamePattern = @"^(?<family>[^\\]+?)\\(?<model>[^\\]+?)\\(?<model2>[^\\]+?)\.(?<type>...?)\^.*$"; DCDAT file = files_array[0] as DCDAT; using (StreamReader sr = new StreamReader(logStream)) { while (sr.Peek() >= 0) { string line = sr.ReadLine().Trim(); Match logMatch = Regex.Match(line, logPattern, RegexOptions.IgnoreCase); if (logMatch.Success) { string offsetStr = logMatch.Groups["offset"].Value; string type = logMatch.Groups["type"].Value; string name = logMatch.Groups["name"].Value; string offset2Str = logMatch.Groups["offset2"].Value; if (offsetStr.Length < 8) { offsetStr = new String('0', offsetStr.Length - 8) + offsetStr; } uint offsetUint = Convert.ToUInt32(offsetStr, 16); Pointer offset = file.GetUnsafePointer(offsetUint); switch (type) { case "eST_Comport": Behavior b = Behavior.FromOffset(offset); if (b == null) { Match comportMatch = Regex.Match(name, comportNamePattern, RegexOptions.IgnoreCase); if (comportMatch.Success) { string modelName = comportMatch.Groups["model"].Value; AIModel aiModel = aiModels.FirstOrDefault(ai => ai.name == modelName); Reader reader = files_array[Mem.Fix].reader; Pointer.DoAt(ref reader, offset, () => { Behavior newB = Behavior.Read(reader, offset); if (aiModel != null && newB != null) { switch (comportMatch.Groups["type"].Value) { case "rul": foreach (Behavior originalBehavior in aiModel.behaviors_normal) { if (newB.ContentEquals(originalBehavior)) { originalBehavior.copies.Add(newB.offset); b = originalBehavior; break; } } break; case "rfx": foreach (Behavior originalBehavior in aiModel.behaviors_reflex) { if (newB.ContentEquals(originalBehavior)) { originalBehavior.copies.Add(newB.offset); b = originalBehavior; break; } } break; } } }); } } if (b != null) { b.name = name; } /*if (name.Contains("piranha\\MIC_PiranhaSauteurVisible\\MIC_PiranhaSauteurVisible")) { * print("Offset: " + offset + " - " + b); * }*/ break; case "eST_State": State state = State.FromOffset(offset); if (state != null) { state.name = name; } break; case "eST_Anim3d": AnimationReference ar = FromOffset <AnimationReference>(offset); if (ar != null) { ar.name = name; } break; case "eST_Graph": Graph g = Graph.FromOffset(offset); if (g != null) { g.name = name; } break; case "eST_Sector": Sector s = Sector.FromOffset(offset); if (s != null) { s.name = name; s.Gao.name = name; } break; } } } } }
public void Add(AnimationReference animationRef) { _table.Add(animationRef.AnimationValue, animationRef); }
public void Add(AnimationReference animationRef) { _animationTable.Add(animationRef.AnimationValue, animationRef); _animationNameTable.Add(animationRef.AnimationName, animationRef); }
public static State Read(EndianBinaryReader reader, Pointer offset, Family family) { MapLoader l = MapLoader.Loader; State s = new State(offset, family); if (l.mode == MapLoader.Mode.Rayman3GC) { s.name = new string(reader.ReadChars(0x50)).TrimEnd('\0'); } if (l.mode != MapLoader.Mode.RaymanArenaGC) { s.off_state_next = Pointer.Read(reader); } if (l.mode == MapLoader.Mode.Rayman3GC) { s.off_state_prev = Pointer.Read(reader); Pointer.Read(reader); // unknown offset, end of state array? } s.off_anim_ref = Pointer.Read(reader); s.off_state_transitions_first = Pointer.Read(reader); if (l.mode != MapLoader.Mode.RaymanArenaGC) { s.off_state_transitions_last = Pointer.Read(reader); // same? } s.num_state_transitions = reader.ReadUInt32(); reader.ReadUInt32(); reader.ReadUInt32(); if (l.mode != MapLoader.Mode.RaymanArenaGC) { reader.ReadUInt32(); } s.off_state_auto = Pointer.Read(reader); Pointer.Read(reader); // fam end? if (l.mode != MapLoader.Mode.Rayman2PC) { s.off_cine_mapname = Pointer.Read(reader); s.off_cine_name = Pointer.Read(reader); } reader.ReadByte(); s.speed = reader.ReadByte(); reader.ReadByte(); reader.ReadByte(); if (l.mode == MapLoader.Mode.Rayman2PC) { reader.ReadUInt32(); } if (s.off_cine_mapname != null) { Pointer.Goto(ref reader, s.off_cine_mapname); s.cine_mapname = reader.ReadNullDelimitedString(); } if (s.off_cine_name != null) { Pointer.Goto(ref reader, s.off_cine_name); s.cine_name = reader.ReadNullDelimitedString(); } if (s.off_anim_ref != null) { Pointer.Goto(ref reader, s.off_anim_ref); s.anim_ref = AnimationReference.Read(reader, s.off_anim_ref); } return(s); }
private void ExportAnimRef(BinaryWriter w, Dictionary <string, Tuple <int, Xe.Game.Animations.Animation> > anims, AnimationReference animationReference) { if (animationReference != null && animationReference.Name != null && anims.TryGetValue(animationReference.Name, out var tuple)) { var animIndex = (short)tuple.Item1; short flags = (short)((animationReference.FlipX ? 1 : 0) | (animationReference.FlipY ? 2 : 0)); w.Write(animIndex); w.Write(flags); } else { w.Write((ushort)0xFFFF); w.Write((ushort)0xFFFF); } }