From 16c1574e400d73198713336e18975ff37ab78290 Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Fri, 11 Oct 2024 16:02:07 -0400 Subject: Way too many changes (0.2) --- src/payload.rs | 84 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 src/payload.rs (limited to 'src/payload.rs') diff --git a/src/payload.rs b/src/payload.rs new file mode 100644 index 0000000..2aa3f23 --- /dev/null +++ b/src/payload.rs @@ -0,0 +1,84 @@ +use std::{collections::HashMap, str::FromStr}; + +use avian3d::prelude::RigidBody; +use bevy::prelude::*; +use serde::{Deserialize, Serialize}; +use strum::{EnumDiscriminants, EnumString}; +use yarnspinner::core::YarnValue; + +#[derive(Serialize, Deserialize, Default, Clone, Deref, DerefMut, Debug)] +pub struct DirworldEntityPayload(Vec); + +impl DirworldEntityPayload { + pub fn component(&self, name: &str) -> Option<&DirworldComponent> { + if let Ok(discriminant) = DirworldComponentDiscriminants::from_str(name) { + self.iter() + .find(|component| discriminant == DirworldComponentDiscriminants::from(*component)) + } else { + None + } + } + + pub fn component_mut(&mut self, name: &str) -> Option<&mut DirworldComponent> { + if let Ok(discriminant) = DirworldComponentDiscriminants::from_str(name) { + self.iter_mut() + .find(|component| discriminant == DirworldComponentDiscriminants::from(&**component)) + } else { + None + } + } + + pub fn components(&self, name: &str) -> Vec<&DirworldComponent> { + if let Ok(discriminant) = DirworldComponentDiscriminants::from_str(name) { + self.iter() + .filter(|component| { + discriminant == DirworldComponentDiscriminants::from(*component) + }) + .collect() + } else { + vec![] + } + } + + pub fn components_mut(&mut self, name: &str) -> Vec<&mut DirworldComponent> { + if let Ok(discriminant) = DirworldComponentDiscriminants::from_str(name) { + self.iter_mut() + .filter(|component| { + discriminant == DirworldComponentDiscriminants::from(&**component) + }) + .collect() + } else { + vec![] + } + } +} + +#[derive(Serialize, Deserialize, Clone, EnumDiscriminants, Debug)] +#[strum_discriminants(derive(EnumString))] +pub enum DirworldComponent { + Transform(Transform), + Name(String), + Actor { + local_variables: HashMap, + yarn_source: Vec, + }, + Voice { + pitch: i32, + preset: i32, + bank: i32, + variance: u32, + speed: f32, + }, + Rigidbody(RigidBody), + MeshCollider { + convex: bool, + sensor: bool, + }, + Script { + lua_source: Vec, + }, + Relationship { + label: String, + hash: [u8; 16], + }, +} -- cgit v1.2.3