//при клике на какую-нибудь улицу void MouseOver_Street(GameObject ourHitObject) { if (ourHitObject.GetComponent <StreetPath>() != null) { if (Input.GetMouseButton(0) && canMove && _dBwork.GetPlayerbyId(1).GetCurrentStep() && Cameras.mode != 1) { canMove = false; _dBwork.GetPlayerbyId(1).move(ourHitObject.GetComponent <StreetPath>()); } else if (Input.GetMouseButton(0) && canMove && _dBwork.GetPlayerbyId(1).GetCurrentStep() && Cameras.mode == 1) { if (_dBwork.GetWay(_dBwork.GetPlayerbyId(1).CurrentStreetPath.GetIdStreetPath(), ourHitObject.GetComponent <StreetPath>().GetIdStreetPath()).Count == 1) { canMove = false; _dBwork.GetPlayerbyId(1).move(ourHitObject.GetComponent <StreetPath>()); } } else if (Input.GetMouseButton(1) && Cameras.mode != 1) { // показать информацию о улице selectedStreetPath = ourHitObject.GetComponent <StreetPath>(); } else if (!Input.GetMouseButton(0)) { canMove = true; } } else { if (Input.GetMouseButton(0) && canMove && _networkDBwork.GetPlayer().GetCurrentStep() && Cameras.mode != 1) { canMove = false; _networkDBwork.GetPlayer().move(ourHitObject.GetComponent <NetworkStreetPath>()); } else if (Input.GetMouseButton(0) && canMove && _networkDBwork.GetPlayer().GetCurrentStep() && Cameras.mode == 1) { if (_networkDBwork.GetWay(_networkDBwork.GetPlayer().CurrentStreetPath.GetIdStreetPath(), ourHitObject.GetComponent <NetworkStreetPath>().GetIdStreetPath()).Count == 1) { canMove = false; _networkDBwork.GetPlayer().move(ourHitObject.GetComponent <NetworkStreetPath>()); } } else if (Input.GetMouseButton(1) && Cameras.mode != 1) { // показать информацию о улице //selectedStreetPath = ourHitObject.GetComponent<StreetPath>(); } else if (!Input.GetMouseButton(0)) { canMove = true; } } }
//получить информацию об улице из бд public void TakeData(StreetPath streetPath) { this.idStreetParent = streetPath.GetIdStreetParent(); this.idStreetPath = streetPath.GetIdStreetPath(); this.renta = streetPath.GetRenta(); this.start = streetPath.start; this.end = streetPath.end; this.isBridge = streetPath.isBridge; this.namePath = streetPath.namePath; this.CanBuy = streetPath.canBuy; this.nameOfPrefab = streetPath.nameOfPrefab; }
public override void move(StreetPath path) { if (StepsInJail == 0) { if (!isMoving && !corutine) { corutine = true; way = _dbWork.GetWay(currentStreetPath.GetIdStreetPath(), path.GetIdStreetPath()); isCheating = true; _gameCanvas.OnOffSavedButtons(); StartCoroutine(GoBot()); } } }
//получить информацию об игроке из бд public void GetData(Player player) { this.currentSteps = player.CurrentSteps; this.destination = player.Destination; this.idPlayer = player.IdPlayer; this.nickName = player.NickName; this.isBankrupt = player.IsBankrupt; this.maxSteps = player.MaxSteps; this.money = player.Money; this.speed = player.Speed; this.isBot = player.isBot; _dbWork = Camera.main.GetComponent <DBwork>(); this.currentStreetPath = findMyPath(destination); }
//показать информацию об объекте private void onButtonInfoClick(int id, int type) { //type = 1 - streetspaths; 2 - players; 3 - builds string info = ""; switch (type) { case 1: PathForBuy 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 { StreetPath 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); }
//запуск корутины движения public virtual void move(StreetPath path) { if (StepsInJail == 0) { if (!isMoving && !corutine) { corutine = true; way = _dbWork.GetWay(currentStreetPath.GetIdStreetPath(), path.GetIdStreetPath()); if (currentSteps + way.Count > maxSteps && !isGonnaBeCathced && !alreadyCheat) { GameController.aboutPlayer += "Игрок " + NickName + " пытается смухлевать" + "\n"; _gameCanvas.OpenWarningWindow(this); isCheating = true; } _gameCanvas.OnOffSavedButtons(); StartCoroutine(Go()); } } else { _gameCanvas.ShowInfoAboutEvent("Вы заключены под стражу" + "\n" + "Осталось ходов: " + StepsInJail); } }
//корутина движенния бота 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; StreetPath 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"; PathForBuy 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 void updatePath(StreetPath path) { paths[path.GetIdStreetPath()] = path; }
//заполнение массивов игроков, улиц, частей улиц и зданий, исходя из данных в базе данных public void GetEverithing() { players = new Player[dataService.getPlayers().Count + 1]; builds = new Build[dataService.getBuilds().Count + 1]; streets = new Street[dataService.getStreets().Count + 1]; paths = new StreetPath[dataService.getStreetPaths().Count + 1]; pathForBuys = new List <PathForBuy>(); govermentPaths = new List <GovermentPath>(); foreach (Streets streetse in dataService.getStreets()) { List <StreetPaths> streetPathses = dataService.getAllPathsOfStreet(streetse.IdStreet); int[] pathses = new int[streetPathses.Count]; int k = 0; foreach (StreetPaths streetPathse in streetPathses) { PathsForBuy ifExist = dataService.getPathForBuyById(streetPathse.IdStreetPath); if (ifExist != null) { List <Builds> buildses = dataService.getBuildsOnTheStreet(streetPathse.IdStreetPath); int[] buildes = new int[buildses.Count]; int i = 0; foreach (Builds buildse in buildses) { builds[buildse.IdBuild] = buildse.getBuild(); buildes[i] = buildse.IdBuild; i++; } paths[streetPathse.IdStreetPath] = ifExist.GetPathForBuy(streetPathse, buildes); pathForBuys.Add(ifExist.GetPathForBuy(streetPathse, buildes)); } else { List <Events> eventses = dataService.getEventsOnTheStreet(streetPathse.IdStreetPath); Event[] events = new Event[eventses.Count]; int j = 0; if (!streetPathse.NameOfPrefab.Equals("Court")) { events = new Event[eventses.Count + 1]; j++; } foreach (Events eventse in eventses) { events[j] = eventse.GetEvent(); j++; } paths[streetPathse.IdStreetPath] = streetPathse.GetGovermentPath(events); if (streetPathse.NameOfPrefab.Equals("Court")) { court = streetPathse.GetGovermentPath(events); } govermentPaths.Add(streetPathse.GetGovermentPath(events)); } pathses[k] = streetPathse.IdStreetPath; k++; } streets[streetse.IdStreet] = streetse.GetStreet(pathses); } foreach (Players player in dataService.getPlayers()) { players[player.IdPlayer] = player.GetPlayer(); } players[0] = new Player(0, "никто", 0, true, true, Vector3.zero); streets[0] = new Street(0, "", "", new int[1]); paths[0] = new StreetPath(0, "", 0, 0, Vector3.zero, Vector3.zero, false, ""); builds[0] = new Build(0, "", "", 0, 0, false, 0, 0); }
//Корутина движения private IEnumerator Go() { if (alreadyCheat) { _gameCanvas.ShowInfoAboutEvent("Вы уже мухлевали на этом ходе :("); corutine = false; yield break; } bool tried = isCheating; yield return(new WaitUntil(() => isCheating == false)); if (tried && isGonnaBeCathced) { if (Random.Range(0, 2) != 1) { GameController.aboutPlayer += "Игрок " + NickName + " не попался \n"; alreadyCheat = true; isGonnaBeCathced = false; } else { GameController.aboutPlayer += "Игрок " + NickName + " попался \n"; corutine = false; _gameCanvas.gameObject.GetComponent <GameController>().cathedPlayer(); yield break; } } else if (tried) { corutine = false; yield break; } bool endFirstStep = false; int num = way.Count; StreetPath 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++; } corutine = false; _gameCanvas.OnOffSavedButtons(); if (tried && isGonnaBeCathced) { _gameCanvas.GetComponent <GameController>().nextStep(); } }