private void GetStatsBack(Pokemon pokemon, PlayerPokemonData data)
 {
     data.isCaptured        = pokemon.isCaptured;
     data.nickName          = pokemon.nickName;
     data.isFromTrade       = pokemon.isFromTrade;
     data.level             = pokemon.level;
     data.gender            = pokemon.gender;
     data.nature            = pokemon.nature;
     data.curHP             = pokemon.maxHP;
     data.hpEV              = pokemon.hpEV;
     data.atkEV             = pokemon.atkEV;
     data.defEV             = pokemon.defEV;
     data.spatkEV           = pokemon.spatkEV;
     data.spdefEV           = pokemon.spdefEV;
     data.spdEV             = pokemon.spdEV;
     data.hpIV              = pokemon.hpIV;
     data.atkIV             = pokemon.atkIV;
     data.defIV             = pokemon.defIV;
     data.spatkIV           = pokemon.spatkIV;
     data.spdefIV           = pokemon.spdefIV;
     data.spdIV             = pokemon.spdIV;
     data.currentEXP        = pokemon.currentEXP;
     data.MovesToLearnNames = pokemon.MovesToLearnNames;
     data.KnownMovesNames   = pokemon.KnownMovesNames;
     //string equippedItem = data.equippedItem.name;
     data.origin = pokemon.origin;
 }
    private IEnumerator TryToCatch(Collision col)
    {
        Pokemon thisPokemon = col.gameObject.GetComponent <Pokemon>();

        audio.PlayOneShot(attemptingCapture);
        animation["Trying_To_Catch"].speed = 2;
        animation.Play("Trying_To_Catch");
        yield return(new WaitForSeconds(attemptingCapture.length + 1));

        bool tryToCapture = calculateCaptureScript.AttemptCapture(thisPokemon, thisPokeBallType);

        if (tryToCapture)
        {
            thisPokemon.isCaptured   = true;
            thisPokemon.trainersName = thisPlayer.playersName;
            Pokemon           temp = thisPokemon;
            PlayerPokemonData dataHolderPokemon = new PlayerPokemonData(temp.isCaptured, temp.pokemonName, temp.nickName,
                                                                        temp.isFromTrade, temp.level, temp.gender, temp.nature, temp.curHP, temp.hpEV, temp.atkEV,
                                                                        temp.defEV, temp.spatkEV, temp.spdefEV, temp.spdEV, temp.hpIV, temp.atkIV, temp.defIV,
                                                                        temp.spatkIV, temp.spdefIV, temp.spdIV, temp.currentEXP,
                                                                        temp.MovesToLearnNames, temp.KnownMovesNames,
                                                                        temp.equippedItem.name, temp.origin);
            if (thisPlayer.pokemonRoster.pokemonRoster.Count < 6)
            {
                thisPlayer.pokemonRoster.pokemonRoster.Add(dataHolderPokemon);
            }
            else
            {
                thisPlayer.pokemonInventory.pokemonInventory.Add(dataHolderPokemon);
            }
            thisPokemon.isCaptured = false;
            thisPokemon.SetDead();
            audio.PlayOneShot(captureSuccess);
            yield return(new WaitForSeconds(captureSuccess.length));
        }
        else
        {
            animation["Open_Top"].speed = 5;
            animation.Play("Open_Top");
            audio.PlayOneShot(captureFail);
            yield return(new WaitForSeconds(animation["Open_Top"].length));

            // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            // Code goes here to change the Pokemon back from red.
            col.gameObject.SetActive(true);
            col.gameObject.GetComponent <Animation>().enabled = true;
            animation["Close_Top"].speed = -5f;
            animation["Close_Top"].time  = animation["Close_Top"].length;
            animation.Play("Close_Top");
            yield return(new WaitForSeconds(captureFail.length));
        }
        PhotonNetwork.Destroy(gameObject);
        yield return(null);
    }
    private void HandOverStats(Pokemon pokemon, PlayerPokemonData data)
    {
        bool   isCaptured   = data.isCaptured;
        int    trainerID    = GetComponent <PhotonView>().viewID;
        string trainersName = GetComponent <PlayerCharacter>().playersName;
        string nickName     = data.nickName;
        bool   isFromTrade  = data.isFromTrade;
        int    level        = data.level;
        int    gender       = (int)data.gender;
        int    nature       = (int)data.nature;
        int    curHP        = data.curHP;
        int    hpEV         = data.hpEV;
        int    atkEV        = data.atkEV;
        int    defEV        = data.defEV;
        int    spatkEV      = data.spatkEV;
        int    spdefEV      = data.spdefEV;
        int    spdEV        = data.spdEV;
        int    hpIV         = data.hpIV;
        int    atkIV        = data.atkIV;
        int    defIV        = data.defIV;
        int    spatkIV      = data.spatkIV;
        int    spdefIV      = data.spdefIV;
        int    spdIV        = data.spdIV;
        int    curEXP       = data.currentEXP;

        string[] MovesToLearnNames = new string[data.MovesToLearnNames.Count];
        for (int i = 0; i < data.MovesToLearnNames.Count; i++)
        {
            MovesToLearnNames[i] = data.MovesToLearnNames[i];
        }
        string[] KnownMovesNames = new string[data.KnownMovesNames.Count];
        for (int i = 0; i < data.KnownMovesNames.Count; i++)
        {
            KnownMovesNames[i] = data.KnownMovesNames[i];
        }
        //string equippedItem = data.equippedItem.name;
        int origin    = data.origin;
        int pokemonID = pokemon.gameObject.GetComponent <PhotonView>().viewID;

        GetComponent <PhotonView>().RPC("NetworkStats", PhotonTargets.AllBuffered, isCaptured, trainerID, trainersName, nickName, isFromTrade, level, gender,
                                        nature, curHP, hpEV, atkEV, defEV, spatkEV, spdefEV, spdEV, hpIV, atkIV, defIV, spatkIV, spdefIV, spdIV, curEXP,
                                        MovesToLearnNames, KnownMovesNames, origin, pokemonID);
    }
    public IEnumerator PokemonGo(PlayerPokemonData data)
    {
        anim.SetBool("ThrowPokemonBall", true);
        yield return(new WaitForSeconds(0.10f));

        CreatePokemonBall();
        while (Vector3.Distance(transform.position, pokemonBall.transform.position) < 5.0f)
        {
            yield return(null);
        }
        pokemonBall.rigidbody.velocity = Vector3.zero;
        pokemonBall.transform.LookAt(transform.forward);
        OpenBall();
        pokemonBall.audio.PlayOneShot(pokemonOut);
        yield return(new WaitForSeconds(pokemonOut.length));

        float      current_terrain_height = Terrain.activeTerrain.SampleHeight(pokemonBall.transform.position);
        Vector3    here    = new Vector3(pokemonBall.transform.position.x, current_terrain_height, pokemonBall.transform.position.z);
        GameObject pokemon = PhotonNetwork.Instantiate(data.pokemonName.ToString(), here, Quaternion.identity, 0) as GameObject;

        pokemon.GetComponent <WildPokemonAI>().enabled = false;
        CloseBall();
        while (Vector3.Distance(pokemonBall.transform.position, grip.transform.position) > 1f)
        {
            pokemonBall.transform.position = Vector3.Lerp(pokemonBall.transform.position, grip.transform.position, 5f * Time.deltaTime);
            yield return(null);
        }
        pokemonBall.transform.parent   = grip.transform;
        pokemonBall.transform.position = grip.transform.position;
        pokemonBall.transform.rotation = grip.transform.rotation;
        pokemonBall.SetActive(false);
        HandOverStats(pokemon.GetComponent <Pokemon>(), data);
        pokemon.GetComponent <Pokemon>().SetupSetupPokemon();
        pokemon.GetComponent <PokemonInput>().myCamera = GetComponent <PlayerInput>().myCamera;
        int poke = pokemon.GetComponent <PhotonView>().viewID;

        GetComponent <PhotonView>().RPC("SetActivePokemon", PhotonTargets.AllBuffered, poke);
        input.throwingPokeBall = false;
        yield return(null);
    }