refactor(vm): freeze concreet ic, add "humans", tsify feature

This commit is contained in:
Rachel Powers
2024-05-27 01:10:59 -07:00
parent d70d3a2431
commit 88ff2d1bdb
26 changed files with 997 additions and 163 deletions

View File

@@ -14,17 +14,15 @@ use crate::{
stationpedia::{self, Memory, Page, Stationpedia},
};
use stationeers_data::{
templates::{
ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo,
ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate,
ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate,
ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe,
RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo,
StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate,
StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate,
StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo,
},
use stationeers_data::templates::{
ConnectionInfo, ConsumerInfo, DeviceInfo, FabricatorInfo, Instruction, InternalAtmoInfo,
ItemCircuitHolderTemplate, ItemConsumerTemplate, ItemInfo, ItemLogicMemoryTemplate,
ItemLogicTemplate, ItemSlotsTemplate, ItemSuitCircuitHolderTemplate, ItemSuitLogicTemplate,
ItemSuitTemplate, ItemTemplate, LogicInfo, MemoryInfo, ObjectTemplate, PrefabInfo, Recipe,
RecipeGasMix, RecipeRange, SlotInfo, StructureCircuitHolderTemplate, StructureInfo,
StructureLogicDeviceConsumerMemoryTemplate, StructureLogicDeviceConsumerTemplate,
StructureLogicDeviceMemoryTemplate, StructureLogicDeviceTemplate, StructureLogicTemplate,
StructureSlotsTemplate, StructureTemplate, SuitInfo, ThermalInfo,
};
#[allow(clippy::too_many_lines)]
@@ -67,7 +65,8 @@ pub fn generate_database(
| ItemLogicMemory(_)
| ItemSuit(_)
| ItemSuitLogic(_)
| ItemSuitCircuitHolder(_) => None,
| ItemSuitCircuitHolder(_)
| Human(_) => None,
}
})
.collect();
@@ -83,7 +82,8 @@ pub fn generate_database(
| StructureCircuitHolder(_)
| StructureLogicDeviceConsumer(_)
| StructureLogicDeviceMemory(_)
| StructureLogicDeviceConsumerMemory(_) => None,
| StructureLogicDeviceConsumerMemory(_)
| Human(_) => None,
Item(_)
| ItemSlots(_)
| ItemConsumer(_)
@@ -112,7 +112,8 @@ pub fn generate_database(
| Item(_)
| ItemSlots(_)
| ItemSuit(_)
| ItemConsumer(_) => None,
| ItemConsumer(_)
| Human(_) => None,
ItemLogic(_)
| ItemCircuitHolder(_)
| ItemLogicMemory(_)
@@ -138,7 +139,8 @@ pub fn generate_database(
| ItemLogicMemory(_)
| ItemSuit(_)
| ItemSuitLogic(_)
| ItemSuitCircuitHolder(_) => None,
| ItemSuitCircuitHolder(_)
| Human(_) => None,
StructureLogicDevice(_)
| StructureCircuitHolder(_)
| StructureLogicDeviceMemory(_)

View File

@@ -27,15 +27,13 @@ pub fn generate(
.map(|enm| enm.enum_name.clone())
.collect::<Vec<_>>();
let mut writer =
std::io::BufWriter::new(std::fs::File::create(enums_path.join("script.rs"))?);
let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("script.rs"))?);
write_repr_enum_use_header(&mut writer)?;
for enm in enums.script_enums.values() {
write_enum_listing(&mut writer, enm)?;
}
let mut writer =
std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic.rs"))?);
let mut writer = std::io::BufWriter::new(std::fs::File::create(enums_path.join("basic.rs"))?);
write_repr_enum_use_header(&mut writer)?;
let script_enums_in_basic = enums
.script_enums
@@ -327,6 +325,11 @@ fn write_repr_enum_use_header<T: std::io::Write>(
use strum::{
AsRefStr, Display, EnumIter, EnumProperty, EnumString, FromRepr,
};
#[cfg(feature = "tsify")]
use tsify::Tsify;
#[cfg(feature = "tsify")]
use wasm_bindgen::prelude::*;
}
)?;
Ok(())
@@ -341,11 +344,7 @@ fn write_repr_basic_use_header<T: std::io::Write>(
.map(|enm| Ident::new(&enm.enum_name.to_case(Case::Pascal), Span::call_site()))
.collect::<Vec<_>>();
write!(
writer,
"{}",
quote! {use super::script::{ #(#enums),*};},
)?;
write!(writer, "{}", quote! {use super::script::{ #(#enums),*};},)?;
Ok(())
}
@@ -434,6 +433,8 @@ where
"{}",
quote! {
#[derive(#(#derives),*)]
#[cfg_attr(feature = "tsify", derive(Tsify))]
#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))]
#additional_strum
#[repr(#repr)]
pub enum #name {

View File

@@ -56,6 +56,11 @@ fn write_instructions_enum<T: std::io::Write>(
Display, EnumIter, EnumProperty, EnumString, FromRepr,
};
use crate::vm::object::traits::Programmable;
#[cfg(feature = "tsify")]
use tsify::Tsify;
#[cfg(feature = "tsify")]
use wasm_bindgen::prelude::*;
}
)?;
@@ -78,10 +83,12 @@ fn write_instructions_enum<T: std::io::Write>(
writer,
"{}",
quote::quote! {#[derive(Debug, Display, PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Serialize, Deserialize)]
#[derive(EnumIter, EnumString, EnumProperty, FromRepr)]
#[strum(use_phf, serialize_all = "lowercase")]
#[serde(rename_all = "lowercase")]
pub enum InstructionOp {
#[derive(EnumIter, EnumString, EnumProperty, FromRepr)]
#[cfg_attr(feature = "tsify", derive(Tsify))]
#[cfg_attr(feature = "tsify", tsify(into_wasm_abi, from_wasm_abi))]
#[strum(use_phf, serialize_all = "lowercase")]
#[serde(rename_all = "lowercase")]
pub enum InstructionOp {
Nop,
#(#inst_variants)*

View File

@@ -4,7 +4,7 @@ use stationeers_data::enums::MachineTier;
use std::collections::BTreeMap;
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
#[serde(rename = "Stationpedia", deny_unknown_fields)]
#[serde(rename = "Stationpedia")]
pub struct Stationpedia {
pub pages: Vec<Page>,
pub reagents: BTreeMap<String, Reagent>,