private byte[] GetLevelData(Level level) { MemoryStream ms = new MemoryStream(); LevelWriter writer = new LevelWriter(ms); writer.Write(level, LevelWriter.DefaultFileVersion); return(ms.ToArray()); }
/// <summary> /// Configures the logging of error messages. /// </summary> private static void CreateErrorLogger() { string directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); ArchiveWriter archiveWriter = new ArchiveWriter(directory + @"\logs", "error"); LevelWriter levelWriter = new LevelWriter(archiveWriter, new[] {Logger.eLEVEL.ERROR}); FormatWriter formatWriter = new FormatWriter(levelWriter, new DetailFormat()); Logger.Add(formatWriter); }
private void mnuLevelExport_Click(object sender, EventArgs e) { Level level = SelectedNode.Tag as Level; SaveFileDialog dialog = new SaveFileDialog(); dialog.Title = "Export level"; dialog.Filter = "Peggle Level Files (*.dat)|*.dat"; if (dialog.ShowDialog() == DialogResult.OK) { LevelWriter writer = new LevelWriter(dialog.FileName); writer.Write(level, LevelWriter.DefaultFileVersion); } }
public static bool SaveLevel(Level level, bool isUserPath) { string directory = Application.streamingAssetsPath; if (isUserPath) { directory += "/User"; } directory += levelFilesPath; LevelWriter writer = new LevelWriter(level, directory + level.name + levelFilesEnding); try { writer.WriteLevel(); } catch (Exception ex) { Debug.LogError(ex.ToString()); return(false); } return(true); }
private void OnGUISave() { EditorGUILayout.Space(); EditorGUILayout.LabelField("SAVE LEVELS", EditorStyles.boldLabel); EditorGUILayout.LabelField("Levels read method", EditorStyles.label); levelReadMethod = GUILayout.SelectionGrid(levelReadMethod, readingMethodDesc, 3); createdLevelsFolder = EditorGUILayout.ObjectField(new GUIContent("Created levels folder ", createdLevelsFolderDesc), createdLevelsFolder, typeof(Object), true); savedLevelsFileName = EditorGUILayout.TextField(new GUIContent("Levels file name", savedLevelsFileNameDesc), savedLevelsFileName); tileContainerName = EditorGUILayout.TextField(new GUIContent("Tile container name", tileContainerNameDesc), tileContainerName); GUI.enabled = createdLevelsFolder != null && savedLevelsFileName != "" && tileContainerName != ""; if (GUILayout.Button("SAVE")) { string currentScenePath = SceneManager.GetActiveScene().path; EditorSceneManager.SaveScene(SceneManager.GetActiveScene()); LevelWriter.SaveLevelsToFile(createdLevelsFolder, savedLevelsFileName, tileContainerName, levelReadMethod, currentScenePath); } GUI.enabled = true; }
public void ReadLevel(int level, LevelWriter writer, CancellationToken ct) { Contract.Requires(level >= 0 && writer != null); ct.ThrowIfCancellationRequested(); if (!m_hasJumpTable) { throw new InvalidOperationException("Cannot read a level without reading the Jump Table first!"); } int itemCount = checked (1 << level); var address = m_jumpTable[level]; if (address.Offset < m_dataStart || address.Offset > m_dataEnd) { throw ParseError("Level {0} offset ({1}) is invalid", level, address.Offset); } if (checked (address.Offset + address.PaddedSize) > m_dataEnd) { throw ParseError("Level {0} size ({1}) is invalid", level, address.PaddedSize); } var reader = m_file.CreateReader(address.Offset, address.PaddedSize); // "LVL_" var signature = reader.ReadFixed32(); // Level Flags var flags = reader.ReadFixed32(); // Level ID int levelId = (int)reader.ReadFixed32(); // Item count (always 2^level) int levelCount = (int)reader.ReadFixed32(); if (signature != SnapshotFormat.LEVEL_MAGIC_NUMBER) { throw ParseError("Page does not appear to be a valid Level header"); } //TODO: check flags if (levelId != level) { throw ParseError("Page contains the header of a different Level ({0} != {1})", levelId, level); } if (levelCount != itemCount) { throw ParseError("Item count ({0}) in level {1} header is not valid", levelCount, level); } for (int i = 0; i < levelCount; i++) { // read the key uint keySize = reader.ReadVarint32(); if (keySize > MemoryDatabaseHandler.MAX_KEY_SIZE) { throw ParseError("Key size ({0}) is too big", keySize); } USlice key = keySize == 0 ? USlice.Nil : reader.ReadBytes(keySize); // read the sequence ulong sequence = reader.ReadVarint64(); // read the value uint valueSize = reader.ReadVarint32(); if (valueSize > MemoryDatabaseHandler.MAX_VALUE_SIZE) { throw ParseError("Value size ({0) is too big", valueSize); } USlice value = valueSize == 0 ? USlice.Nil : reader.ReadBytes(valueSize); writer.Add(sequence, key, value); } if (reader.ReadFixed32() != uint.MaxValue) { throw ParseError("Invalid end marker in level"); } //TODO: check end marker, CRC, ... ? uint checksum = reader.ReadFixed32(); //TODO: verify checksum! }
public void WriteGenericData(BinaryWriter bw, int version) { //Set flags FlagGroup f = new FlagGroup(); f[0] = (mRolly != 0.0f); f[1] = (mBouncy != 0.0f); f[2] = HasPegInfo; f[3] = HasMovementInfo; f[5] = mCollision; f[6] = mVisible; f[7] = mCanMove; f[8] = (mSolidColour != Color.Black); f[9] = (mOutlineColour != Color.Black); f[10] = !String.IsNullOrEmpty(mImageFilename); f[11] = (mImageDX != 0.0f); f[12] = (mImageDY != 0.0f); f[13] = (mImageRotation != 0.0f); f[14] = mBackground; f[15] = mBaseObject; f[17] = !String.IsNullOrEmpty(mID); f[19] = (mSound != 0); f[20] = mBallStopReset; f[21] = !String.IsNullOrEmpty(mLogic); f[22] = mForeground; f[23] = (mMaxBounceVelocity != 0.0f); f[24] = mDrawSort; f[25] = mForeground2; f[26] = (mSubID != 0); f[27] = (mFlipperFlags != 0); f[28] = mDrawFloat; f[30] = (mShadow && version >= 0x50); //Write data bw.Write(f.Int32); if (f[0]) { bw.Write(mRolly); } if (f[1]) { bw.Write(mBouncy); } if (f[8]) { bw.Write(mSolidColour.ToArgb()); } if (f[9]) { bw.Write(mOutlineColour.ToArgb()); } if (f[10]) { LevelWriter.WritePopcapString(bw, mImageFilename); } if (f[11]) { bw.Write(mImageDX); } if (f[12]) { bw.Write(mImageDY); } if (f[13]) { bw.Write(MathExt.ToRadians(mImageRotation)); } if (f[17]) { LevelWriter.WritePopcapString(bw, mID); } if (f[19]) { bw.Write(mSolidColour.ToArgb()); } if (f[21]) { LevelWriter.WritePopcapString(bw, mLogic); } if (f[23]) { bw.Write(mMaxBounceVelocity); } if (f[26]) { bw.Write(mSubID); } if (f[27]) { bw.Write(mFlipperFlags); } if (f[2]) { mPegInfo.WriteData(bw, version); } if (f[3]) { mMovement.WriteData(bw, version); } }
public override void WriteData(BinaryWriter bw, int version) { FlagGroup fA = new FlagGroup(); fA[2] = mTransparancy; fA[4] = mRandomStartPosition; if (!HasMovementInfo) { fA[5] = true; } fA[6] = mChangeUnknown; fA[7] = mChangeScale; fA[8] = mChangeColour; fA[9] = mChangeOpacity; fA[10] = mChangeVelocity; fA[11] = mChangeDirection; fA[12] = mChangeRotation; fA[14] = true; //Needed to make it visible? bw.Write(mMainVar); bw.Write(fA.Int16); LevelWriter.WritePopcapString(bw, mImage); bw.Write(mWidth); bw.Write(mHeight); if (mMainVar == 2) { bw.Write(mMainVar0); bw.Write(mMainVar1); LevelWriter.WritePopcapString(bw, mMainVar2); bw.Write(mMainVar3); if (fA[13]) { mUnknown0.WriteData(bw); mUnknown1.WriteData(bw); } } if (fA[5]) { bw.Write(X); bw.Write(Y); } LevelWriter.WritePopcapString(bw, mEmitImage); bw.Write(mUnknownEmitRate); bw.Write(mUnknown2); bw.Write(mRotation); bw.Write(mMaxQuantity); bw.Write(mTimeBeforeFadeOut); bw.Write(mFadeInTime); bw.Write(mLifeDuration); mEmitRate.WriteData(bw); mEmitAreaMultiplier.WriteData(bw); if (fA[12]) { mInitialRotation.WriteData(bw); mRotationVelocity.WriteData(bw); bw.Write(mRotationUnknown); } if (fA[7]) { mMinScale.WriteData(bw); mScaleVelocity.WriteData(bw); bw.Write(mMaxRandScale); } if (fA[8]) { mColourRed.WriteData(bw); mColourGreen.WriteData(bw); mColourBlue.WriteData(bw); } if (fA[9]) { mOpacity.WriteData(bw); } if (fA[10]) { mMinVelocityX.WriteData(bw); mMinVelocityY.WriteData(bw); bw.Write(mMaxVelocityX); bw.Write(mMaxVelocityY); bw.Write(mAccelerationX); bw.Write(mAccelerationY); } if (fA[11]) { bw.Write(mDirectionSpeed); bw.Write(mDirectionRandomSpeed); bw.Write(mDirectionAcceleration); bw.Write(mDirectionAngle); bw.Write(mDirectionRandomAngle); } if (fA[6]) { bw.Write(mUnknownA); bw.Write(mUnknownB); } }