void Start() { if (!surfing) { updateMount(false); } updateAnimation("walk", walkFPS); StartCoroutine("animateSprite"); animPause = true; reflect(false); followerScript.reflect(false); updateDirection(direction); StartCoroutine(control()); //Check current map RaycastHit[] hitRays = Physics.RaycastAll(transform.position + Vector3.up, Vector3.down); int closestIndex = -1; float closestDistance = float.PositiveInfinity; if (hitRays.Length > 0) { for (int i = 0; i < hitRays.Length; i++) { if (hitRays[i].collider.gameObject.GetComponent <MapCollider>() != null) { if (hitRays[i].distance < closestDistance) { closestDistance = hitRays[i].distance; closestIndex = i; } } } } if (closestIndex != -1) { currentMap = hitRays[closestIndex].collider.gameObject.GetComponent <MapCollider>(); } else { //if no map found //Check for map in front of player's direction hitRays = Physics.RaycastAll(transform.position + Vector3.up + getForwardVectorRaw(), Vector3.down); closestIndex = -1; closestDistance = float.PositiveInfinity; if (hitRays.Length > 0) { for (int i = 0; i < hitRays.Length; i++) { if (hitRays[i].collider.gameObject.GetComponent <MapCollider>() != null) { if (hitRays[i].distance < closestDistance) { closestDistance = hitRays[i].distance; closestIndex = i; } } } } if (closestIndex != -1) { currentMap = hitRays[closestIndex].collider.gameObject.GetComponent <MapCollider>(); } else { Debug.Log("no map found"); } } if (currentMap != null) { accessedMapSettings = currentMap.gameObject.GetComponent <MapSettings>(); if (accessedAudio != accessedMapSettings.getBGM()) { //if audio is not already playing accessedAudio = accessedMapSettings.getBGM(); accessedAudioLoopStartSamples = accessedMapSettings.getBGMLoopStartSamples(); BgmHandler.main.PlayMain(accessedAudio, accessedAudioLoopStartSamples); } if (accessedMapSettings.mapNameBoxTexture != null) { MapName.display(accessedMapSettings.mapNameBoxTexture, accessedMapSettings.mapName, accessedMapSettings.mapNameColor); } } //check position for transparent bumpEvents Collider transparentCollider = null; Collider[] hitColliders = Physics.OverlapSphere(transform.position, 0.4f); if (hitColliders.Length > 0) { for (int i = 0; i < hitColliders.Length; i++) { if (hitColliders[i].name.ToLowerInvariant().Contains("_transparent")) { if (!hitColliders[i].name.ToLowerInvariant().Contains("player") && !hitColliders[i].name.ToLowerInvariant().Contains("follower")) { transparentCollider = hitColliders[i]; } } } } if (transparentCollider != null) { //send bump message to the object's parent object transparentCollider.transform.parent.gameObject.SendMessage("bump", SendMessageOptions.DontRequireReceiver); } //DEBUG if (accessedMapSettings != null) { WildPokemonInitialiser[] encounterList = accessedMapSettings.getEncounterList(WildPokemonInitialiser.Location.Standard); string namez = ""; for (int i = 0; i < encounterList.Length; i++) { namez += PokemonDatabase.getPokemon(encounterList[i].ID).getName() + ", "; } Debug.Log("Wild Pokemon for map \"" + accessedMapSettings.mapName + "\": " + namez); } // GlobalVariables.global.resetFollower(); }
void Start() { if (!surfing) { updateMount(false); } updateAnimation("walk", walkFPS); StartCoroutine(animateSprite()); animPause = true; reflect(false); updateDirection(direction); //Check current map RaycastHit[] hitRays = Physics.RaycastAll(transform.position + Vector3.up, Vector3.down); int closestIndex; float closestDistance; CheckHitRaycastDistance(hitRays, out closestIndex, out closestDistance); if (closestIndex >= 0) { currentMap = hitRays[closestIndex].collider.gameObject.GetComponent <MapCollider>(); } else { //if no map found //Check for map in front of player's direction hitRays = Physics.RaycastAll(transform.position + Vector3.up + getForwardVectorRaw(), Vector3.down); CheckHitRaycastDistance(hitRays, out closestIndex, out closestDistance); if (closestIndex >= 0) { currentMap = hitRays[closestIndex].collider.gameObject.GetComponent <MapCollider>(); } else { GlobalVariables.global.debug("no map found"); } } if (currentMap != null) { accessedMapSettings = currentMap.gameObject.GetComponent <MapSettings>(); AudioClip audioClip = accessedMapSettings.getBGM(); int loopStartSamples = accessedMapSettings.getBGMLoopStartSamples(); if (accessedAudio != audioClip) { //if audio is not already playing accessedAudio = audioClip; accessedAudioLoopStartSamples = loopStartSamples; BgmHandler.main.PlayMain(accessedAudio, accessedAudioLoopStartSamples); } if (accessedMapSettings.mapNameBoxTexture != null) { MapName.display(accessedMapSettings.mapNameBoxTexture, accessedMapSettings.mapName, accessedMapSettings.mapNameColor); } } //check position for transparent bumpEvents Collider transparentCollider = null; Collider[] hitColliders = Physics.OverlapSphere(transform.position, 0.4f); transparentCollider = hitColliders.LastOrDefault(collider => collider.name.ToLowerInvariant().Contains("_transparent") && !collider.name.ToLowerInvariant().Contains("player") && !collider.name.ToLowerInvariant().Contains("follower")); if (transparentCollider != null) { //send bump message to the object's parent object transparentCollider.transform.parent.gameObject.SendMessage("bump", SendMessageOptions.DontRequireReceiver); } //DEBUG if (accessedMapSettings != null) { string pkmnNames = ""; foreach (var encounter in accessedMapSettings.getEncounterList(WildPokemonInitialiser.Location.Standard)) { pkmnNames += PokemonDatabase.getPokemon(encounter.ID).getName() + ", "; } GlobalVariables.global.debug("Wild Pokemon for map \"" + accessedMapSettings.mapName + "\": " + pkmnNames); } // }
private IEnumerator runEvent(CustomEventTree[] treesArray, int index) { CustomEventDetails currentEvent = treesArray[eventTreeIndex].events[index]; CustomEventDetails nextEvent = null; if (index + 1 < treesArray[eventTreeIndex].events.Length) { //if not the last event nextEvent = treesArray[eventTreeIndex].events[index + 1]; } NPCHandler targetNPC = null; CustomEventDetails.CustomEventType ty = currentEvent.eventType; Debug.Log("Run event. Type: " + ty.ToString()); switch (ty) { case (CustomEventDetails.CustomEventType.Wait): yield return(new WaitForSeconds(currentEvent.float0)); break; case (CustomEventDetails.CustomEventType.Walk): if (currentEvent.object0.GetComponent <NPCHandler>() != null) { targetNPC = currentEvent.object0.GetComponent <NPCHandler>(); int initialDirection = targetNPC.direction; targetNPC.direction = (int)currentEvent.dir; for (int i = 0; i < currentEvent.int0; i++) { targetNPC.direction = (int)currentEvent.dir; Vector3 forwardsVector = targetNPC.getForwardsVector(true); if (currentEvent.bool0) { //if direction locked in targetNPC.direction = initialDirection; } while (forwardsVector == new Vector3(0, 0, 0)) { targetNPC.direction = (int)currentEvent.dir; forwardsVector = targetNPC.getForwardsVector(true); if (currentEvent.bool0) { //if direction locked in targetNPC.direction = initialDirection; } yield return(new WaitForSeconds(0.1f)); } targetNPC.setOverrideBusy(true); yield return(StartCoroutine(targetNPC.move(forwardsVector, currentEvent.float0))); targetNPC.setOverrideBusy(false); } targetNPC.setFrameStill(); } //Move the player if set to player if (currentEvent.object0 == PlayerMovement.player.gameObject) { int initialDirection = PlayerMovement.player.direction; PlayerMovement.player.speed = (currentEvent.float0 > 0) ? PlayerMovement.player.walkSpeed / currentEvent.float0 : PlayerMovement.player.walkSpeed; for (int i = 0; i < currentEvent.int0; i++) { PlayerMovement.player.updateDirection((int)currentEvent.dir); Vector3 forwardsVector = PlayerMovement.player.getForwardVector(); if (currentEvent.bool0) { //if direction locked in PlayerMovement.player.updateDirection(initialDirection); } PlayerMovement.player.setOverrideAnimPause(true); yield return (StartCoroutine(PlayerMovement.player.move(forwardsVector, false, currentEvent.bool0))); PlayerMovement.player.setOverrideAnimPause(false); } PlayerMovement.player.speed = PlayerMovement.player.walkSpeed; } break; case (CustomEventDetails.CustomEventType.TurnTo): int direction; float xDistance; float zDistance; if (currentEvent.object0.GetComponent <NPCHandler>() != null) { targetNPC = currentEvent.object0.GetComponent <NPCHandler>(); } if (targetNPC != null) { if (currentEvent.object1 != null) { //calculate target objects's position relative to this objects's and set direction accordingly. xDistance = targetNPC.hitBox.position.x - currentEvent.object1.transform.position.x; zDistance = targetNPC.hitBox.position.z - currentEvent.object1.transform.position.z; if (xDistance >= Mathf.Abs(zDistance)) { //Mathf.Abs() converts zDistance to a positive always. direction = 3; } //this allows for better accuracy when checking orientation. else if (xDistance <= Mathf.Abs(zDistance) * -1) { direction = 1; } else if (zDistance >= Mathf.Abs(xDistance)) { direction = 2; } else { direction = 0; } targetNPC.setDirection(direction); } if (currentEvent.int0 != 0) { direction = targetNPC.direction + currentEvent.int0; while (direction > 3) { direction -= 4; } while (direction < 0) { direction += 4; } targetNPC.setDirection(direction); } } break; case (CustomEventDetails.CustomEventType.Dialog): for (int i = 0; i < currentEvent.strings.Length; i++) { Dialog.drawDialogBox(); yield return(StartCoroutine(Dialog.drawText(currentEvent.strings[i]))); if (i < currentEvent.strings.Length - 1) { while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back")) { yield return(null); } } } if (nextEvent != null) { if (nextEvent.eventType != CustomEventDetails.CustomEventType.Choice) { while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back")) { yield return(null); } if (!EventRequiresDialogBox(nextEvent.eventType)) { Dialog.undrawDialogBox(); } // do not undraw the box if the next event needs it } } else { while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back")) { yield return(null); } Dialog.undrawDialogBox(); } break; case (CustomEventDetails.CustomEventType.Choice): if (currentEvent.strings.Length > 1) { Dialog.drawChoiceBox(currentEvent.strings); yield return(StartCoroutine(Dialog.choiceNavigate(currentEvent.strings))); } else { Dialog.drawChoiceBox(); yield return(StartCoroutine(Dialog.choiceNavigate())); } int chosenIndex = Dialog.chosenIndex; chosenIndex = currentEvent.ints.Length - 1 - chosenIndex; //flip it to reflect the original input Dialog.undrawChoiceBox(); Dialog.undrawDialogBox(); if (chosenIndex < currentEvent.ints.Length) { //only change tree if index is valid if (currentEvent.ints[chosenIndex] != eventTreeIndex && currentEvent.ints[chosenIndex] < treesArray.Length) { JumpToTree(currentEvent.ints[chosenIndex]); } } break; case CustomEventDetails.CustomEventType.Sound: SfxHandler.Play(currentEvent.sound); break; case CustomEventDetails.CustomEventType.ReceiveItem: //Play Good for TM, Average for Item AudioClip itemGetMFX = (currentEvent.bool0) ? Resources.Load <AudioClip>("Audio/mfx/GetGood") : Resources.Load <AudioClip>("Audio/mfx/GetDecent"); BgmHandler.main.PlayMFX(itemGetMFX); string firstLetter = currentEvent.string0.Substring(0, 1).ToLowerInvariant(); Dialog.drawDialogBox(); if (currentEvent.bool0) { Dialog.StartCoroutine("drawText", SaveData.currentSave.playerName + " received TM" + ItemDatabase.getItem(currentEvent.string0).getTMNo() + ": " + currentEvent.string0 + "!"); } else { if (currentEvent.int0 > 1) { Dialog.StartCoroutine("drawText", SaveData.currentSave.playerName + " received " + currentEvent.string0 + "s!"); } else if (firstLetter == "a" || firstLetter == "e" || firstLetter == "i" || firstLetter == "o" || firstLetter == "u") { Dialog.StartCoroutine("drawText", SaveData.currentSave.playerName + " received an " + currentEvent.string0 + "!"); } else { Dialog.StartCoroutine("drawText", SaveData.currentSave.playerName + " received a " + currentEvent.string0 + "!"); } } yield return(new WaitForSeconds(itemGetMFX.length)); bool itemAdd = SaveData.currentSave.Bag.addItem(currentEvent.string0, currentEvent.int0); Dialog.drawDialogBox(); if (itemAdd) { if (currentEvent.bool0) { yield return (Dialog.StartCoroutine("drawTextSilent", SaveData.currentSave.playerName + " put the TM" + ItemDatabase.getItem(currentEvent.string0).getTMNo() + " \\away into the bag.")); } else { if (currentEvent.int0 > 1) { yield return (Dialog.StartCoroutine("drawTextSilent", SaveData.currentSave.playerName + " put the " + currentEvent.string0 + "s \\away into the bag.")); } else { yield return (Dialog.StartCoroutine("drawTextSilent", SaveData.currentSave.playerName + " put the " + currentEvent.string0 + " \\away into the bag.")); } } while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back")) { yield return(null); } } else { yield return(Dialog.StartCoroutine("drawTextSilent", "But there was no room...")); while (!Input.GetButtonDown("Select") && !Input.GetButtonDown("Back")) { yield return(null); } } Dialog.undrawDialogBox(); break; case CustomEventDetails.CustomEventType.ReceivePokemon: if (SaveData.currentSave.PC.hasSpace(0)) { //Play Great for Pokemon AudioClip pokeGetMFX = Resources.Load <AudioClip>("Audio/mfx/GetGreat"); PokemonData pkd = PokemonDatabase.getPokemon(currentEvent.ints[0]); string pkName = pkd.getName(); Pokemon.Gender pkGender = Pokemon.Gender.CALCULATE; if (pkd.getMaleRatio() == -1) { pkGender = Pokemon.Gender.NONE; } else if (pkd.getMaleRatio() == 0) { pkGender = Pokemon.Gender.FEMALE; } else if (pkd.getMaleRatio() == 100) { pkGender = Pokemon.Gender.MALE; } else { //if not a set gender if (currentEvent.ints[2] == 0) { pkGender = Pokemon.Gender.MALE; } else if (currentEvent.ints[2] == 1) { pkGender = Pokemon.Gender.FEMALE; } } Dialog.drawDialogBox(); yield return (Dialog.StartCoroutine("drawText", SaveData.currentSave.playerName + " received the " + pkName + "!")); BgmHandler.main.PlayMFX(pokeGetMFX); yield return(new WaitForSeconds(pokeGetMFX.length)); string nickname = currentEvent.strings[0]; if (currentEvent.strings[1].Length == 0) { //If no OT set, allow nicknaming of Pokemon Dialog.drawDialogBox(); yield return (StartCoroutine( Dialog.drawTextSilent("Would you like to give a nickname to \nthe " + pkName + " you received?"))); Dialog.drawChoiceBox(); yield return(StartCoroutine(Dialog.choiceNavigate())); int nicknameCI = Dialog.chosenIndex; Dialog.undrawDialogBox(); Dialog.undrawChoiceBox(); if (nicknameCI == 1) { //give nickname //SfxHandler.Play(selectClip); yield return(StartCoroutine(ScreenFade.main.Fade(false, 0.4f))); Scene.main.Typing.gameObject.SetActive(true); StartCoroutine(Scene.main.Typing.control(10, "", pkGender, Pokemon.GetIconsFromID_(currentEvent.ints[0], currentEvent.bool0))); while (Scene.main.Typing.gameObject.activeSelf) { yield return(null); } if (Scene.main.Typing.typedString.Length > 0) { nickname = Scene.main.Typing.typedString; } yield return(StartCoroutine(ScreenFade.main.Fade(true, 0.4f))); } } if (!EventRequiresDialogBox(nextEvent.eventType)) { Dialog.undrawDialogBox(); } int[] IVs = new int[] { Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32), Random.Range(0, 32) }; if (currentEvent.bool1) { //if using Custom IVs IVs[0] = currentEvent.ints[5]; IVs[1] = currentEvent.ints[6]; IVs[2] = currentEvent.ints[7]; IVs[3] = currentEvent.ints[8]; IVs[4] = currentEvent.ints[9]; IVs[5] = currentEvent.ints[10]; } string pkNature = (currentEvent.ints[3] == 0) ? NatureDatabase.getRandomNature().getName() : NatureDatabase.getNature(currentEvent.ints[3] - 1).getName(); string[] pkMoveset = pkd.GenerateMoveset(currentEvent.ints[1]); for (int i = 0; i < 4; i++) { if (currentEvent.strings[4 + i].Length > 0) { pkMoveset[i] = currentEvent.strings[4 + i]; } } Debug.Log(pkMoveset[0] + ", " + pkMoveset[1] + ", " + pkMoveset[2] + ", " + pkMoveset[3]); Pokemon pk = new Pokemon(currentEvent.ints[0], nickname, pkGender, currentEvent.ints[1], currentEvent.bool0, currentEvent.strings[2], currentEvent.strings[3], currentEvent.strings[1], IVs[0], IVs[1], IVs[2], IVs[3], IVs[4], IVs[5], 0, 0, 0, 0, 0, 0, pkNature, currentEvent.ints[4], pkMoveset, new int[4]); SaveData.currentSave.PC.addPokemon(pk); } else { //jump to new tree JumpToTree(currentEvent.int0); } break; case (CustomEventDetails.CustomEventType.SetActive): if (currentEvent.bool0) { currentEvent.object0.SetActive(true); } else { if (currentEvent.object0 == this.gameObject) { deactivateOnFinish = true; } else if (currentEvent.object0 != PlayerMovement.player.gameObject) { //important to never deactivate the player currentEvent.object0.SetActive(false); } } break; case CustomEventDetails.CustomEventType.SetCVariable: SaveData.currentSave.setCVariable(currentEvent.string0, currentEvent.float0); break; case (CustomEventDetails.CustomEventType.LogicCheck): bool passedCheck = false; CustomEventDetails.Logic lo = currentEvent.logic; switch (lo) { case CustomEventDetails.Logic.CVariableEquals: if (currentEvent.float0 == SaveData.currentSave.getCVariable(currentEvent.string0)) { passedCheck = true; } break; case CustomEventDetails.Logic.CVariableGreaterThan: if (SaveData.currentSave.getCVariable(currentEvent.string0) > currentEvent.float0) { passedCheck = true; } break; case CustomEventDetails.Logic.CVariableLessThan: if (SaveData.currentSave.getCVariable(currentEvent.string0) < currentEvent.float0) { passedCheck = true; } break; case CustomEventDetails.Logic.GymBadgeNoOwned: if (Mathf.FloorToInt(currentEvent.float0) < SaveData.currentSave.gymsBeaten.Length && Mathf.FloorToInt(currentEvent.float0) >= 0) { //ensure input number is valid if (SaveData.currentSave.gymsBeaten[Mathf.FloorToInt(currentEvent.float0)]) { passedCheck = true; } } break; case CustomEventDetails.Logic.GymBadgesEarned: int badgeCount = 0; for (int bi = 0; bi < SaveData.currentSave.gymsBeaten.Length; bi++) { if (SaveData.currentSave.gymsBeaten[bi]) { badgeCount += 1; } } if (badgeCount >= currentEvent.float0) { passedCheck = true; } break; case CustomEventDetails.Logic.PokemonIDIsInParty: for (int pi = 0; pi < 6; pi++) { if (SaveData.currentSave.PC.boxes[0][pi] != null) { if (SaveData.currentSave.PC.boxes[0][pi].getID() == Mathf.FloorToInt(currentEvent.float0)) { passedCheck = true; pi = 6; } } } break; case CustomEventDetails.Logic.SpaceInParty: if (currentEvent.bool0) { if (!SaveData.currentSave.PC.hasSpace(0)) { passedCheck = true; } } else { if (SaveData.currentSave.PC.hasSpace(0)) { passedCheck = true; } } break; } if (passedCheck) { int newTreeIndex = currentEvent.int0; if (newTreeIndex != eventTreeIndex && //only change tree if index is valid newTreeIndex < treesArray.Length) { JumpToTree(newTreeIndex); } } break; case CustomEventDetails.CustomEventType.TrainerBattle: //custom cutouts not yet implemented StartCoroutine(ScreenFade.main.FadeCutout(false, ScreenFade.slowedSpeed, null)); //Automatic LoopStart usage not yet implemented Scene.main.Battle.gameObject.SetActive(true); Trainer trainer = currentEvent.object0.GetComponent <Trainer>(); if (trainer.battleBGM != null) { Debug.Log(trainer.battleBGM.name); BgmHandler.main.PlayOverlay(trainer.battleBGM, trainer.samplesLoopStart); } else { BgmHandler.main.PlayOverlay(Scene.main.Battle.defaultTrainerBGM, Scene.main.Battle.defaultTrainerBGMLoopStart); } Scene.main.Battle.gameObject.SetActive(false); yield return(new WaitForSeconds(1.6f)); Scene.main.Battle.gameObject.SetActive(true); StartCoroutine(Scene.main.Battle.control(true, trainer, currentEvent.bool0)); while (Scene.main.Battle.gameObject.activeSelf) { yield return(null); } //yield return new WaitForSeconds(sceneTransition.FadeIn(0.4f)); yield return(StartCoroutine(ScreenFade.main.Fade(true, 0.4f))); if (currentEvent.bool0) { if (Scene.main.Battle.victor == 1) { int newTreeIndex = currentEvent.int0; if (newTreeIndex != eventTreeIndex && //only change tree if index is valid newTreeIndex < treesArray.Length) { JumpToTree(newTreeIndex); } } } break; } }
private void updateSelection(Pokemon selectedPokemon) { frame = 0; PlayCry(selectedPokemon); selectedCaughtBall.sprite = Resources.Load <Sprite>("null"); selectedCaughtBall.sprite = Resources.Load <Sprite>("PCSprites/summary" + selectedPokemon.getCaughtBall()); selectedName.text = selectedPokemon.getName(); selectedNameShadow.text = selectedName.text; if (selectedPokemon.getGender() == Pokemon.Gender.FEMALE) { selectedGender.text = "♀"; selectedGender.color = new Color(1, 0.2f, 0.2f, 1); } else if (selectedPokemon.getGender() == Pokemon.Gender.MALE) { selectedGender.text = "♂"; selectedGender.color = new Color(0.2f, 0.4f, 1, 1); } else { selectedGender.text = null; } selectedGenderShadow.text = selectedGender.text; selectedLevel.text = "" + selectedPokemon.getLevel(); selectedLevelShadow.text = selectedLevel.text; selectedSpriteAnimation = selectedPokemon.GetFrontAnim_(); if (selectedSpriteAnimation.Length > 0) { selectedSprite.sprite = selectedSpriteAnimation[0]; } if (string.IsNullOrEmpty(selectedPokemon.getHeldItem())) { selectedHeldItem.text = "None"; } else { selectedHeldItem.text = selectedPokemon.getHeldItem(); } selectedHeldItemShadow.text = selectedHeldItem.text; if (selectedPokemon.getStatus() != Pokemon.Status.NONE) { selectedStatus.sprite = Resources.Load <Sprite>("PCSprites/status" + selectedPokemon.getStatus().ToString()); } else { selectedStatus.sprite = Resources.Load <Sprite>("null"); } if (selectedPokemon.getIsShiny()) { selectedShiny.sprite = Resources.Load <Sprite>("PCSprites/shiny"); } else { selectedShiny.sprite = Resources.Load <Sprite>("null"); } dexNo.text = selectedPokemon.getLongID(); dexNoShadow.text = dexNo.text; species.text = PokemonDatabase.getPokemon(selectedPokemon.getID()).getName(); speciesShadow.text = species.text; string type1string = PokemonDatabase.getPokemon(selectedPokemon.getID()).getType1().ToString(); string type2string = PokemonDatabase.getPokemon(selectedPokemon.getID()).getType2().ToString(); type1.sprite = Resources.Load <Sprite>("null"); type2.sprite = Resources.Load <Sprite>("null"); if (type1string != "NONE") { type1.sprite = Resources.Load <Sprite>("PCSprites/type" + type1string); type1.rectTransform.localPosition = new Vector3(71, type1.rectTransform.localPosition.y); } if (type2string != "NONE") { type2.sprite = Resources.Load <Sprite>("PCSprites/type" + type2string); } else { //if single type pokemon, center the type icon type1.rectTransform.localPosition = new Vector3(89, type1.rectTransform.localPosition.y); } OT.text = selectedPokemon.getOT(); OTShadow.text = OT.text; IDNo.text = "" + selectedPokemon.getIDno(); IDNoShadow.text = IDNo.text; expPoints.text = "" + selectedPokemon.getExp(); expPointsShadow.text = expPoints.text; float expCurrentLevel = PokemonDatabase.getLevelExp(PokemonDatabase.getPokemon(selectedPokemon.getID()).getLevelingRate(), selectedPokemon.getLevel()); float expNextlevel = PokemonDatabase.getLevelExp(PokemonDatabase.getPokemon(selectedPokemon.getID()).getLevelingRate(), selectedPokemon.getLevel() + 1); float expAlong = selectedPokemon.getExp() - expCurrentLevel; float expDistance = expAlong / (expNextlevel - expCurrentLevel); toNextLevel.text = "" + (expNextlevel - selectedPokemon.getExp()); toNextLevelShadow.text = toNextLevel.text; expBar.rectTransform.sizeDelta = new Vector2(Mathf.Floor(expDistance * 64f), expBar.rectTransform.sizeDelta.y); string natureFormatted = selectedPokemon.getNature(); natureFormatted = natureFormatted.Substring(0, 1) + natureFormatted.Substring(1).ToLowerInvariant(); nature.text = "<color=#F22F>" + natureFormatted + "</color> nature."; natureShadow.text = natureFormatted + " nature."; metDate.text = "Met on " + selectedPokemon.getMetDate(); metDateShadow.text = metDate.text; metMap.text = "<color=#F22F>" + selectedPokemon.getMetMap() + "</color>"; metMapShadow.text = selectedPokemon.getMetMap(); metLevel.text = "Met at Level " + selectedPokemon.getMetLevel() + "."; metLevelShadow.text = metLevel.text; string[][] characteristics = new string[][] { new string[] { "Loves to eat", "Takes plenty of siestas", "Nods off a lot", "Scatters things often", "Likes to relax" }, new string[] { "Proud of its power", "Likes to thrash about", "A little quick tempered", "Likes to fight", "Quick tempered" }, new string[] { "Sturdy body", "Capable of taking hits", "Highly persistent", "Good endurance", "Good perseverance" }, new string[] { "Highly curious", "Mischievous", "Thoroughly cunning", "Often lost in thought", "Very finicky" }, new string[] { "Strong willed", "Somewhat vain", "Strongly defiant", "Hates to lose", "Somewhat stubborn" }, new string[] { "Likes to run", "Alert to sounds", "Impetuous and silly", "Somewhat of a clown", "Quick to flee" } }; int highestIV = selectedPokemon.GetHighestIV(); characteristic.text = characteristics[highestIV][selectedPokemon.GetIV(highestIV) % 5] + "."; characteristicShadow.text = characteristic.text; float currentHP = selectedPokemon.getCurrentHP(); float maxHP = selectedPokemon.getHP(); HP.text = currentHP + "/" + maxHP; HPShadow.text = HP.text; HPBar.rectTransform.sizeDelta = new Vector2(selectedPokemon.getPercentHP() * 48f, HPBar.rectTransform.sizeDelta.y); if (currentHP < (maxHP / 4f)) { HPBar.color = new Color(1, 0.125f, 0, 1); } else if (currentHP < (maxHP / 2f)) { HPBar.color = new Color(1, 0.75f, 0, 1); } else { HPBar.color = new Color(0.125f, 1, 0.065f, 1); } float[] natureMod = new float[] { NatureDatabase.getNature(selectedPokemon.getNature()).getATK(), NatureDatabase.getNature(selectedPokemon.getNature()).getDEF(), NatureDatabase.getNature(selectedPokemon.getNature()).getSPA(), NatureDatabase.getNature(selectedPokemon.getNature()).getSPD(), NatureDatabase.getNature(selectedPokemon.getNature()).getSPE() }; Stats.text = selectedPokemon.getATK() + "\n" + selectedPokemon.getDEF() + "\n" + selectedPokemon.getSPA() + "\n" + selectedPokemon.getSPD() + "\n" + selectedPokemon.getSPE(); StatsShadow.text = Stats.text; string[] statsLines = new string[] { "Attack", "Defence", "Sp. Atk", "Sp. Def", "Speed" }; StatsTextShadow.text = ""; for (int i = 0; i < 5; i++) { if (natureMod[i] > 1) { StatsTextShadow.text += "<color=#A01010FF>" + statsLines[i] + "</color>\n"; } else if (natureMod[i] < 1) { StatsTextShadow.text += "<color=#0030A2FF>" + statsLines[i] + "</color>\n"; } else { StatsTextShadow.text += statsLines[i] + "\n"; } } abilityName.text = PokemonDatabase.getPokemon(selectedPokemon.getID()).getAbility(selectedPokemon.getAbility()); abilityNameShadow.text = abilityName.text; //abilities not yet implemented abilityDescription.text = ""; abilityDescriptionShadow.text = abilityDescription.text; updateSelectionMoveset(selectedPokemon); }