I would like to suggest to add a continent name as a new parameter to the class "Grinderzone" it would allow to easier travelling between continents & taking the right path.
At the current state of the Grinder product for example it doesn't check the continent and taking vectors from a different continent. I've also written methods to check whether vector is on continent by Z axis:
/// <summary> /// Load specific tiles to define the pather by the given location. /// </summary> /// <param name="from">The location.</param> /// <param name="maxDistance">The maximum allowed z-distance.</param> public Pather GetPatherByLocation(Vector3 from, float maxDistance = float.PositiveInfinity) { float d = float.PositiveInfinity; Pather p = null; try { Pather pc = null; Logging.log("Load tiles to define continent..."); foreach (MainContinents continent in Enum.GetValues(typeof(MainContinents))) { pc = GetPather(from, continent); if (Math.Abs(pc.FindZ(from) - from.Z) < d) { p = pc; d = Math.Abs(p.FindZ(from) - from.Z); } pc.Dispose(); } if (d < maxDistance) { Logging.log("Pather for " + from + " found\nContinent: " + p.Continent + "\nDeviation: " + d); return p; } } catch (Exception ex) { Logging.logex("GetPatherByLocation(...):\n" + ex); } Logging.log("GetPatherByLocation(...) failed to load suitable continent: " + d + " < " + maxDistance + " is invalid.\nSuspected continent: " + p.Continent); return GetPather(from, Usefuls.ContinentNameMpq); } /// <summary> /// Initialize new pather. /// </summary> /// <param name="loc">Initial location.</param> /// <param name="continent">Pather's continent.</param> public Pather GetPather(Vector3 loc, MainContinents continent) { try { if (loc != Vector3.Empty) { float x1; float y1; return new Pather(continent.ToString()); } } catch (Exception ex) { Logging.logex("GetPather(Vector3 loc, MainContinents continent):\nContinent: " + continent + "\nLocation: " + loc + "\nThrow an Exception:\n" + ex); } Logging.log("GetPather(Vector3 loc, MainContinents continent) failed to load desired continent: " + Usefuls.ContinentNameMpq); return new Pather(Usefuls.ContinentNameMpq); }
It works so far (i can put a position from a other continent & can get the string from Pather.Continent). But it needs to load the tiles. That's the down-side of it(If there's a better method to define it, let me know please)
i also have written classes to use the returned pather for connections between boats, Zeppelins & portals and have a general algorithm to take the path with the shortest distance with these connections.
But the mentioned method is the only thing left which is a thorn in my eye.
I would like also to suggest to add a continent property to the Vector3 class. So if someone calls this class it will also get the continent & can be saved in profiles
In the end the pather knows exactly where to go on which continent.
ps: i can also upload the classes, if you need them but it has a bit work left.
Recommended Comments
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now