private static GraphicsPath AlsPfad(Control woBinIch, LevelArchitekturPfad architekturPfad) { return(architekturPfad.AlsGrafikPfad( woBinIch.ClientSize.Width / 2, woBinIch.ClientSize.Height / 2 )); }
private void LevelDateiLaden(int levelNummer) { var levelDateiName = this.GetLevelDateiname(levelNummer); if (levelDateiName != null) { using (var levelDatei = Assembly.GetExecutingAssembly().GetManifestResourceStream( typeof(RessourcenKlasse), $@"Levels.{ levelDateiName }" )) { using (var levelReader = new StreamReader(levelDatei)) { string levelZeile; var aktuellesMaterial = Medium.Berg; while (!string.IsNullOrEmpty((levelZeile = levelReader.ReadLine()))) { levelZeile = levelZeile.Trim(); if (!levelZeile.StartsWith(kommentarPrefix)) { var levelZeileTeile = levelZeile.Split(' '); if (Enum.TryParse <Medium>(levelZeileTeile[0], ignoreCase: true, out Medium neuesMedium)) { aktuellesMaterial = neuesMedium; } else { this.Pfade.Add(LevelArchitekturPfad.AusLevelDatei(aktuellesMaterial, levelZeile)); } } } } } } }
private static void ZeichneGras(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad) { PointF grasPunktGenau; var random = new Random(); var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad); if (grafikPfad.PointCount == 2) { var sodeAnfang = grafikPfad.PathPoints[0]; var sodeEndpkt = grafikPfad.PathPoints[1]; var letztesBlatt = PointF.Empty; var ueberLappung = PointF.Empty; var ersterDurchlauf = true; foreach (var grasPunkt in LinienFolger.Bresenham( (int)sodeAnfang.X, (int)sodeAnfang.Y, (int)sodeEndpkt.X, (int)sodeEndpkt.Y )) { grasPunktGenau = new PointF(grasPunkt.X, grasPunkt.Y); if (ersterDurchlauf) { letztesBlatt = sodeAnfang; ersterDurchlauf = false; } else { LevelZeichner.RechneBlattPosition(zeichenFlaeche, random, grasPunktGenau, ref letztesBlatt, ref ueberLappung); } } ersterDurchlauf = true; foreach (var grasPunkt in LinienFolger.Bresenham( (int)sodeEndpkt.X, (int)sodeEndpkt.Y, (int)sodeAnfang.X, (int)sodeAnfang.Y )) { grasPunktGenau = new PointF(grasPunkt.X, grasPunkt.Y); if (ersterDurchlauf) { letztesBlatt = sodeEndpkt; ersterDurchlauf = false; } else { LevelZeichner.RechneBlattPosition(zeichenFlaeche, random, grasPunktGenau, ref letztesBlatt, ref ueberLappung); } } zeichenFlaeche.DrawPath(Pens.LimeGreen, grafikPfad); } }
private static void ZeichneEi(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad) { var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad); if (architekturPfad.IstGefuellt) { zeichenFlaeche.FillEllipse( Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial), grafikPfad.PathPoints[0].X, grafikPfad.PathPoints[0].Y, Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1, Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1 ); } zeichenFlaeche.DrawEllipse( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints[0].X, grafikPfad.PathPoints[0].Y, Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1, Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1 ); }
private static void ZeichneGummiband(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad) { var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad); if (architekturPfad.IstRechteck || architekturPfad.IstGefuellt) { /* gefüllt geht nur als geschlossene kurva */ if (architekturPfad.IstGefuellt) { zeichenFlaeche.FillClosedCurve( Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial), grafikPfad.PathPoints, FillMode.Alternate, 0.62f ); } zeichenFlaeche.DrawClosedCurve( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints, 0.62f, FillMode.Alternate ); } else { zeichenFlaeche.DrawCurve( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints, 0.62f ); } }
private static void ZeichnePfad(Control woBinIch, Graphics zeichenFlaeche, LevelArchitekturPfad architekturPfad) { var grafikPfad = LevelZeichner.AlsPfad(woBinIch, architekturPfad); if (architekturPfad.IstPunkt) { zeichenFlaeche.DrawLine( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints[0], grafikPfad.PathPoints[0] ); } else if (architekturPfad.IstLinie) { if (architekturPfad.IstRechteck) { if (architekturPfad.IstGefuellt) { zeichenFlaeche.FillRectangle( Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial), grafikPfad.PathPoints[0].X, grafikPfad.PathPoints[0].Y, Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1, Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1 ); } zeichenFlaeche.DrawRectangle( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints[0].X, grafikPfad.PathPoints[0].Y, Math.Abs(grafikPfad.PathPoints[1].X - grafikPfad.PathPoints[0].X) + 1, Math.Abs(grafikPfad.PathPoints[1].Y - grafikPfad.PathPoints[0].Y) + 1 ); } else { zeichenFlaeche.DrawLine( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad.PathPoints[0], grafikPfad.PathPoints[1] ); } } else { if (architekturPfad.IstGefuellt) { zeichenFlaeche.FillPath( Farbverwaltung.BuersteVonMedium(architekturPfad.terrainMaterial), grafikPfad ); } else { zeichenFlaeche.DrawPath( Farbverwaltung.StiftVonMedium(architekturPfad.terrainMaterial, architekturPfad.StiftDicke), grafikPfad ); } } }