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;
            }
        }
Ejemplo n.º 2
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;
                        }
                    }
                }
            }
        }
Ejemplo n.º 3
0
 public void Add(AnimationReference animationRef)
 {
     _table.Add(animationRef.AnimationValue, animationRef);
 }
Ejemplo n.º 4
0
 public void Add(AnimationReference animationRef)
 {
     _animationTable.Add(animationRef.AnimationValue, animationRef);
     _animationNameTable.Add(animationRef.AnimationName, animationRef);
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
 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);
     }
 }