Skip to content

Commit

Permalink
feat: add senses data and vision field
Browse files Browse the repository at this point in the history
  • Loading branch information
RakuJa committed Dec 1, 2024
1 parent 4dc1a9f commit 16f19b8
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 14 deletions.
21 changes: 16 additions & 5 deletions src/db/data_providers/creature_fetcher.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ use crate::models::creature::items::spell_caster_entry::SpellCasterEntry;
use crate::models::db::raw_immunity::RawImmunity;
use crate::models::db::raw_language::RawLanguage;
use crate::models::db::raw_resistance::RawResistance;
use crate::models::db::raw_sense::RawSense;
use crate::models::db::raw_speed::RawSpeed;
use crate::models::db::raw_weakness::RawWeakness;
use crate::models::db::sense::Sense;
use crate::models::item::armor_struct::Armor;
use crate::models::item::item_struct::Item;
use crate::models::item::shield_struct::Shield;
Expand Down Expand Up @@ -83,10 +83,10 @@ async fn fetch_creature_resistances(
.await?)
}

async fn fetch_creature_senses(conn: &Pool<Sqlite>, creature_id: i64) -> Result<Vec<RawSense>> {
async fn fetch_creature_senses(conn: &Pool<Sqlite>, creature_id: i64) -> Result<Vec<Sense>> {
Ok(sqlx::query_as!(
RawSense,
"SELECT * FROM SENSE_TABLE INTERSECT SELECT sense_id FROM SENSE_CREATURE_ASSOCIATION_TABLE WHERE creature_id == ($1)",
Sense,
"SELECT * FROM SENSE_TABLE WHERE id IN (SELECT sense_id FROM SENSE_CREATURE_ASSOCIATION_TABLE WHERE creature_id == ($1))",
creature_id
).fetch_all(conn).await?)
}
Expand Down Expand Up @@ -188,6 +188,15 @@ async fn fetch_creature_perception(conn: &Pool<Sqlite>, creature_id: i64) -> Res
)
}

async fn fetch_creature_vision(conn: &Pool<Sqlite>, creature_id: i64) -> Result<bool> {
Ok(
sqlx::query_scalar("SELECT vision FROM CREATURE_TABLE WHERE id = $1 LIMIT 1")
.bind(creature_id)
.fetch_one(conn)
.await?,
)
}

async fn fetch_creature_perception_detail(
conn: &Pool<Sqlite>,
creature_id: i64,
Expand Down Expand Up @@ -577,14 +586,15 @@ pub async fn fetch_creature_extra_data(
let ac_detail = fetch_creature_ac_detail(conn, creature_id).await?;
let language_detail = fetch_creature_language_detail(conn, creature_id).await?;
let perception = fetch_creature_perception(conn, creature_id).await?;
let has_vision = fetch_creature_vision(conn, creature_id).await?;
let perception_detail = fetch_creature_perception_detail(conn, creature_id).await?;

Ok(CreatureExtraData {
actions,
skills,
items,
languages: languages.iter().map(|x| x.name.clone()).collect(),
senses: senses.iter().map(|x| x.name.clone()).collect(),
senses,
speeds: speeds
.iter()
.map(|x| (x.name.clone(), x.value as i16))
Expand All @@ -595,6 +605,7 @@ pub async fn fetch_creature_extra_data(
language_detail,
perception,
perception_detail,
has_vision,
})
}

Expand Down
4 changes: 3 additions & 1 deletion src/models/creature/creature_component/creature_extra.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::models::creature::creature_metadata::variant_enum::CreatureVariant;
use crate::models::creature::items::action::Action;
use crate::models::creature::items::skill::Skill;
use crate::models::db::sense::Sense;
use crate::models::item::item_struct::Item;
use serde::{Deserialize, Serialize};
#[allow(unused_imports)] // it's actually used in the example schema
Expand Down Expand Up @@ -30,7 +31,7 @@ pub struct CreatureExtraData {
pub skills: Vec<Skill>,
pub items: Vec<Item>,
pub languages: Vec<String>,
pub senses: Vec<String>,
pub senses: Vec<Sense>,
#[schema(example = json!({"fly": 100, "swim": 50, "Base": 25}))]
pub speeds: BTreeMap<String, i16>,
pub ability_scores: AbilityScores,
Expand All @@ -40,6 +41,7 @@ pub struct CreatureExtraData {
#[schema(example = 0)]
pub perception: i8,
pub perception_detail: Option<String>,
pub has_vision: bool,
}

impl CreatureExtraData {
Expand Down
2 changes: 1 addition & 1 deletion src/models/db/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pub mod raw_immunity;
pub mod raw_language;
pub mod raw_resistance;
pub mod raw_sense;
pub mod raw_speed;
pub mod raw_weakness;
pub mod sense;
7 changes: 0 additions & 7 deletions src/models/db/raw_sense.rs

This file was deleted.

11 changes: 11 additions & 0 deletions src/models/db/sense.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
use serde::{Deserialize, Serialize};
use sqlx::FromRow;
use utoipa::ToSchema;

#[derive(Serialize, Deserialize, FromRow, ToSchema, Clone, Eq, Hash, PartialEq)]
pub struct Sense {
pub id: i64,
pub name: String,
pub range: Option<i64>,
pub acuity: Option<String>,
}

0 comments on commit 16f19b8

Please sign in to comment.