Пример #1
0
        public static bool IsAtBufferZone(Vector3 pPoint)
        {
            Vector3 mainBotLeft  = CProjectData.mainHeader.BotLeftCorner;
            Vector3 mainTopRight = CProjectData.mainHeader.TopRightCorner;
            float   distanceFromWholeForestBorder = CUtils.GetDistanceFromBorder(pPoint, mainBotLeft, mainTopRight);

            Vector3 tileBotLeft  = CProjectData.currentTileHeader.BotLeftCorner;
            Vector3 tileTopRight = CProjectData.currentTileHeader.TopRightCorner;


            float distanceFromCurrentTileBorder = CUtils.GetDistanceFromBorder(pPoint, tileBotLeft, tileTopRight);

            //is close at tile border
            if (distanceFromCurrentTileBorder < CProjectData.bufferSize)
            {
                //is close at whole forest border - only corners are considered a buffer zone
                if (distanceFromWholeForestBorder < CProjectData.bufferSize)
                {
                    float distanceXFromCurrentTileBorder =
                        CUtils.GetDistanceFromBorderX(pPoint, tileBotLeft, tileTopRight);
                    float distanceYFromCurrentTileBorder =
                        CUtils.GetDistanceFromBorderY(pPoint, tileBotLeft, tileTopRight);

                    float distanceXFromForest =
                        CUtils.GetDistanceFromBorderX(pPoint, mainBotLeft, mainTopRight);
                    float distanceYFromForest =
                        CUtils.GetDistanceFromBorderY(pPoint, mainBotLeft, mainTopRight);

                    bool isAtTileCorner = distanceXFromCurrentTileBorder < CProjectData.bufferSize &&
                                          distanceYFromCurrentTileBorder < CProjectData.bufferSize;

                    bool isNotAtForestCorner = distanceXFromForest > CProjectData.bufferSize ||
                                               distanceYFromForest > CProjectData.bufferSize;

                    return(isAtTileCorner && isNotAtForestCorner);
                }
                return(true);
            }
            return(false);
        }