internal override IEncounterDrawer GetEncounterDrawer(WildGenerationArgument arg)
        {
            if (arg.ForceEncount)
            {
                return(ForceEncounterDrawer.Getinstance());
            }

            var value = BasicEncounterRate << 4;

            if (arg.RidingBicycle)
            {
                value = value * 8 / 10;
            }
            if (arg.UsingFlute == Flute.BlackFlute)
            {
                value /= 2;
            }
            if (arg.UsingFlute == Flute.WhiteFlute)
            {
                value = value * 15 / 10;
            }
            if (arg.HasCleanseTag)
            {
                value = value * 2 / 3;
            }
            else
            {
                value = arg.FieldAbility.CorrectEncounterThreshold(value);
            }

            return(RSEEncounterDrawer.CreateInstance(value));
        }
        // 静電気と磁力が有効.
        internal override SlotGenerator GetSlotGenerator(WildGenerationArgument arg)
        {
            if (arg.FieldAbility.attractingType == PokeType.Electric)
            {
                return(new SlotGenerator(staticGenerator, encounterTable));
            }
            if (arg.FieldAbility.attractingType == PokeType.Steel)
            {
                return(new SlotGenerator(magnetPullGenerator, encounterTable));
            }

            return(new SlotGenerator(encounterTable));
        }
        public WildGenerator(GBAMap map, WildGenerationArgument arg = null)
        {
            if (arg == null)
            {
                arg = new WildGenerationArgument();
            }

            lvGenerator     = map.GetLvGenerator(arg);
            slotGenerator   = map.GetSlotGenerator(arg);
            natureGenerator = map.GetNatureGenerator(arg);
            genderGenerator = map.GetGenderGenerator(arg);
            ivsGenrator     = arg.GenerateMethod;
        }
 internal override SlotGenerator GetSlotGenerator(WildGenerationArgument arg)
 => new SlotGenerator(encounterTable);
 internal override INatureGenerator GetNatureGenerator(WildGenerationArgument arg)
 => EmSafariNatureGenerator.CreateInstance(arg.PokeBlock, arg.FieldAbility.syncNature);
 // 静電気のみ有効
 internal override SlotGenerator GetSlotGenerator(WildGenerationArgument arg)
 => arg.FieldAbility.attractingType == PokeType.Electric ?
 new SlotGenerator(staticGenerator, encounterTable) :
 new SlotGenerator(encounterTable);
 internal override IGenderGenerator GetGenderGenerator(WildGenerationArgument arg)
 => CuteCharmGenderGenerator.GetInstance(arg.FieldAbility.cuteCharmGender);
 internal abstract SlotGenerator GetSlotGenerator(WildGenerationArgument arg);
 internal override IGenderGenerator GetGenderGenerator(WildGenerationArgument arg)
 => NullGenderGenerator.GetInstance();
 internal override IEncounterDrawer GetEncounterDrawer(WildGenerationArgument arg) => ForceEncounterDrawer.Getinstance();
 internal override INatureGenerator GetNatureGenerator(WildGenerationArgument arg)
 => HoennSafariNatureGenerator.CreateInstance(arg.PokeBlock);
 internal override SlotGenerator GetSlotGenerator(WildGenerationArgument arg)
 => new SlotGenerator(DummySpecialSlotGenerator.GetInstance(), encounterTable);
 internal abstract IGenderGenerator GetGenderGenerator(WildGenerationArgument arg);
 internal abstract INatureGenerator GetNatureGenerator(WildGenerationArgument arg);
 internal abstract ILvGenerator GetLvGenerator(WildGenerationArgument arg);
 internal override ILvGenerator GetLvGenerator(WildGenerationArgument arg)
 => StandardLvGenerator.GetInstance();
 internal override INatureGenerator GetNatureGenerator(WildGenerationArgument arg)
 => StandardNatureGenerator.GetInstance();
 internal override ILvGenerator GetLvGenerator(WildGenerationArgument arg)
 => arg.FieldAbility.lvGenerator;
 internal override INatureGenerator GetNatureGenerator(WildGenerationArgument arg)
 => SynchronizeNatureGenerator.GetInstance(arg.FieldAbility.syncNature);
 internal abstract IEncounterDrawer GetEncounterDrawer(WildGenerationArgument arg);