ResoniteModdingGroup/MonkeyLoader.GamePacks.Resonite#92 would build on a system to keep an object's data synchronized with other users of the same mod. For this, we can create the general scaffolding in the loader, so that any Integration packages only have to implement the synchronization itself.
Proposed Name: MonkeySync
The sync objects would need to be associated with something that facilitates their synchronization - e.g. the DynamicVariableSpace for Resonite. Could also be the Slot or World though. For something synced via Cloud Variables, the Engine might make sense.
Thinking of introducing an "INotifyValueChanged" interface and wrapper type, which defining config keys would implement too, that would be used for the properties of the synchronized object. It would also be used to automatically implement INotifyPropertyChanged.
However, I'm not quite sure on this yet.
There should be three modes for updates:
- Towards others only ('primary')
- From others only ('copy')
- Bidirectional ('bridge')
Synchronized methods must not have any arguments, except the synchronized object (i.e. parameterless instance methods). Passing one value that's used as the trigger may work too.
ResoniteModdingGroup/MonkeyLoader.GamePacks.Resonite#92 would build on a system to keep an object's data synchronized with other users of the same mod. For this, we can create the general scaffolding in the loader, so that any Integration packages only have to implement the synchronization itself.
Proposed Name: MonkeySync
The sync objects would need to be associated with something that facilitates their synchronization - e.g. the DynamicVariableSpace for Resonite. Could also be the Slot or World though. For something synced via Cloud Variables, the Engine might make sense.
Thinking of introducing an "INotifyValueChanged" interface and wrapper type, which defining config keys would implement too, that would be used for the properties of the synchronized object. It would also be used to automatically implement INotifyPropertyChanged.
However, I'm not quite sure on this yet.
There should be three modes for updates:
Synchronized methods must not have any arguments, except the synchronized object (i.e. parameterless instance methods). Passing one value that's used as the trigger may work too.