public SkiStuntLevel( string levelFolder )
        {
            vertices = new List<LevelVertex>();
                polygons = new List<LevelPolygon>();
                objects  = new List<LevelObject>();

                playerStart = new LevelObject( LevelObject.ObjectType.PlayerStart,    0, -10 );
                endzoneA    = new LevelObject( LevelObject.ObjectType.EndzoneHandle, 10,  10 );
                endzoneB    = new LevelObject( LevelObject.ObjectType.EndzoneHandle, 20,  20 );

                this.LevelFolder = levelFolder;

                EndzoneRequirements = EndzoneRequirementType.Unconcious;
                LevelTitle = "New Level";

                StartWithJetpack = false;
                GoalText = "";
                HintText = "";

                textureList = new TextureList( levelFolder );
        }
 public void RemoveObject( LevelObject obj )
 {
     if( ! objects.Contains( obj ) ) return;
         if( obj.type == LevelObject.ObjectType.PlayerStart ) return; // Can not delete player start position.
         objects.Remove( obj );
 }
 public void AddObject( LevelObject obj )
 {
     /*		if( obj.type == LevelObject.ObjectType.PlayerStart ) {
             playerStart = obj;
         }
         else if( obj.type == LevelObject.ObjectType.EndzoneHandle ) {
             return;
         //	endzoneTopLeft = obj;
         }
     /*		else if( obj.type == LevelObject.ObjectType.EndzoneBottomRight ) {
             endzoneBottomRight = obj;
         }
     */
         if( ! objects.Contains( obj ) ) {
             objects.Add( obj );
         }
 }
        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;
        }
Beispiel #5
0
 public DeleteObjectAction( LevelObject relevantObject )
 {
     this.relevantObject = relevantObject;
 }
Beispiel #6
0
 public InsertObjectAction( LevelObject relevantObject )
 {
     this.relevantObject = relevantObject;
 }
        public static void RenderObject( Graphics gfx, LevelObject o, Pen oPen, Vector2D camera, float scale )
        {
            switch( o.type )
                {
                    case LevelObject.ObjectType.PlayerStart:
                        Vector2D p1 = new Vector2D( -0.75f,  0.5f, o.rotation );
                        Vector2D p2 = new Vector2D(  1.25f,  0.5f, o.rotation );
                        Vector2D p3 = new Vector2D(     0f, -1.5f, o.rotation );
                        Vector2D p4 = new Vector2D(     0f,  0.5f, o.rotation );
                        gfx.DrawLine( oPen,
                            scale*( o.x + p1.x - camera.x ),
                            scale*( o.y + p1.y - camera.y ),
                            scale*( o.x + p2.x - camera.x ),
                            scale*( o.y + p2.y - camera.y ) );
                        gfx.DrawLine( oPen,
                            scale*( o.x + p3.x - camera.x ),
                            scale*( o.y + p3.y - camera.y ),
                            scale*( o.x + p4.x - camera.x ),
                            scale*( o.y + p4.y - camera.y ) );
                        break;

                    case LevelObject.ObjectType.BigRock:
                        drawRotatedRectangle( gfx, oPen, scale, o.x, o.y, camera.x, camera.y,
                            0f, -0.375f,
                            1f, -0.375f,
                            1f,  0.375f,
                            0f,  0.375f, o.rotation );
                        break;

                    case LevelObject.ObjectType.Tree:
                        Vector2D p5 = new Vector2D( -1f,  0f, o.rotation );
                        Vector2D p6 = new Vector2D(  1f,  0f, o.rotation );
                        Vector2D p7 = new Vector2D(  0f, -3f, o.rotation );
                        gfx.DrawLine( oPen,
                            scale*( o.x + p5.x - camera.x ),
                            scale*( o.y + p5.y - camera.y ),
                            scale*( o.x + p6.x - camera.x ),
                            scale*( o.y + p6.y - camera.y )
                        );
                        gfx.DrawLine( oPen,
                            scale*( o.x + p6.x - camera.x ),
                            scale*( o.y + p6.y - camera.y ),
                            scale*( o.x + p7.x - camera.x ),
                            scale*( o.y + p7.y - camera.y )
                        );
                        gfx.DrawLine( oPen,
                            scale*( o.x + p7.x - camera.x ),
                            scale*( o.y + p7.y - camera.y ),
                            scale*( o.x + p5.x - camera.x ),
                            scale*( o.y + p5.y - camera.y )
                        );
                        break;

                    case LevelObject.ObjectType.BigBall:
                        Vector2D p8 = new Vector2D( 0.4f, -0.8f, o.rotation );
                        gfx.DrawEllipse( oPen,
                            scale*( o.x - 0.8f + p8.x - camera.x ),
                            scale*( o.y - 0.8f + p8.y - camera.y ),
                            1.6f*scale, 1.6f*scale );
                        break;

                    case LevelObject.ObjectType.SnowmanHead:
                        Vector2D p9 = new Vector2D( 0.2f, -0.4f, o.rotation );
                        gfx.DrawEllipse( oPen,
                            scale*( o.x - 0.4f + p9.x - camera.x ),
                            scale*( o.y - 0.4f + p9.y - camera.y ),
                            0.8f*scale, 0.8f*scale );
                        break;

                    case LevelObject.ObjectType.GiantSpBoard:
                        drawRotatedRectangle( gfx, oPen, scale, o.x, o.y, camera.x, camera.y,
                                              0f, 0f,
                                              7f, 0f,
                                              7f, 0.4f,
                                              0f, 0.4f, o.rotation );
                        Vector2D pA = new Vector2D( 7f, 0.4f, o.rotation );
                        gfx.DrawLine( oPen,
                            scale*( o.x        - camera.x ),
                            scale*( o.y        - camera.y ),
                            scale*( o.x + pA.x - camera.x ),
                            scale*( o.y + pA.y - camera.y )
                        );
                        break;

                    case LevelObject.ObjectType.SeeSaw:
                        drawRotatedRectangle( gfx, oPen, scale, o.x, o.y, camera.x, camera.y,
                                              0f, 0f,
                                              5f, 0f,
                                              5f, 0.4f,
                                              0f, 0.4f, o.rotation );
                        break;

                    case LevelObject.ObjectType.NopackCrate:
                        Vector2D pB = new Vector2D( 0.2f, -0.8f, o.rotation );
                        Vector2D pC = new Vector2D( 0.8f, -0.2f, o.rotation );
                        gfx.DrawLine( oPen,
                            scale*( o.x + pB.x - camera.x ),
                            scale*( o.y + pB.y - camera.y ),
                            scale*( o.x + pC.x - camera.x ),
                            scale*( o.y + pC.y - camera.y )
                        );
                        goto case LevelObject.ObjectType.JetpackCrate;

                    case LevelObject.ObjectType.JetpackCrate:
                        Vector2D pD = new Vector2D( 0.7f, -0.7f, o.rotation );
                        Vector2D pE = new Vector2D( 0.3f, -0.3f, o.rotation );
                        gfx.DrawLine( oPen,
                            scale*( o.x + pD.x - camera.x ),
                            scale*( o.y + pD.y - camera.y ),
                            scale*( o.x + pE.x - camera.x ),
                            scale*( o.y + pE.y - camera.y )
                        );
                        goto case LevelObject.ObjectType.Crate;

                    case LevelObject.ObjectType.Crate:
                        drawRotatedRectangle( gfx, oPen, scale, o.x, o.y, camera.x, camera.y,
                            0f,  0f,
                            1f,  0f,
                            1f, -1f,
                            0f, -1f, o.rotation );
                        break;
                }
        }