public static Pokemon BuildPokemon(EncounterPokemon encounter)
    {
        int     PokemonID = PokemonFactory.GetPokemonFromEncounterPokemonScriptableObject(encounter);
        Pokemon pokemon   = PokemonFactory.BuildPokemon(PokemonID);
        //考虑特性
        Pokemon           FirstPokemon = Contexts.sharedInstance.game.playerData.scriptableObject.pokemons[0];
        BattlePokemonData pokemonData  = BattlePokemonData.Context[FirstPokemon.GetInstanceID()];

        if (AbilityManager.AbilityImpacts.ContainsKey(pokemonData.ShowAbility))
        {
            AbilityManager.AbilityImpacts[pokemonData.ShowAbility]
            .OnEncounterPokemon(pokemonData, pokemon);
        }
        return(pokemon);
    }
Example #2
0
    public void Execute()
    {
        if (context.isBattleFlag)
        {
            return;
        }
        if (null == grassPosList || 1 > grassPosList.Length)
        {
            grassPosList = context.GetEntities(GameMatcher.GrassPos)
                           .Select(x => x.grassPos.pos)
                           .ToArray();
        }


        int     DetectGrassNum = 0;
        Vector3 playPos        = new Vector3(player.position.x, 0, player.position.z);
        int     count          = grassPosList.Length;

        for (int i = 0; i < count; ++i)
        {
            if (Math.Abs(grassPosList[i].x - playPos.x) <= 1)
            {
                if (Math.Abs(grassPosList[i].z - playPos.z) <= 1)
                {
                    DetectGrassNum++;
                }
            }
        }


        //遭遇精灵
        if (0 < DetectGrassNum && Vector3.Magnitude(PlayerRigidbody.velocity) > 0.3f)
        {
            float p = EncounterPokemonProbability * DetectGrassNum;
            if (RandomService.game.Float(0, 100) < p)
            {
                //int PokemonID = PokemonFactory.GetPokemonFromEncounterPokemonScriptableObject(GrassPokemons);
                Pokemon pokemom = PokemonFactory.BuildPokemon(GrassPokemons);
                BattleController.Instance.InitWildPokemon(pokemom);
                DebugHelper.LogFormat("你在草地遭遇了精灵{0}", pokemom.ename);
                context.isBattleFlag = true;
            }
        }
    }
    public void Initialize()
    {
        string json = null;

        if (File.Exists(ResourceController.Instance.TrainerDataPath.ToString()))
        {
            json = File.ReadAllText(ResourceController.Instance.TrainerDataPath.ToString());
        }

        Trainer trainer = ScriptableObject.CreateInstance <Trainer>();

        if (json != null)
        {
            trainer = JsonConvert.DeserializeObject <Trainer>(json);
        }
        if (null == trainer || null == trainer.pokemons || 0 == trainer.pokemons.Count)
        {
            //如果没有精灵,就给一只皮卡丘和小火龙
            Pokemon Pikaqiu = PokemonFactory.BuildPokemon(25);

            Pokemon Charmander = PokemonFactory.BuildPokemon(4);
            trainer.pokemons = new List <Pokemon>(6)
            {
                Pikaqiu, Charmander
            };
        }
        else
        {
            foreach (Pokemon pokemon in trainer.pokemons)
            {
                new BattlePokemonData(pokemon);
            }
        }
        if (null == trainer || null == trainer.bagItems || 0 == trainer.bagItems.Count)
        {
            //如果道具背包没有物品,给5个精灵球
            trainer.bagItems = new List <BagItems>(24)
            {
                BagItems.Build("精灵球", 5)
            };
        }
        context.ReplacePlayerData(trainer);
    }
Example #4
0
    public void Execute()
    {
        if (context.isBattleFlag)
        {
            return;
        }
        if (null == grassPosList || 1 > grassPosList.Length)
        {
            grassPosList = context.GetEntities(GameMatcher.GrassPos)
                           .Select(x => x.grassPos.pos)
                           .ToArray();
            Debug.Log(grassPosList);
        }


        int     DetectGrassNum = 0;
        Vector3 playPos        = new Vector3(player.position.x, 0, player.position.z);
        int     count          = grassPosList.Length;

        for (int i = 0; i < count; ++i)
        {
            if (Math.Abs(grassPosList[i].x - playPos.x) <= 1)
            {
                if (Math.Abs(grassPosList[i].z - playPos.z) <= 1)
                {
                    DetectGrassNum++;
                }
            }
        }

        //Vector3 playPos = player.position;

        ////获取距离玩家附近的草
        //var CheckGrassList = GrassPosList.Where(x => Vector3.Distance(playPos, x) < 2f).ToList();
        //if (0 == CheckGrassList.Count()) return;


        //GeometryDetection.Sphere play_detection = new GeometryDetection.Sphere(playPos, 1.2f);

        ////是否碰撞
        //int DetectGrassNum = 0;

        //foreach (Vector3 GrassPos in CheckGrassList)
        //{
        //    //几何检测
        //    GeometryDetection.AABB grass_detection =
        //            new GeometryDetection.AABB(GrassPos,
        //            new Vector3(
        //                GrassPos.x + 1f,
        //                GrassPos.y + 5f,
        //                GrassPos.z + 1f));
        //    bool isDetected = GeometryDetection.Overlap_AABB_Sphere(grass_detection, play_detection);

        //    if (false == isDetected)
        //        continue;
        //    DetectGrassNum++;
        //}

        //遭遇精灵
        if (0 < DetectGrassNum && Vector3.Magnitude(PlayerRigidbody.velocity) > 0.3f)
        {
            float p = EncounterPokemonProbability * DetectGrassNum;
            if (RandomService.game.Float(0, 100) < p)
            {
                //int PokemonID = PokemonFactory.GetPokemonFromEncounterPokemonScriptableObject(GrassPokemons);
                Pokemon pokemom = PokemonFactory.BuildPokemon(GrassPokemons);
                BattleController.Instance.InitWildPokemon(pokemom);
                DebugHelper.LogFormat("你在草地遭遇了精灵{0}", pokemom.ename);
                context.isBattleFlag = true;
            }
        }
    }