public static Color GetColorFromWorldPathDifficulty(PathDifficulty difficulty) { if (Get == null) { return(Color.white); } Color difficultyColor = Get.WorldPathDifficultyEasy; switch (difficulty) { case PathDifficulty.Easy: difficultyColor = Get.WorldPathDifficultyEasy; break; case PathDifficulty.Moderate: difficultyColor = Get.WorldPathDifficultyModerate; break; case PathDifficulty.Difficult: difficultyColor = Get.WorldPathDifficultyDifficult; break; case PathDifficulty.Deadly: difficultyColor = Get.WorldPathDifficultyDeadly; break; case PathDifficulty.Impassable: difficultyColor = Get.WorldPathDifficultyImpassable; break; default: break; } return(difficultyColor); }
protected void InterpretEvalPoints() { PathDifficulty finalDifficulty = PathDifficulty.None; if (mEvalPoints.Count > 0) { float lastElevation = 0f; float currentElevation = 0f; //float totalLength = MetersPerStep * mEvalPoints.Count; bool hitWater = false; bool hitTerrainMesh = false; bool skipFirstPoint = true; float currentDifference = 0.0f; List <float> differences = new List <float>(); foreach (EvalPoint point in mEvalPoints) { if (point.HitWater) { hitWater = true; } if (point.HitTerrainMesh) { hitTerrainMesh = true; } if (skipFirstPoint) { skipFirstPoint = false; lastElevation = point.TerrainPosition.y * Globals.InGameUnitsToMeters; } else { currentElevation = point.TerrainPosition.y * Globals.InGameUnitsToMeters; currentDifference = Mathf.Abs(currentElevation - lastElevation) / MetersPerStep; differences.Add(currentDifference); lastElevation = currentElevation; } //GameWorld.Get.AddGraphNode(new TerrainNode(point.TerrainPosition)); } float averageSlopePerMeter = 0f; if (differences.Count > 0) { differences.Average(); } if (averageSlopePerMeter < Globals.PathSlopeDifficultyEasy) // 15.0f) { finalDifficulty = PathDifficulty.Easy; } else if (averageSlopePerMeter < Globals.PathSlopeDifficultyModerate) //25.0f) { finalDifficulty = PathDifficulty.Moderate; } else if (averageSlopePerMeter < Globals.PathSlopeDifficultyDifficult) //50.0f) { finalDifficulty = PathDifficulty.Difficult; } else if (averageSlopePerMeter < Globals.PathSlopeDifficultyDeadly) //100.0f) { finalDifficulty = PathDifficulty.Deadly; } else { finalDifficulty = PathDifficulty.Impassable; } CurrentSegment.State.AverageSlopePerMeter = averageSlopePerMeter; CurrentSegment.State.AverageGroundType = GroundType.Dirt; CurrentSegment.State.PassesOverSolidTerrainMesh &= hitTerrainMesh; CurrentSegment.State.PassesOverFluidTerrain &= hitWater; if (CurrentSegment.State.PassesOverFluidTerrain) { finalDifficulty = PathDifficulty.Impassable; } } CurrentSegment.State.Difficulty = finalDifficulty; }