public static DataInfoFinder GetDataInfoLocationFromID(int x, int y, int distantion, SaveLoadData.TypePrefabs typeObserver, string id_Observer) { int distantionLocalObjects = 50; DataInfoFinder finder = new DataInfoFinder(); //---------------------------- CASH if (IsUseCashFinderPriorityNPC) { var listFindedLocalObjectsID = Storage.ReaderWorld.CollectionInfoID .Where(p => { Vector2 posT = p.Value.Data.Position; int distToTatget = Math.Max(Math.Abs(x - (int)posT.x), Math.Abs(y - (int)posT.y)); return(distToTatget <= distantionLocalObjects); }) .Select(p => p.Key) .ToList(); } //----------------------------------- var listPowers = Storage.ReaderWorld.CollectionInfoID .Where(p => { //Vector2 posT = p.Value.Data.Position; Vector2 posT = p.Value.FiledPos; int distToTatget = Math.Max(Math.Abs(x - (int)posT.x), Math.Abs(y - (int)posT.y)); return(distToTatget <= distantion); }) .Select(p => { Vector2 posT = p.Value.FiledPos; DataInfoFinder resFinder = new DataInfoFinder() { DistantionToTarget = Math.Max(Math.Abs(x - (int)posT.x), Math.Abs(y - (int)posT.y)), ResultData = p.Value.Data, PowerTarget = Storage.Person.GetPriorityPowerByJoin(typeObserver, p.Value.Data.TypePrefab) }; return(resFinder); }) .ToList(); string id; int power = 0; int powerDist = 0; foreach (DataInfoFinder objDataPower in listPowers) { id = Helper.GetID(objDataPower.ResultData.NameObject); //string id = objDataPower.ResultData; if (id == id_Observer) { continue; } power = objDataPower.PowerTarget; powerDist = (distantion - objDataPower.DistantionToTarget) * 3; power += powerDist; if (finder.ResultPowerData.ContainsKey(id)) { Debug.Log("######### Error finder.ResultPowerData.ContainsKey(id)"); } else { finder.ResultPowerData.Add(id, power); } } int priorityIndex = 0; string selId = string.Empty; foreach (var item in finder.ResultPowerData) { if (priorityIndex < item.Value) { priorityIndex = item.Value; selId = item.Key; } } if (!string.IsNullOrEmpty(selId)) { if (Storage.ReaderWorld.CollectionInfoID.ContainsKey(selId)) { finder.ResultData = Storage.ReaderWorld.CollectionInfoID[selId].Data; } } return(finder); }
//=============================================================================== //public static DataInfoFinder GetDataInfoLocation(Vector2Int fieldPosit, int distantion, PriorityFinder priority, string id_Observer, SaveLoadData.TypePrefabs typeObserver, string id_PrevousTarget) //public static DataInfoFinder GetDataInfoLocation(Vector2Int fieldPosit, int distantion, string id_Observer, SaveLoadData.TypePrefabs typeObserver, string id_PrevousTarget, bool isFoor) public static DataInfoFinder GetDataInfoLocation(int xPos, int yPos, int distantion, string id_Observer, SaveLoadData.TypePrefabs typeObserver, string id_PrevousTarget, bool isFoor) { DataInfoFinder finder = new DataInfoFinder(); Dictionary <string, ModelNPC.ObjectData> locationObjects = new Dictionary <string, ModelNPC.ObjectData>(); int startX = xPos - distantion; int startY = yPos - distantion; int endX = xPos + distantion; int endY = yPos + distantion; if (startX < 1) { startX = 1; } if (startY < 1) { startY = 1; } string id = ""; int power = 0; int powerDist = 0; for (int y = startY; y < endY; y++) { for (int x = startX; x < endX; x++) { string field = Helper.GetNameField(x, y); List <ModelNPC.ObjectData> objects = GetObjectsDataFromGridTest(field); //TEST foreach (ModelNPC.ObjectData objData in objects) { id = Helper.GetID(objData.NameObject); if (id == id_Observer || id == id_PrevousTarget) { continue; } //int power = Storage.Person.GetPriorityPower(objData, priority); if (isFoor) { power = Storage.GenWorld.GetPriorityPowerByJoin(typeObserver, objData.TypePrefab); } else { power = Storage.Person.GetPriorityPowerByJoin(typeObserver, objData.TypePrefab); } //~TEST PRIORITY~ //powerDist = (distantion - Math.Max(Math.Abs(xPos - x), Math.Abs(yPos - y))) * 3; //power += powerDist; if (!finder.ResultPowerData.ContainsKey(id)) { finder.ResultPowerData.Add(id, power); if (!locationObjects.ContainsKey(id)) { locationObjects.Add(id, objData); } } } } } string selId = string.Empty; int top = 20; // 10; //~TEST PRIORITY~ List <string> listTopId = new List <string>(); foreach (var item in finder.ResultPowerData.OrderByDescending(p => p.Value)) { listTopId.Add(item.Key); if (listTopId.Count > top) //top { break; } } if (listTopId.Count() > 0) { int indRnd = UnityEngine.Random.Range(0, listTopId.Count() - 1); selId = listTopId[indRnd]; } //-------------------------- if (!string.IsNullOrEmpty(selId)) { finder.ResultData = locationObjects[selId]; } return(finder); }