Skip to content

Commit ba3ab95

Browse files
committed
Add PropertyBuilder::with_rpc_mode
1 parent 2207b6d commit ba3ab95

File tree

3 files changed

+35
-11
lines changed

3 files changed

+35
-11
lines changed

gdnative-core/src/export/class_builder.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -218,18 +218,10 @@ impl<C: NativeClass> ClassBuilder<C> {
218218
pub(crate) fn add_method(&self, method: ScriptMethod) {
219219
let method_name = CString::new(method.name).unwrap();
220220

221-
let rpc = match method.attributes.rpc_mode {
222-
RpcMode::Master => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_MASTER,
223-
RpcMode::Remote => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_REMOTE,
224-
RpcMode::Puppet => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_PUPPET,
225-
RpcMode::RemoteSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_REMOTESYNC,
226-
RpcMode::Disabled => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_DISABLED,
227-
RpcMode::MasterSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_MASTERSYNC,
228-
RpcMode::PuppetSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_PUPPETSYNC,
221+
let attr = sys::godot_method_attributes {
222+
rpc_type: method.attributes.rpc_mode.sys(),
229223
};
230224

231-
let attr = sys::godot_method_attributes { rpc_type: rpc };
232-
233225
let method_desc = sys::godot_instance_method {
234226
method: method.method_ptr,
235227
method_data: method.method_data,

gdnative-core/src/export/method.rs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ type ScriptMethodFn = unsafe extern "C" fn(
9696
*mut *mut sys::godot_variant,
9797
) -> sys::godot_variant;
9898

99+
#[derive(Clone, Copy, PartialEq, Eq, Hash, Debug)]
99100
pub enum RpcMode {
100101
Disabled,
101102
Remote,
@@ -113,6 +114,20 @@ impl Default for RpcMode {
113114
}
114115
}
115116

117+
impl RpcMode {
118+
pub(crate) fn sys(self) -> sys::godot_method_rpc_mode {
119+
match self {
120+
RpcMode::Master => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_MASTER,
121+
RpcMode::Remote => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_REMOTE,
122+
RpcMode::Puppet => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_PUPPET,
123+
RpcMode::RemoteSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_REMOTESYNC,
124+
RpcMode::Disabled => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_DISABLED,
125+
RpcMode::MasterSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_MASTERSYNC,
126+
RpcMode::PuppetSync => sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_PUPPETSYNC,
127+
}
128+
}
129+
}
130+
116131
pub(crate) struct ScriptMethodAttributes {
117132
pub rpc_mode: RpcMode,
118133
}

gdnative-core/src/export/property.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ use crate::object::ownership::Shared;
1515
use crate::object::{GodotObject, Instance, Ref};
1616
use crate::private::get_api;
1717

18+
use super::RpcMode;
19+
1820
mod accessor;
1921
mod invalid_accessor;
2022

@@ -78,6 +80,7 @@ pub struct PropertyBuilder<'a, C, T: Export, S = InvalidSetter<'a>, G = InvalidG
7880
default: Option<T>,
7981
hint: Option<T::Hint>,
8082
usage: PropertyUsage,
83+
rpc_mode: RpcMode,
8184
class_builder: &'a ClassBuilder<C>,
8285
}
8386

@@ -96,6 +99,7 @@ where
9699
default: None,
97100
hint: None,
98101
usage: PropertyUsage::DEFAULT,
102+
rpc_mode: RpcMode::Disabled,
99103
class_builder,
100104
}
101105
}
@@ -119,7 +123,7 @@ where
119123
let default = self.default.to_variant();
120124

121125
let mut attr = sys::godot_property_attributes {
122-
rset_type: sys::godot_method_rpc_mode_GODOT_METHOD_RPC_MODE_DISABLED, // TODO(#995)
126+
rset_type: self.rpc_mode.sys(),
123127
type_: variant_type as sys::godot_int,
124128
hint: hint_kind,
125129
hint_string: hint_string.to_sys(),
@@ -161,6 +165,7 @@ where
161165
default: self.default,
162166
hint: self.hint,
163167
usage: self.usage,
168+
rpc_mode: self.rpc_mode,
164169
class_builder: self.class_builder,
165170
}
166171
}
@@ -184,6 +189,7 @@ where
184189
default: self.default,
185190
hint: self.hint,
186191
usage: self.usage,
192+
rpc_mode: self.rpc_mode,
187193
class_builder: self.class_builder,
188194
}
189195
}
@@ -205,6 +211,7 @@ where
205211
default: self.default,
206212
hint: self.hint,
207213
usage: self.usage,
214+
rpc_mode: self.rpc_mode,
208215
class_builder: self.class_builder,
209216
}
210217
}
@@ -226,6 +233,7 @@ where
226233
default: self.default,
227234
hint: self.hint,
228235
usage: self.usage,
236+
rpc_mode: self.rpc_mode,
229237
class_builder: self.class_builder,
230238
}
231239
}
@@ -247,6 +255,7 @@ where
247255
default: self.default,
248256
hint: self.hint,
249257
usage: self.usage,
258+
rpc_mode: self.rpc_mode,
250259
class_builder: self.class_builder,
251260
}
252261
}
@@ -268,6 +277,7 @@ where
268277
default: self.default,
269278
hint: self.hint,
270279
usage: self.usage,
280+
rpc_mode: self.rpc_mode,
271281
class_builder: self.class_builder,
272282
}
273283
}
@@ -293,6 +303,13 @@ where
293303
self.usage = usage;
294304
self
295305
}
306+
307+
/// Sets a RPC mode.
308+
#[inline]
309+
pub fn with_rpc_mode(mut self, rpc_mode: RpcMode) -> Self {
310+
self.rpc_mode = rpc_mode;
311+
self
312+
}
296313
}
297314

298315
bitflags::bitflags! {

0 commit comments

Comments
 (0)