/// <summary> /// Get a list of possible fish to get depending on the conditions /// </summary> /// <param name="isRaining">true if it's raining</param> /// <param name="hour">hour of the game</param> /// <param name="bait">bait used, can be null</param> /// <param name="list">lsit to be filled, need to be init but not cleared</param> public void GetPossibleFish(bool isRaining, int hour, Bait bait, BonusBait bonusBait, List <Fish> list) { list.Clear(); foreach (Fish fish in _fish) { if (fish.CanBeFished(isRaining, bait, bonusBait, hour)) { list.Add(fish); } } }
private IEnumerator Fishing(bool isRainig, int hour, Bait bait, BonusBait bonusBait) { _beginEvent.Invoke(); _fishing = true; _fishDatabase.GetPossibleFish(isRainig, hour, bait, bonusBait, _fishList); Debug.Assert(_fishList.Count != 0); yield return(0); //wait next frame _fish = RandomFish(bonusBait); float wait = _fish.GetWaitSecond(); yield return(new WaitForSecondsRealtime(wait - (bonusBait != null?wait * bonusBait.BonusPercentWaitTime:0))); _hooking = true; _hookEvent.Invoke(_fish.Rarity); yield return(new WaitForSecondsRealtime(_fish.HookSecond)); _failEvent.Invoke(); _fish = null; _hooking = false; _fishing = false; }
private Fish RandomFish(BonusBait bonusBait) { Fish.FishRarity rarity; if (bonusBait == null || !bonusBait.BonusForceRarity) { float rand = Random.Range(0, 1f); rarity = (rand < 0.1f ? Fish.FishRarity.LEGEND : rand < 0.25f ? Fish.FishRarity.EPIC : rand < 0.5f ? Fish.FishRarity.RARE : Fish.FishRarity.COMMUN); } else { rarity = bonusBait.BonusRarity; } List <Fish> possibleFish = _fishList.FindAll((Fish f) => { return(f.Rarity == rarity); }); if (possibleFish.Count != 0) { return(possibleFish[Random.Range(0, possibleFish.Count)]); } else { return(_fishList[Random.Range(0, possibleFish.Count)]); } }
/// <summary> /// Test if a fish can be fished depending of the conditions /// </summary> /// <param name="isRaining">true if it's raining</param> /// <param name="bait">bait used, can be null</param> /// <param name="hour">hour of the game</param> /// <returns>true if the fish can be fished</returns> public bool CanBeFished(bool isRaining, Bait bait, BonusBait bonusBait, int hour) { return(((bonusBait != null && bonusBait.BonusIgnoreHour) || IsGoodHour(hour)) && ((bonusBait != null && bonusBait.BonusIgnoreWeaher) || IsGoodWeather(isRaining)) && IsGoodBait(bait)); }