/// <summary> /// Zwraca punkt, który jest w stosunku do obecnego punktu w /// określonym kierunku /// </summary> /// <param name="current">Obecna pozycja</param> /// <param name="course">Kurs</param> /// <returns>Obliczona pozycja na zadanym kursie</returns> public static Point3 ToRelativePoint3(Point3 current, Neswdu course) { if (course.HasFlag(Neswdu.North)) { return(new Point3(current, 0, -1, 0)); } if (course.HasFlag(Neswdu.East)) { return(new Point3(current, 1, 0, 0)); } if (course.HasFlag(Neswdu.South)) { return(new Point3(current, 0, 1, 0)); } if (course.HasFlag(Neswdu.West)) { return(new Point3(current, -1, 0, 0)); } if (course.HasFlag(Neswdu.Down)) { return(new Point3(current, 0, 0, -1)); } if (course.HasFlag(Neswdu.Up)) { return(new Point3(current, 0, 0, 1)); } return(current); }
/// <summary> /// Skrócony konstruktor ustawiający najważniejsze elementy lokacji /// </summary> /// <param name="x">Pozycja w osi X</param> /// <param name="y">Pozycja w osi Y</param> /// <param name="z">Pozycja w osi Z</param> /// <param name="name">Nazwa lokacji</param> /// <param name="desc">Opis lokacji</param> /// <param name="neswdu">Dozwolone kierunki poruszania się</param> public Location(int x, int y, int z, string name, string desc, Neswdu neswdu) { Coordinates = new Point3 { X = x, Y = y, Z = z }; Name = name; Description = desc; Neswdu = neswdu; HiddenNeswdu = neswdu; Enemies = null; }
/// <summary> /// Przekształca zmienną typu Neswdu na łańcuch znaków w języku /// polskim. W przypadku jeżeli Neswdu określa więcej niż jeden /// dozwolony kierunek, zmienna wynikowa będzie zawierać /// wszystkie, oddzielone spacją. /// </summary> /// <param name="course">Zmienna z kierunkami</param> /// <returns>Łańcuch znaków w języku polskim</returns> public static string ToNaturalLanguage(Neswdu course) { StringBuilder sb = new StringBuilder(); if (course.HasFlag(Neswdu.North)) { sb.Append("północ"); sb.Append(" "); } if (course.HasFlag(Neswdu.East)) { sb.Append("wschód"); sb.Append(" "); } if (course.HasFlag(Neswdu.South)) { sb.Append("południe"); sb.Append(" "); } if (course.HasFlag(Neswdu.West)) { sb.Append("zachód"); sb.Append(" "); } if (course.HasFlag(Neswdu.Down)) { sb.Append("dół"); sb.Append(" "); } if (course.HasFlag(Neswdu.Up)) { sb.Append("góra"); sb.Append(" "); } return(sb.ToString().Trim()); }
/// <summary> /// Obsługuje możliwość "pójścia" w daną stronę lub pokazuje /// komunikat, że jest to niemożliwe /// </summary> /// <param name="course"> /// Kierunek, w którym gracz chce się udać /// </param> private void Go(Neswdu course) { if (NeswduHelper.CanIGo(currentLocation.HiddenNeswdu, course)) { try { currentLocation = currentArea.GetLocation(NeswduHelper.ToRelativePoint3(currentLocation.Coordinates, course)); UpdateLocation(); txtLog.AddToBeginning($"Poszedłeś na {NeswduHelper.ToNaturalLanguage(course)}"); } catch { var m = new MessageDialog("Nie da się załadować tej lokacji"); m.ShowAsync(); } } else { txtLog.AddToBeginning("Nie możesz tam pójść!"); } }
/// <summary> /// Sprawdza, czy możliwe jest przesunięcie się na kurs kiedy /// zmienna lokacji jest ustawiona w dany sposób /// </summary> /// <param name="neswdu">Zmienna określająca dozwolone kierunki</param> /// <param name="course">Zadany kurs</param> /// <returns> /// Zwraca true jeśli jest możliwe przesunięcie się w danym kierunku /// </returns> public static bool CanIGo(Neswdu neswdu, Neswdu course) { return(neswdu.HasFlag(course)); }