예제 #1
0
파일: Colors.cs 프로젝트: yazici/FRONTIERS
        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);
        }
예제 #2
0
    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;
    }