Example #1
0
 public SelectableLevel(LevelPack levelPack, int index, string levelXml, LevelHeader header, bool finished, int score)
 {
     Finished    = finished;
     Score       = score;
     LevelHeader = header;
     LevelXml    = levelXml;
     Index       = index;
     LevelPack   = levelPack;
 }
Example #2
0
 void Awake()
 {
     if (instance == null)
     {
         instance = this;
         //DontDestroyOnLoad (this);
     }
     else if (instance != this)
     {
         Destroy(this);
     }
 }
Example #3
0
    public void Init()
    {
        R2PS1Loader l = MapLoader.Loader as R2PS1Loader;

        h   = l.levelHeader;
        a1h = l.actor1Header;
        a2h = l.actor2Header;
        if (perso != null && perso.p3dData != null && perso.p3dData.family != null)
        {
            Family fam = perso.p3dData.family;
            if (fam.animations != null)
            {
                PointerList <State> statePtrs  = l.GetStates(perso.p3dData);
                State[]             tempStates = statePtrs.pointers.Select(s => s.Value).ToArray();
                int ind = (int)perso.p3dData.stateIndex;
                if (ind >= tempStates.Length)
                {
                    ind = 0;
                }
                int stateInd = ind;

                states        = fam.states;
                stateNames    = new string[states.Length + 1 + fam.animations.Length];
                stateNames[0] = "Null";
                for (int i = 0; i < states.Length; i++)
                {
                    State s = states[i];
                    stateNames[i + 1] = (s.anim == null || s.anim.index >= fam.animations.Length) ? "Null" : $"State {Array.IndexOf(tempStates, s)}: {fam.animations[s.anim.index].name}";
                }
                for (int i = 0; i < fam.animations.Length; i++)
                {
                    stateNames[i + 1 + states.Length] = $"(Animation {i}) {fam.animations[i].name}";
                }
                hasStates  = true;
                stateIndex = stateInd - (int)fam.startState;
                stateIndex++;                 // After null
                currentState = stateIndex;
                SetState(stateIndex);
            }
        }
        IsLoaded = true;
    }
        public override bool LoadFromBytes(byte[] bytes)
        {
            //Need the offset before loading
            if (_levelInfoOffset == -1 || _levelHeaderOffset == -1)
            {
                return(false);
            }

            base.LoadFromBytes(bytes);

            if (LevelObjects == null)
            {
                LevelObjects = new List <SFLevelObject>();
            }

            LevelObjects.Clear();

            if (LevelScripts == null)
            {
                LevelScripts = new List <SFAdvancedObjectScript>();
            }

            LevelScripts.Clear();

            byte[] data;

            if (!_dmaData.TakeMemory(_levelHeaderOffset, LevelHeader.Size, out data))
            {
                return(false);
            }

            LevelHeader = new DataObjects.LevelHeader(_levelHeaderOffset, data);

            int levelObjectOffset = _levelInfoOffset;

            bool one = true;

            while (one)
            {
                if (!_dmaData.TakeMemory(levelObjectOffset, SFLevelObject.Size, out data))
                {
                    break;
                }

                SFLevelObject newObj = new SFLevelObject(levelObjectOffset, data);

                // default dlist offset to 0
                newObj.DListOffset = 0x00;

                // if object id == 0xffff, break out because this marks end of data!
                if (newObj.ID == 0xFFFF)
                {
                    break;
                }

                levelObjectOffset += SFLevelObject.Size;
                LevelObjects.Add(newObj);
            }

            return(true);
        }
Example #5
0
        public async Task LoadData()
        {
            Reader reader = files_array[SMem.Data].reader;

            if (exportTextures)
            {
                string state = loadingState;
                loadingState = "Exporting textures";
                await WaitIfNecessary();

                ExportTextures(reader);
                loadingState = state;
                await WaitIfNecessary();

                return;
            }

            // Load current level data
            loadingState = "Loading level data";
            await WaitIfNecessary();

            LevelHeader lh = GetOrRead <LevelHeader>(reader, (ushort)(CurrentLevel | (ushort)FATEntry.Flag.Fix));

            level        = lh;
            loadingState = "Loading additional object lists";
            await WaitIfNecessary();

            for (ushort i = 0; i < 0x7FFF; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading additional object lists: " + (i + 1);
                    await WaitIfNecessary();
                }
                ObjectsTable ot = GetOrRead <ObjectsTable>(reader, (ushort)(i | (ushort)FATEntry.Flag.Fix));
                if (ot != null)
                {
                    objectsTables.Add(ot);
                }
            }
            for (ushort i = 0; i < 0x8000; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading additional object lists: " + (i + 1);
                    await WaitIfNecessary();
                }
                ObjectsTable ot = GetOrRead <ObjectsTable>(reader, i);
                if (ot != null)
                {
                    objectsTables.Add(ot);
                }
            }

            for (ushort i = 0; i < 0x7FFF; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading waypoints: " + (i + 1);
                    await WaitIfNecessary();
                }
                WayPoint wp = GetOrRead <WayPoint>(reader, (ushort)(i | (ushort)FATEntry.Flag.Fix));
            }
            for (ushort i = 0; i < 0x8000; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading waypoints: " + (i + 1);
                    await WaitIfNecessary();
                }
                WayPoint wp = GetOrRead <WayPoint>(reader, i);
            }
            for (ushort i = 0; i < 0x7FFF; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading graphs: " + (i + 1);
                    await WaitIfNecessary();
                }
                Graph g = GetOrRead <Graph>(reader, (ushort)(i | (ushort)FATEntry.Flag.Fix));
            }
            for (ushort i = 0; i < 0x8000; i++)
            {
                // Only do it a few times because we're trying to load way more than there is,
                // so it takes really long if we yield for everything
                if (i % 4096 == 0)
                {
                    loadingState = "Loading graphs: " + (i + 1);
                    await WaitIfNecessary();
                }
                Graph g = GetOrRead <Graph>(reader, i);
            }
            loadingState = "Initializing hierarchy";
            await WaitIfNecessary();

            if (lh != null)
            {
                if (lh.hierarchyRoot.Value != null)
                {
                    lh.hierarchyRoot.Value.GetGameObject();
                }
            }
        }