예제 #1
0
        public static Mind Read(EndianBinaryReader reader, Pointer offset)
        {
            Mind m = new Mind(offset);

            m.off_AI_model            = Pointer.Read(reader);
            m.off_intelligence_normal = Pointer.Read(reader);
            m.off_intelligence_reflex = Pointer.Read(reader);
            m.off_dsgMem = Pointer.Read(reader);
            m.off_name   = Pointer.Read(reader);

            if (m.off_AI_model != null)
            {
                m.AI_model = AIModel.FromOffset(m.offset);
                if (m.AI_model == null)
                {
                    Pointer.Goto(ref reader, m.off_AI_model);
                    m.AI_model = AIModel.Read(reader, m.off_AI_model);
                }
            }

            if (MapLoader.Loader.mode == MapLoader.Mode.Rayman2PC && m.off_dsgMem != null)
            {
                Pointer.Goto(ref reader, m.off_dsgMem);
                m.dsgMem = DsgMem.Read(reader, m.off_dsgMem);
            }
            return(m);
        }
예제 #2
0
        public static AIModel FromOffsetOrRead(Pointer offset, Reader reader)
        {
            if (offset == null)
            {
                return(null);
            }
            AIModel ai = FromOffset(offset);

            if (ai == null)
            {
                Pointer.DoAt(ref reader, offset, () => {
                    ai = AIModel.Read(reader, offset);
                    MapLoader.Loader.aiModels.Add(ai);
                });
            }
            return(ai);
        }