mirror of
https://github.com/Paoda/blue-gacha.git
synced 2025-11-06 22:52:10 +00:00
feat: ensure that bluearch-recruitment is a library
This commit is contained in:
407
examples/students.json
Normal file
407
examples/students.json
Normal file
@@ -0,0 +1,407 @@
|
||||
[
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ヒナ",
|
||||
"eng": "Hina"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "イオリ",
|
||||
"eng": "Iori"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ハルナ",
|
||||
"eng": "Haruna"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "イズミ",
|
||||
"eng": "Izumi"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Aru",
|
||||
"jpn": "アル"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "スミレ",
|
||||
"eng": "Sumire"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "エイミ",
|
||||
"eng": "Iemi"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Karin",
|
||||
"jpn": "カリン"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ネル",
|
||||
"eng": "Neru"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Maki",
|
||||
"jpn": "マキ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Hibiki",
|
||||
"jpn": "ヒビキ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Saya",
|
||||
"jpn": "サヤ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Shun",
|
||||
"jpn": "シュン"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Shiroko",
|
||||
"jpn": "シロコ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Hoshino",
|
||||
"jpn": "ホシノ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ヒフミ",
|
||||
"eng": "Hifumi"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Tsurugi",
|
||||
"jpn": "ツルギ"
|
||||
}
|
||||
},
|
||||
"rarity": 3
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "アカリ",
|
||||
"eng": "Akari"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ジュンコ",
|
||||
"eng": "Junko"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ムツキ",
|
||||
"eng": "Mutsuki"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Kayoko",
|
||||
"jpn": "カヨコ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "フウカ",
|
||||
"eng": "Fuuka"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ユウカ",
|
||||
"eng": "Yuuka"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Akane",
|
||||
"jpn": "アカネ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ハル",
|
||||
"eng": "Haru"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Utaha",
|
||||
"jpn": "ウタハ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "チセ",
|
||||
"eng": "Chise"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Tsubaki",
|
||||
"jpn": "ツバキ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "セリカ",
|
||||
"eng": "Serika"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "アヤネ",
|
||||
"eng": "Ayane"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Hasumi",
|
||||
"jpn": "ハスミ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Hanae",
|
||||
"jpn": "ハナエ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Airi",
|
||||
"jpn": "アイリ"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ノゾミ",
|
||||
"eng": "Nozomi"
|
||||
}
|
||||
},
|
||||
"rarity": 2
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Chinatsu",
|
||||
"jpn": "チナツ"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Haruka",
|
||||
"jpn": "ハルカ"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "ジュリ",
|
||||
"eng": "Juri"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "コタマ",
|
||||
"eng": "Kotama"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "アスナ",
|
||||
"eng": "Asuna"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "コトリ",
|
||||
"eng": "Kotori"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "フィーナ",
|
||||
"eng": "Pina"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"jpn": "スズミ",
|
||||
"eng": "Suzumi"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Shimiko",
|
||||
"jpn": "シミコ"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Serina",
|
||||
"jpn": "セリナ"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
},
|
||||
{
|
||||
"name": {
|
||||
"translations": {
|
||||
"eng": "Yoshimi",
|
||||
"jpn": "ヨシミ"
|
||||
}
|
||||
},
|
||||
"rarity": 1
|
||||
}
|
||||
]
|
||||
56
examples/ten_pull.rs
Normal file
56
examples/ten_pull.rs
Normal file
@@ -0,0 +1,56 @@
|
||||
use bluearch_recruitment::banner::BannerBuilder;
|
||||
use bluearch_recruitment::gacha::{GachaBuilder, Recruitment};
|
||||
use bluearch_recruitment::i18n::Language;
|
||||
use bluearch_recruitment::student::Student;
|
||||
use std::{fs::File, io::Read};
|
||||
|
||||
fn main() {
|
||||
let mut file = File::open("./examples/students.json").unwrap();
|
||||
let mut json = String::new();
|
||||
file.read_to_string(&mut json).unwrap();
|
||||
|
||||
let students: Vec<Student> = serde_json::from_str(&json).unwrap();
|
||||
|
||||
// This particular banner consists of everyone BUT Nozomi.
|
||||
let banner_students: Vec<Student> = students
|
||||
.iter()
|
||||
.filter(|student| student.name != "ノゾミ")
|
||||
.map(|student| student.clone())
|
||||
.collect();
|
||||
|
||||
// Both Hoshino and Shiroko have an increased chance of being pulled.
|
||||
let hoshino = find_student(&students, "ホシノ").unwrap();
|
||||
let shiroko = find_student(&students, "シロコ").unwrap();
|
||||
let rate_up_students = vec![shiroko, hoshino];
|
||||
|
||||
let gacha = GachaBuilder::new(79.0, 18.5, 2.5)
|
||||
.with_pool(banner_students)
|
||||
.with_priority(&rate_up_students, 0.7)
|
||||
.finish()
|
||||
.unwrap();
|
||||
|
||||
let banner = BannerBuilder::new("ピックアップ募集")
|
||||
.with_name_translation(Language::English, "Rate-Up Registration")
|
||||
.with_sparkable_students(&rate_up_students)
|
||||
.with_gacha(&gacha)
|
||||
.finish()
|
||||
.unwrap();
|
||||
|
||||
let students = banner.roll10();
|
||||
|
||||
println!("{} 10-pull: \n", banner.name);
|
||||
for student in students.iter() {
|
||||
println!(
|
||||
"{} {}",
|
||||
student.name.get(Language::English).unwrap(),
|
||||
student.rarity
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn find_student(students: &[Student], jpn_name: &str) -> Option<Student> {
|
||||
students
|
||||
.iter()
|
||||
.find(|student| student.name == jpn_name)
|
||||
.map(|student| student.clone())
|
||||
}
|
||||
Reference in New Issue
Block a user