//кнструктор public NetworkThingForTrade(NetworkPathForBuy pathforTrade, int price, NetworkPlayer forWhichPlayer, NetworkPlayer fromWhichPlayer) { PathforTrade = pathforTrade; Price = price; ForWhichPlayer = forWhichPlayer; FromWhichPlayer = fromWhichPlayer; }
//поличить информацию из дб public void TakeData(NetworkPathForBuy pathForBuy) { base.TakeData(pathForBuy); this.idPlayer = pathForBuy.IdPlayer; this.builds = pathForBuy.Builds; this.priceStreetPath = pathForBuy.PriceStreetPath; }
//разблокировка улицы при выплате полной стоимости private static void UnBlockStreetPath(NetworkPathForBuy pathForBuy, NetworkPlayer ownerPlayer) { if (pathForBuy.IsBlocked && ownerPlayer.Money >= pathForBuy.PriceStreetPath) { pathForBuy.IsBlocked = false; ownerPlayer.Money -= pathForBuy.PriceStreetPath; } }
//обновить данные об участке для продажи public void updatePath(NetworkPathForBuy path) { paths[path.GetIdStreetPath()] = path; for (int i = 0; i < pathForBuys.Count; i++) { if (pathForBuys[i].GetIdStreetPath() == path.GetIdStreetPath()) { pathForBuys[i] = path; } } }
//предложение о торговле от компьютерного игрока private void TryToTrade() { List <int> monopolies = GetMyMonopolies(_dbWork.GetMyPathes(idPlayer)); int count = 0; NetworkPathForBuy trade = null; foreach (int monopoly in monopolies) { foreach (NetworkStreetPath path in _dbWork.GetPathsOfStreet(monopoly)) { if (trade == null) { NetworkPathForBuy pathForBuy = _dbWork.GetPathForBuy(path.GetIdStreetPath()); if (path.canBuy && pathForBuy.IdPlayer != 0 && pathForBuy.IdPlayer != idPlayer) { trade = pathForBuy; count = 1; break; } } } if (trade != null) { break; } } if (trade == null) { return; } // NetworkPlayer player = _dbWork.GetPlayerbyId(trade.IdPlayer); // Trade.CreateListThings(player, this); // Trade.AddItemToList(player, this, trade); // // foreach (NetworkStreetPath streetPath in _dbWork.GetPathsOfStreet(trade.GetIdStreetParent())) // { // NetworkPathForBuy path = _dbWork.GetPathForBuy(streetPath.GetIdStreetPath()); // if (streetPath.CanBuy && path.GetIdStreetPath() != trade.GetIdStreetPath() && // path.IdPlayer == trade.IdPlayer) // { // Trade.AddItemToList(player, this, path); // count++; // } // } // // Trade.AddMoneyToList(player, this, count * price); // ПРЕДЛОЖИТЬ СДЕЛКУ!!! }
//выбор компьютерным игроком пути private int ThinkOfWay() { List <int> ends = _dbWork.GetPossibleEnds(currentStreetPath.GetIdStreetPath(), maxSteps - currentSteps); foreach (int possibleEnd in ends) { NetworkPathForBuy path = _dbWork.GetPathForBuy(possibleEnd); if (CheckIfNeed(possibleEnd) && (path == null || path.IdPlayer == 0)) { return(possibleEnd); } } return(ends[(Random.Range(0, ends.Count - 1))]); }
//блокировка улицы и возмещение её полной стоимости вместе с построенными зданиями игроку private static void BlockStreetPath(NetworkPathForBuy pathForBuy, NetworkPlayer ownerPlayer) { if (!pathForBuy.IsBlocked) { pathForBuy.IsBlocked = true; int sum = 0; sum += pathForBuy.PriceStreetPath; ownerPlayer.Money += sum; } else { UnBlockStreetPath(pathForBuy, ownerPlayer); } }
//показать информацию об объекте private void onButtonInfoClick(int id, int type) { //type = 1 - streetspaths; 2 - players; 3 - builds string info = ""; switch (type) { case 1: NetworkPathForBuy pathForBuy = getDbWork().GetPathForBuy(id); if (pathForBuy != null) { info = "Название: " + pathForBuy.namePath + "\n" + "Владелец: " + getDbWork().GetPlayerbyId(pathForBuy.IdPlayer).NickName + "\n" + "Рента: " + pathForBuy.GetRenta() + "\n" + "Здания: " + pathForBuy.GetBuildsName() + "\n\n Информация об улице: " + getDbWork().getStreetById(pathForBuy.GetIdStreetParent()).AboutStreet; } else { NetworkStreetPath path = getDbWork().GetPathById(id); info = "Название: " + path.namePath + "\n" + "Гос. учереждение \n\n Информация об улице: " + getDbWork().getStreetById(path.GetIdStreetParent()).AboutStreet; } break; case 2: info = getDbWork().GetPlayerbyId(id).NickName + " " + getDbWork().GetPlayerbyId(id).Money; break; case 3: info = getDbWork().GetBuild(id).NameBuild + "\n" + getDbWork().GetBuild(id).AboutBuild; break; } ButtonWithInfo.GetComponentInChildren <Text>().text = info + "\n\n" + "(нажмите, чтобы закрыть)"; ButtonWithInfo.SetActive(true); }
//перемещение к выбранной улице, включение кнопки зданий на этой улице и важной информации об улице private void onButtonStreetClick(int idPath) { if (buildsButton.activeInHierarchy && idPath == currentIdPath) { buildsButton.SetActive(false); ImportantInfoAboutStreetText.transform.parent.gameObject.SetActive(false); } else { currentIdPath = idPath; buildsButton.SetActive(true); idStreetWhichOPened = idPath; ImportantInfoAboutStreetText.transform.parent.gameObject.SetActive(true); ImportantInfoAboutStreetText.gameObject.SetActive(true); NetworkPathForBuy pathForBuy = getDbWork().GetPathForBuy(idPath); camerasScript.SetActiveFirstCamera(); // if (camerasScript.isActiveOrtoCamera()) // { camerasScript.moveOrtoCamera(getDbWork().GetPathById(idPath).transform.position); // } if (pathForBuy != null) { ImportantInfoAboutStreetText.text = "Название: " + pathForBuy.namePath + "\n" + "Владелец: " + getDbWork().GetPlayerbyId(pathForBuy.IdPlayer) .NickName + "\n" + "Рента: " + pathForBuy.GetRenta() + "\n" + "Здания: " + pathForBuy.GetBuildsName(); } else { ImportantInfoAboutStreetText.text = "Название: " + getDbWork().GetPathById(idPath).namePath + "\n" + "Гос. учереждение"; } } }
//если игрок закончил ход на чужой улице, то с него снимается плата в пользу игрока, владеющего этой улицей void checkPlayer(int idPlayer) { NetworkPlayer ourPlayer = _dBwork.GetPlayerbyId(idPlayer); if (ourPlayer.GetCurrentStreetPath().canBuy) { NetworkPathForBuy path = _dBwork.GetPathForBuy(ourPlayer.GetCurrentStreetPath().GetIdStreetPath()); if (path.IdPlayer != 0 && path.IdPlayer != idPlayer) { path.StepOnMe(idPlayer); } } else { NetworkGovermentPath path = _dBwork.GetGovermentPath(ourPlayer.GetCurrentStreetPath().GetIdStreetPath()); path.StepOnMe(idPlayer); } if (ourPlayer.Money <= 0) { CheckForBankrupt(ourPlayer); } }
//корутина движенния бота private IEnumerator GoBot() { if (!isCheating) { _gameCanvas.OnOffSavedButtons(); way = _dbWork.GetWay(currentStreetPath.GetIdStreetPath(), ThinkOfWay()); bool tried = (Random.value * 100 > 95); if (tried) { GameController.aboutPlayer += "Игрок " + NickName + " пытался смухлевать \n"; if (Random.Range(0, 2) != 1) { GetCheat(); GameController.aboutPlayer += "Игрок " + NickName + " не попался \n"; alreadyCheat = true; } else { GameController.aboutPlayer += "Игрок " + NickName + " попался \n"; corutine = false; _gameCanvas.gameObject.GetComponent <GameController>().cathedPlayer(); yield break; } } } while (currentSteps < maxSteps || isCheating && way.Count > 0) { bool endFirstStep = false; int num = way.Count; NetworkStreetPath somewhere = null; for (int i = 0; i < num; i++) { if (i != 0) { somewhere = _dbWork.GetPathById(way.Dequeue()); } if (i == 0 && !endFirstStep) { somewhere = _dbWork.GetPathById(way.Dequeue()); if (currentStreetPath.isBridge && (currentStreetPath.start.Equals(somewhere.start) || currentStreetPath.start.Equals(somewhere.end))) { destination = currentStreetPath.start; angle = MapBuilder.Angle(transform.position, destination); yield return(new WaitUntil(() => transform.position == destination)); } else { destination = currentStreetPath.end; angle = MapBuilder.Angle(transform.position, destination); yield return(new WaitUntil(() => transform.position == destination)); } endFirstStep = true; i--; continue; } if (i == num - 1) { destination = MapBuilder.GetCenter(somewhere.start, somewhere.end); angle = MapBuilder.Angle(transform.position, destination); currentStreetPath = somewhere; yield return(new WaitUntil(() => transform.position == destination)); } else { if (somewhere.isBridge && transform.position.Equals(somewhere.end)) { destination = somewhere.start; angle = MapBuilder.Angle(transform.position, destination); yield return(new WaitUntil(() => transform.position == destination)); } else { destination = somewhere.end; angle = MapBuilder.Angle(transform.position, destination); yield return(new WaitUntil(() => transform.position == destination)); } } currentSteps++; } } GameController.aboutPlayer += "Игрок " + NickName + " пришел на " + currentStreetPath.namePath + "\n"; NetworkPathForBuy pathForBuy = _dbWork.GetPathForBuy(currentStreetPath.GetIdStreetPath()); if (currentStreetPath.CanBuy && pathForBuy.IdPlayer == 0 && money > pathForBuy.PriceStreetPath) { GameController.aboutPlayer += "Игрок " + NickName + " купил " + currentStreetPath.namePath + "\n"; pathForBuy.Buy(this); } corutine = false; ready = true; _gameCanvas.OnOffSavedButtons(); }
//удаление из списка предложений товара public static void RemoveItemFromList(NetworkPlayer playerFrom, NetworkPlayer playerFor, NetworkPathForBuy path) { if (playerFrom.IdPlayer < playerFor.IdPlayer) { foreach (NetworkThingForTrade thingForTrade in things[playerFrom.IdPlayer, playerFor.IdPlayer]) { if (thingForTrade.ForWhichPlayer == playerFor && thingForTrade.FromWhichPlayer == playerFrom && thingForTrade.PathforTrade == path) { things[playerFrom.IdPlayer, playerFor.IdPlayer].Remove(thingForTrade); break; } } } else { foreach (NetworkThingForTrade thingForTrade in things[playerFor.IdPlayer, playerFrom.IdPlayer]) { if (thingForTrade.ForWhichPlayer == playerFor && thingForTrade.FromWhichPlayer == playerFrom && thingForTrade.PathforTrade == path) { things[playerFor.IdPlayer, playerFrom.IdPlayer].Remove(thingForTrade); break; } } } }
//добавление в список предложений товара public static void AddItemToList(NetworkPlayer playerFrom, NetworkPlayer playerFor, NetworkPathForBuy path) { if (playerFrom.IdPlayer < playerFor.IdPlayer) { things[playerFrom.IdPlayer, playerFor.IdPlayer].Add(new NetworkThingForTrade(path, 0, playerFor, playerFrom)); } else { things[playerFor.IdPlayer, playerFrom.IdPlayer].Add(new NetworkThingForTrade(path, 0, playerFor, playerFrom)); } }