Beispiel #1
0
 protected override void ReadInternal(Reader reader)
 {
     while (reader.BaseStream.Position <= reader.BaseStream.Length - 8)
     {
         uint size = reader.ReadUInt32();
         long start_frame_packet = reader.BaseStream.Position;
         while (reader.BaseStream.Position < start_frame_packet + size - 4)
         {
             PS1StreamFrame f = Load.FromOffsetOrRead <PS1StreamFrame>(reader, Pointer.Current(reader), inline: true);
             if (f.num_frame == -1)
             {
                 num_frames = frames[frames.Count - 1].num_frame;
             }
             frames.Add(f);
         }
         if (reader.BaseStream.Position < reader.BaseStream.Length - 8)
         {
             reader.Align(4);
         }
     }
     if (num_frames == 0)
     {
         num_frames = frames.Count;
     }
 }
Beispiel #2
0
    public void UpdatePS1StreamFrame()
    {
        ClearCurrentNTTO();
        if (Camera.main.orthographic)
        {
            CinematicIndex = 0;
            return;
        }
        if (ps1Streams != null && currentCinematic > 0)
        {
            OpenSpace.PS1.PS1Stream      s = ps1Streams[currentCinematic - 1];
            OpenSpace.PS1.PS1StreamFrame f = s.frames.FirstOrDefault(fr => fr.num_frame == currentFrame);
            if (f != null)
            {
                Dictionary <int, int> nttoForFrame = new Dictionary <int, int>();
                R2PS1Loader           l            = MapLoader.Loader as R2PS1Loader;
                Camera cam = Camera.main;
                for (int i = 0; i < f.channels.Length; i++)
                {
                    OpenSpace.PS1.PS1StreamFrameChannel c = f.channels[i];
                    if (c.HasFlag(OpenSpace.PS1.PS1StreamFrameChannel.StreamFlags.Camera))
                    {
                        cam.transform.position = c.GetPosition();
                        cam.transform.rotation = c.quaternion * Quaternion.Euler(0, 180, 0);
                    }
                    else
                    {
                        GameObject gao  = null;
                        int        ntto = c.NTTO;
                        if (ntto >= 0)
                        {
                            if (!nttoForFrame.ContainsKey(ntto))
                            {
                                nttoForFrame[ntto] = 0;
                            }
                            if (objectPool.ContainsKey(ntto))
                            {
                                gao = objectPool[ntto][nttoForFrame[ntto]];
                            }
                            if (gao != null)
                            {
                                gao.SetActive(true);
                                currentNTTO.Add(gao);
                                nttoForFrame[ntto]++;
                            }
                        }

                        /*if (c.NTTO > 0) {
                         *      gao = l.levelHeader.geometricObjectsDynamic.GetGameObject(c.NTTO);
                         *      if (gao == null) gao = new GameObject("Empty 2");
                         * } else {
                         *      gao = new GameObject("Empty");
                         * }*/

                        /*if (c.HasFlag(PS1StreamFrameChannel.StreamFlags.Parent)) {
                         *      Debug.Log(string.Format("{0:X4}", c.flags));
                         * }*/
                        if (gao != null)
                        {
                            Vector3 scale = new Vector3(1f, 1f, 1f);
                            gao.transform.localPosition = cam.transform.localPosition + c.GetPosition();
                            gao.transform.localRotation = c.quaternion;
                            if (c.HasFlag(OpenSpace.PS1.PS1StreamFrameChannel.StreamFlags.Scale))
                            {
                                scale = c.GetScale(0x1000);
                                //gao.name = string.Format("{0:X4}", c.sx) + string.Format("{0:X4}", c.sy) + string.Format("{0:X4}", c.sz) + " - " + gao.name;
                            }
                            if (c.HasFlag(OpenSpace.PS1.PS1StreamFrameChannel.StreamFlags.FlipX))
                            {
                                gao.transform.localScale = new Vector3(-scale.x, scale.y, scale.z);
                            }
                            else
                            {
                                gao.transform.localScale = scale;
                            }
                            //gao.transform.localScale = c.GetScale();
                            currentNTTO.Add(gao);
                        }
                    }
                }
            }
        }
    }