API tweaks
parent
9f19becf0c
commit
82f2f5fc85
|
@ -1,6 +1,8 @@
|
|||
use galactica_content::{Content, Outfit};
|
||||
use galactica_content::{Content, Outfit, OutfitSpace};
|
||||
use log::error;
|
||||
use rhai::{CustomType, FnNamespace, FuncRegistration, ImmutableString, Module, TypeBuilder};
|
||||
use rhai::{
|
||||
CustomType, Dynamic, FnNamespace, FuncRegistration, ImmutableString, Map, Module, TypeBuilder,
|
||||
};
|
||||
use std::sync::Arc;
|
||||
|
||||
pub fn build_ct_module(ct_src: Arc<Content>) -> Module {
|
||||
|
@ -40,6 +42,10 @@ impl OutfitState {
|
|||
pub fn new_none() -> Self {
|
||||
Self { outfit: None }
|
||||
}
|
||||
|
||||
pub fn get_outfit(&self) -> Option<Arc<Outfit>> {
|
||||
self.outfit.as_ref().cloned()
|
||||
}
|
||||
}
|
||||
|
||||
impl CustomType for OutfitState {
|
||||
|
@ -71,6 +77,20 @@ impl CustomType for OutfitState {
|
|||
.map(|x| x.thumbnail.index.to_string())
|
||||
.unwrap_or("".to_string())
|
||||
})
|
||||
.with_fn("cost", |s: &mut Self| {
|
||||
s.outfit.as_ref().map(|x| x.cost).unwrap_or(0)
|
||||
})
|
||||
.with_fn("required_space", |s: &mut Self| {
|
||||
Map::from_iter(
|
||||
s.outfit
|
||||
.as_ref()
|
||||
.map(|x| x.space)
|
||||
.unwrap_or(OutfitSpace::new())
|
||||
.to_hashmap()
|
||||
.iter()
|
||||
.map(|(k, v)| (ImmutableString::from(k).into(), Dynamic::from(*v as i64))),
|
||||
)
|
||||
})
|
||||
//
|
||||
// Stat getters
|
||||
//
|
||||
|
@ -104,6 +124,9 @@ impl CustomType for OutfitState {
|
|||
.map(|x| x.stats.shield_delay)
|
||||
.unwrap_or(0.0)
|
||||
})
|
||||
.with_fn("stat_is_gun", |s: &mut Self| {
|
||||
s.outfit.as_ref().map(|x| x.gun.is_some()).unwrap_or(false)
|
||||
})
|
||||
.with_fn("stat_shield_dps", |s: &mut Self| {
|
||||
s.outfit
|
||||
.as_ref()
|
||||
|
|
|
@ -7,7 +7,7 @@ use galactica_util::to_degrees;
|
|||
use log::error;
|
||||
use nalgebra::Vector2;
|
||||
use rapier2d::dynamics::RigidBody;
|
||||
use rhai::{Array, CustomType, Dynamic, ImmutableString, TypeBuilder};
|
||||
use rhai::{Array, CustomType, Dynamic, ImmutableString, Map, TypeBuilder};
|
||||
use std::sync::Arc;
|
||||
|
||||
use super::{functions::OutfitState, Color, UiVector};
|
||||
|
@ -94,14 +94,6 @@ impl CustomType for ShipState {
|
|||
s.get_content().thumbnail.index.clone().into()
|
||||
})
|
||||
.with_fn("landed_on", |s: &mut Self| s.landed_on())
|
||||
.with_fn("current_shields", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_shields()
|
||||
})
|
||||
.with_fn("total_hull", |s: &mut Self| s.get_content().hull)
|
||||
.with_fn("empty_mass", |s: &mut Self| s.get_content().mass)
|
||||
.with_fn("current_hull", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_hull()
|
||||
})
|
||||
.with_fn("get_size", |s: &mut Self| s.get_content().size)
|
||||
.with_fn("phys_uid", |s: &mut Self| format!("{}", s.get_ship().uid))
|
||||
.with_fn("get_pos", |s: &mut Self| {
|
||||
|
@ -114,7 +106,46 @@ impl CustomType for ShipState {
|
|||
Color::new(c[0], c[1], c[2], 1.0)
|
||||
})
|
||||
//
|
||||
// Stat getters
|
||||
// Ship stat getters
|
||||
//
|
||||
.with_fn("used_space", |s: &mut Self| {
|
||||
Map::from_iter(
|
||||
s.get_ship()
|
||||
.get_data()
|
||||
.get_outfits()
|
||||
.get_used_space()
|
||||
.to_hashmap()
|
||||
.iter()
|
||||
.map(|(k, v)| (ImmutableString::from(k).into(), Dynamic::from(*v as i64))),
|
||||
)
|
||||
})
|
||||
.with_fn("total_space", |s: &mut Self| {
|
||||
Map::from_iter(
|
||||
s.get_ship()
|
||||
.get_data()
|
||||
.get_outfits()
|
||||
.get_total_space()
|
||||
.to_hashmap()
|
||||
.iter()
|
||||
.map(|(k, v)| (ImmutableString::from(k).into(), Dynamic::from(*v as i64))),
|
||||
)
|
||||
})
|
||||
.with_fn("total_gun_points", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_outfits().total_gun_points() as i64
|
||||
})
|
||||
.with_fn("free_gun_points", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_outfits().free_gun_points() as i64
|
||||
})
|
||||
.with_fn("current_shields", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_shields()
|
||||
})
|
||||
.with_fn("total_hull", |s: &mut Self| s.get_content().hull)
|
||||
.with_fn("empty_mass", |s: &mut Self| s.get_content().mass)
|
||||
.with_fn("current_hull", |s: &mut Self| {
|
||||
s.get_ship().get_data().get_hull()
|
||||
})
|
||||
//
|
||||
// Outfit stat getters
|
||||
//
|
||||
.with_fn("stat_thrust", |s: &mut Self| {
|
||||
s.get_ship()
|
||||
|
@ -264,7 +295,12 @@ impl State {
|
|||
pub fn player_ship(&mut self) -> ShipState {
|
||||
ShipState {
|
||||
input: self.input.clone(),
|
||||
ship: self.input.player.ship.map(|x| PhysSimShipHandle(x)),
|
||||
ship: self
|
||||
.input
|
||||
.player
|
||||
.borrow()
|
||||
.ship
|
||||
.map(|x| PhysSimShipHandle(x)),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue