gamai/prop/prop.rs
1// use std::ops::Deref;
2// use std::ops::DerefMut;
3
4// /// Trait for structs that implement Deref and DerefMut, required for use as a prop.
5// pub trait Prop<T>: Deref<Target = T> + DerefMut<Target = T> {}
6// impl<T> Prop<T> for T where T: Deref<Target = T> + DerefMut<Target = T> {}
7// /// Trait for structs that implement Deref and DerefMut, required for use as a prop.
8// pub trait Prop<T> {
9// fn get(&self) -> &T;
10// fn set(&mut self, value: T);
11// }
12// impl<T> Prop<T> for T where T: Deref<Target = T> + DerefMut<Target = T> {}
13
14
15// pub trait PropList<T> {
16// fn get_props() -> Vec<Box<dyn Prop<T>>>;
17// }
18
19pub struct SetPropError(pub String);
20
21pub struct PropHandle<PropT, ValueT> {
22 pub get: fn(prop: &PropT) -> ValueT,
23 pub set: fn(prop: &mut PropT, value: ValueT) -> Result<(), SetPropError>,
24 pub show_if: fn(prop: &PropT) -> bool,
25}
26
27pub trait PropInput<T> {
28 fn get(&self) -> &T;
29 fn set(&mut self, value: T);
30 fn show_if(&self) -> bool { true }
31}
32
33pub struct RangeProp<T> {
34 pub value: T,
35 pub min: T,
36 pub max: T,
37 pub step: T,
38}
39
40// impl PropInput<u32> for SliderProp<u32> {
41// fn get(&self) -> &u32 { &self.value }
42// fn set(&mut self, value: u32) { self.value = value }
43// }
44
45pub struct DropdownProp<T> {
46 pub value: T,
47 pub index: usize,
48 pub display_names: Vec<String>,
49}
50
51// impl PropInput<u32> for DropdownProp<u32> {
52// fn get(&self) -> &u32 { &self.value }
53// fn set(&mut self, value: u32) { self.value = value }
54// }
55
56
57
58pub trait UiBuilder<T> {
59 fn get_binding(){
60
61 }
62}
63
64pub enum BuiltinUiBindings {
65 Group,
66 Slider,
67 Dropdown,
68}
69
70
71pub enum BuiltinUiComponents {}
72
73
74
75
76
77
78/*
791. example implementation
80
81struct Foobar {
82 a:u32,
83 b:u32,
84}
85
86impl PropList<Foobar> for Foobar {
87 fn get_props() -> Vec<Box<dyn Prop<Foobar>>> {
88 vec![
89 Box::new(PropHandle {
90 get: |prop: &Foobar| prop.a,
91 }),
92 Box::new(PropHandle {
93 get: |prop: &Foobar| prop.b,
94 }),
95 ]
96 }
97}
98
99fn SliderComponent<T:AcceptsSlider>(entity:Entity){
100
101
102
103}
104
105
106
107
108trait PropInput<T>{
109
110
111}
112
113
114*/