~starkingdoms/starkingdoms

ref: 461d3d233fe9f2f94f9a1f1b9ccf9d1cdc9a9edb starkingdoms/crates/unified/src/attachment.rs -rw-r--r-- 1.6 KiB
461d3d23TerraMaster85 fix starfield alignment(?) 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use std::ops::Deref;
use bevy::asset::processor::ErasedProcessor;
use bevy::ecs::entity::MapEntities;
use bevy::prelude::*;
use serde::{Deserialize, Serialize};

#[derive(Component, Serialize, Deserialize)]
/// The primary component for a ship structure
pub struct Ship;

#[derive(Component, Serialize, Deserialize)]
#[relationship_target(relationship = PartInShip, linked_spawn)]
pub struct Parts(#[entities] Vec<Entity>);

#[derive(Component, Serialize, Deserialize)]
#[relationship(relationship_target = Parts)]
pub struct PartInShip(#[entities] Entity);


#[derive(Component, Serialize, Deserialize)]
#[require(Transform)]
pub struct Joint {
    pub id: JointId,
    pub transform: Transform
}
#[derive(Component, Serialize, Deserialize)]
pub struct Peer(#[entities] Entity);

#[derive(Component, Serialize, Deserialize)]
#[relationship(relationship_target = Joints)]
pub struct JointOf(#[entities] pub Entity);
#[derive(Component, Serialize, Deserialize)]
#[relationship_target(relationship = JointOf)]
pub struct Joints(#[entities] Vec<Entity>);
#[derive(Component, Serialize, Deserialize)]
#[relationship(relationship_target = JointSnaps)]
pub struct JointSnapOf(#[entities] pub Entity);
#[derive(Component, Serialize, Deserialize)]
#[relationship_target(relationship = JointSnapOf)]
pub struct JointSnaps(#[entities] Vec<Entity>);

#[derive(Serialize, Deserialize)]
pub struct JointId(pub String);
impl JointId {
    pub fn from_part_and_joint_id(part: String, joint: String) -> Self {
        Self(format!("{part}:{joint}"))
    }
}

#[derive(Serialize, Deserialize, Component)]
pub struct JointSnapFor(#[entities] pub Entity);