FishDrawPool

class FishDrawPool(world: FishingWorldId, weather: WeatherType?, rarities: List<RarityData>, fishes: List<FishData>)

1 回の抽選の候補と、その重み。FishDrawer.createPool で作り、FishDrawer.draw に渡す。

候補 (メンバー)

enabled が true で、レアリティが rarities に含まれ、FishData.conditions が world と weather で満たされる魚が候補になる。 この条件は絶対で、候補外の魚を後から加えることはできない。 レアリティは候補の魚を 1 匹以上持つものだけが候補になる。

重みの初期値は RarityData.weight と FishData.weight である。 weight が 0 の魚も重み 0 の候補として含まれるため、setFishWeight で重みを与えれば釣れるようになる (餌限定の魚など)。

抽選

まず重み付きでレアリティを選び、その中から重み付きで魚を選ぶ。 抽選対象になるのは、重みが正で、重みが正の魚を 1 匹以上持つレアリティだけである。 そのようなレアリティが無ければ抽選結果は null (バニラのドロップ) になる。

重みの変更

重みと倍率は有限かつ 0 以上でなければならず、それ以外は IllegalArgumentException を投げる。 検証は変更の前に行うため、拒否された呼び出しは何も変更しない。 結果が Double.MAX_VALUE を超える場合は Double.MAX_VALUE に丸める。

スレッドセーフではない。1 回の抽選の中で、同じスレッドから使うことを想定している。

Parameters

world

抽選する釣りワールドの ID

weather

釣りワールドの現在の天候。不明なら null (天候条件付きの魚は候補外になる)

rarities

登録されているレアリティ

fishes

登録されている魚

Constructors

Link copied to clipboard
constructor(world: FishingWorldId, weather: WeatherType?, rarities: List<RarityData>, fishes: List<FishData>)

Functions

Link copied to clipboard

候補の魚を全て、レアリティ順に返す。返すリストは変更できない。

指定したレアリティの候補の魚を返す。候補外のレアリティなら空のリスト。返すリストは変更できない。

Link copied to clipboard

魚の現在の重みを返す。候補外の魚なら 0。

Link copied to clipboard

現在の重みで、この魚が釣れる全体の確率を返す。候補外や抽選対象外の魚なら 0。 全ての魚の確率の合計は、抽選対象があれば 1、無ければ 0 になる。

Link copied to clipboard

候補のレアリティを登録順に返す。返すリストは変更できない。

Link copied to clipboard

レアリティの現在の重みを返す。候補外のレアリティなら 0。

Link copied to clipboard

候補の判定に使った天候を返す。不明なら null。

Link copied to clipboard

抽選する釣りワールドの ID を返す。

Link copied to clipboard

候補が 1 匹もいなければ true。候補が重み 0 の魚だけの場合は false だが、抽選結果は null になる。

Link copied to clipboard

魚が釣れる全体の確率 (getProbability) を factor 倍にする。他の全ての候補の確率は互いの比を保ったまま一律に増減する。

Link copied to clipboard

魚の重みに倍率を掛ける。通常は同じレアリティ内での割合だけが変わり、全体の確率は倍率どおりにはならない。 全体の確率を倍率どおりに変えたい場合は multiplyFishProbability を使う。

Link copied to clipboard

レアリティの重みに倍率を掛ける。同じレアリティの魚の確率がまとめて変わり、他のレアリティの確率は相対的に下がる。

Link copied to clipboard
fun setFishWeight(fish: FishId, weight: Double): Boolean

魚の重み (同じレアリティ内での重み) を設定する。

Link copied to clipboard
fun setRarityWeight(rarity: RarityId, weight: Double): Boolean

レアリティの重みを設定する。