Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
            }
        }