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; }
public DeleteObjectAction( LevelObject relevantObject ) { this.relevantObject = relevantObject; }
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; } }