예제 #1
0
        public static SkiStuntLevel LoadFolder( string folder )
        {
            SkiStuntLevel level = new SkiStuntLevel( folder );

                if( ! File.Exists( folder + "\\studioFile.txt" ) ) return level;

                StreamReader studioFile = new StreamReader( folder + "\\studioFile.txt", false );

                level.LevelTitle = studioFile.ReadLine();
                level.GoalText   = studioFile.ReadLine();
                level.HintText   = studioFile.ReadLine();

                level.PlayerStart.x = float.Parse( studioFile.ReadLine() );
                level.PlayerStart.y = float.Parse( studioFile.ReadLine() );
                level.endzoneA.x    = float.Parse( studioFile.ReadLine() );
                level.endzoneA.y    = float.Parse( studioFile.ReadLine() );
                level.endzoneB.x    = float.Parse( studioFile.ReadLine() );
                level.endzoneB.y    = float.Parse( studioFile.ReadLine() );
                level.EndzoneRequirements = (EndzoneRequirementType)uint.Parse( studioFile.ReadLine() );

                int vertexCount = int.Parse( studioFile.ReadLine() );
                for( int i = 0 ; i < vertexCount ; ++i )
                {
                    level.vertices.Add( new LevelVertex
                    (
                        float.Parse( studioFile.ReadLine() ),
                        float.Parse( studioFile.ReadLine() ),
                        int  .Parse( studioFile.ReadLine() )
                    ));
                }

                int polygonCount = int.Parse( studioFile.ReadLine() );
                for( int i = 0 ; i < polygonCount ; ++i )
                {
                    LevelPolygon p = new LevelPolygon();

                    p.Friction   = float.Parse( studioFile.ReadLine() );
                    p.Bounce     = float.Parse( studioFile.ReadLine() );
                    p.Solidity   = float.Parse( studioFile.ReadLine() );
                    p.SolidAtAll = bool.Parse(  studioFile.ReadLine() );

                    p.TextureID = int.Parse( studioFile.ReadLine() );
                    if( p.TextureID >= 0 ) {
                        p.TextureOffsetX = float.Parse( studioFile.ReadLine() );
                        p.TextureOffsetY = float.Parse( studioFile.ReadLine() );
                        p.TextureScaleX  = float.Parse( studioFile.ReadLine() );
                        p.TextureScaleY  = float.Parse( studioFile.ReadLine() );
                    } else {
                        p.Color = Color.FromArgb( int.Parse( studioFile.ReadLine() ) );
                    }

                    int polyVertCount = int.Parse( studioFile.ReadLine() );
                    for( int j = 0 ; j < polyVertCount ; ++j )
                    {
                        p.AddVertex( level.vertices[ int.Parse( studioFile.ReadLine() ) ] );
                    }

                    level.AddPolygon( p );
                }

                int objectCount = int.Parse( studioFile.ReadLine() );
                for( int i = 0 ; i < objectCount ; ++i )
                {
                    LevelObject o = new LevelObject();
                    o.x        = float.Parse( studioFile.ReadLine() );
                    o.y        = float.Parse( studioFile.ReadLine() );
                    o.rotation = float.Parse( studioFile.ReadLine() );
                    o.type   = (LevelObject.ObjectType)uint.Parse( studioFile.ReadLine() );
                    o.anchor = (LevelObject.AnchorType)uint.Parse( studioFile.ReadLine() );
                    level.AddObject( o );
                }

                studioFile.Close();

                return level;
        }