Skip to content

Commit 4278305

Browse files
authored
225-partial Ephys Link stuff (#241)
* Switched Communication Manager to use properties * Changed comment style * ProbeConnectionSettingsPanel.cs * Converted ephys link stuff in ProbeManager.cs
1 parent 0b3c400 commit 4278305

9 files changed

Lines changed: 215 additions & 356 deletions

Assets/Scripts/EphysLink/CommunicationManager.cs

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,18 @@ public class CommunicationManager : MonoBehaviour
2121

2222
#region Properties
2323

24+
/// <summary>
25+
/// The current state of the connection to Ephys Link.
26+
/// </summary>
27+
public bool IsConnected { get; private set; }
28+
29+
30+
#region Private
31+
2432
private string _serverIp;
2533
private int _serverPort;
26-
private bool _isConnected;
34+
35+
#endregion
2736

2837
#endregion
2938

@@ -81,7 +90,7 @@ public void ConnectToServer(string ip, int port, Action onConnected = null,
8190
Debug.Log("Connected to WebSocket server at " + ip + ":" + port);
8291
_serverIp = ip;
8392
_serverPort = port;
84-
_isConnected = true;
93+
IsConnected = true;
8594
PlayerPrefs.SaveEphysLinkConnectionData(ip, port);
8695
onConnected?.Invoke();
8796
});
@@ -90,7 +99,7 @@ public void ConnectToServer(string ip, int port, Action onConnected = null,
9099
var connectionErrorMessage =
91100
"Error connecting to server at " + ip + ":" + port + ". Check server for details.";
92101
Debug.LogWarning(connectionErrorMessage);
93-
_isConnected = false;
102+
IsConnected = false;
94103
_connectionManager.Close();
95104
_connectionManager = null;
96105
_socket = null;
@@ -100,7 +109,7 @@ public void ConnectToServer(string ip, int port, Action onConnected = null,
100109
{
101110
var connectionTimeoutMessage = "Connection to server at " + ip + ":" + port + " timed out";
102111
Debug.LogWarning(connectionTimeoutMessage);
103-
_isConnected = false;
112+
IsConnected = false;
104113
_connectionManager.Close();
105114
_connectionManager = null;
106115
_socket = null;
@@ -115,37 +124,10 @@ public void ConnectToServer(string ip, int port, Action onConnected = null,
115124
public void DisconnectFromServer(Action onDisconnected = null)
116125
{
117126
_connectionManager.Close();
118-
_isConnected = false;
127+
IsConnected = false;
119128
onDisconnected?.Invoke();
120129
}
121130

122-
/// <summary>
123-
/// Return the stored server IP address.
124-
/// </summary>
125-
/// <returns>Stored server IP address (can be an empty string)</returns>
126-
public string GetServerIp()
127-
{
128-
return _serverIp;
129-
}
130-
131-
/// <summary>
132-
/// Return the stored server port.
133-
/// </summary>
134-
/// <returns>Stored server port (can be 0)</returns>
135-
public int GetServerPort()
136-
{
137-
return _serverPort;
138-
}
139-
140-
/// <summary>
141-
/// Return if the server is connected.
142-
/// </summary>
143-
/// <returns>True if the server is connected, false otherwise</returns>
144-
public bool IsConnected()
145-
{
146-
return _isConnected;
147-
}
148-
149131
#endregion
150132

151133
#region Event Handlers

Assets/Scripts/Settings/EphysLinkSettings.cs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ private void Awake()
7272
private void FixedUpdate()
7373
{
7474
// Update probe panels whenever they change
75-
if (_trajectoryPlannerManager.GetAllProbes().Count(manager => !manager.IsGhost()) !=
75+
if (_trajectoryPlannerManager.GetAllProbes().Count(manager => !manager.IsGhost) !=
7676
_probeIdToProbeConnectionSettingsPanels.Count)
7777
UpdateProbePanels();
7878
}
@@ -95,12 +95,12 @@ private void UpdateConnectionUI()
9595
{
9696
// Connection UI
9797
connectionErrorText.text = "";
98-
connectButtonText.text = _communicationManager.IsConnected() ? "Disconnect" : "Connect";
98+
connectButtonText.text = _communicationManager.IsConnected ? "Disconnect" : "Connect";
9999
serverConnectedText.text =
100-
(_communicationManager.IsConnected() ? "Connected" : "Connect") + " to server at";
100+
(_communicationManager.IsConnected ? "Connected" : "Connect") + " to server at";
101101

102102
// Update available manipulators and their panels
103-
if (_communicationManager.IsConnected())
103+
if (_communicationManager.IsConnected)
104104
{
105105
UpdateManipulatorPanelAndSelection();
106106
}
@@ -119,7 +119,7 @@ private void UpdateProbePanels()
119119
var handledProbeIds = new HashSet<int>();
120120

121121
// Add any new probes in scene to list
122-
foreach (var probeManager in _trajectoryPlannerManager.GetAllProbes().Where(manager => !manager.IsGhost()))
122+
foreach (var probeManager in _trajectoryPlannerManager.GetAllProbes().Where(manager => !manager.IsGhost))
123123
{
124124
var probeId = probeManager.GetID();
125125

@@ -132,7 +132,7 @@ private void UpdateProbePanels()
132132
probeConnectionSettingsPanelGameObject.GetComponent<ProbeConnectionSettingsPanel>();
133133

134134
probeConnectionSettingsPanel.SetProbeManager(probeManager);
135-
probeConnectionSettingsPanel.SetEphysLinkSettings(this);
135+
probeConnectionSettingsPanel.EphysLinkSettings = this;
136136

137137
_probeIdToProbeConnectionSettingsPanels.Add(probeId,
138138
new ValueTuple<ProbeConnectionSettingsPanel, GameObject>(probeConnectionSettingsPanel,
@@ -168,14 +168,14 @@ public void UpdateManipulatorPanelAndSelection()
168168
{
169169
// Update probes with selectable options
170170
var usedManipulatorIds = _trajectoryPlannerManager.GetAllProbes()
171-
.Where(probeManager => probeManager.IsConnectedToManipulator())
172-
.Select(probeManager => probeManager.GetManipulatorId()).ToHashSet();
171+
.Where(probeManager => probeManager.IsEphysLinkControlled)
172+
.Select(probeManager => probeManager.ManipulatorId).ToHashSet();
173173
foreach (var probeConnectionSettingsPanel in _probeIdToProbeConnectionSettingsPanels.Values.Select(
174174
values => values.probeConnectionSettingsPanel))
175175
{
176176
var manipulatorDropdownOptions = new List<string> { "-" };
177177
manipulatorDropdownOptions.AddRange(availableIds.Where(id =>
178-
id.Equals(probeConnectionSettingsPanel.GetProbeManager().GetManipulatorId()) ||
178+
id.Equals(probeConnectionSettingsPanel.ProbeManager.ManipulatorId) ||
179179
!usedManipulatorIds.Contains(id)));
180180

181181
probeConnectionSettingsPanel.SetManipulatorIdDropdownOptions(manipulatorDropdownOptions);
@@ -221,7 +221,7 @@ public void UpdateManipulatorPanelAndSelection()
221221
/// </summary>
222222
public void OnConnectDisconnectPressed()
223223
{
224-
if (!_communicationManager.IsConnected())
224+
if (!_communicationManager.IsConnected)
225225
{
226226
// Attempt to connect to server
227227
try
@@ -248,8 +248,8 @@ public void OnConnectDisconnectPressed()
248248
_questionDialogue.SetYesCallback(() =>
249249
{
250250
foreach (var probeManager in _trajectoryPlannerManager.GetAllProbes()
251-
.Where(probeManager => probeManager.IsConnectedToManipulator()))
252-
probeManager.SetEphysLinkMovement(false);
251+
.Where(probeManager => probeManager.IsEphysLinkControlled))
252+
probeManager.SetIsEphysLinkControlled(false);
253253

254254
_communicationManager.DisconnectFromServer(UpdateConnectionUI);
255255
});

Assets/Scripts/Settings/ProbeConnectionSettingsPanel.cs

Lines changed: 48 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,22 @@ namespace Settings
1212
/// </summary>
1313
public class ProbeConnectionSettingsPanel : MonoBehaviour
1414
{
15+
#region Property Getters and Setters
16+
17+
/// <summary>
18+
/// Set probe manager reference attached to this panel.
19+
/// </summary>
20+
/// <param name="probeManager">This panel's probe's corresponding probe manager</param>
21+
public void SetProbeManager(ProbeManager probeManager)
22+
{
23+
ProbeManager = probeManager;
24+
25+
probeIdText.text = probeManager.GetID().ToString();
26+
probeIdText.color = probeManager.GetColor();
27+
}
28+
29+
#endregion
30+
1531
#region Unity
1632

1733
private void Awake()
@@ -24,29 +40,29 @@ private void Awake()
2440
/// </summary>
2541
private void FixedUpdate()
2642
{
27-
if (!_probeManager.IsConnectedToManipulator()) return;
43+
if (!ProbeManager.IsEphysLinkControlled) return;
2844
// Update display for zero coordinate offset
29-
if (_probeManager.GetZeroCoordinateOffset() != _displayedZeroCoordinateOffset)
45+
if (ProbeManager.ZeroCoordinateOffset != _displayedZeroCoordinateOffset)
3046
{
31-
_displayedZeroCoordinateOffset = _probeManager.GetZeroCoordinateOffset();
47+
_displayedZeroCoordinateOffset = ProbeManager.ZeroCoordinateOffset;
3248
xInputField.text = _displayedZeroCoordinateOffset.x.ToString(CultureInfo.CurrentCulture);
3349
yInputField.text = _displayedZeroCoordinateOffset.y.ToString(CultureInfo.CurrentCulture);
3450
zInputField.text = _displayedZeroCoordinateOffset.z.ToString(CultureInfo.CurrentCulture);
3551
dInputField.text = _displayedZeroCoordinateOffset.w.ToString(CultureInfo.CurrentCulture);
3652
}
3753

3854
// Update brain surface offset drop direction dropdown
39-
if (_probeManager.IsSetToDropToSurfaceWithDepth() != (brainSurfaceOffsetDirectionDropdown.value == 0))
55+
if (ProbeManager.IsSetToDropToSurfaceWithDepth != (brainSurfaceOffsetDirectionDropdown.value == 0))
4056
brainSurfaceOffsetDirectionDropdown.SetValueWithoutNotify(
41-
_probeManager.IsSetToDropToSurfaceWithDepth() ? 0 : 1);
42-
57+
ProbeManager.IsSetToDropToSurfaceWithDepth ? 0 : 1);
58+
4359
// Enable/disable interactivity of brain surface offset axis
44-
if (_probeManager.CanChangeBrainSurfaceOffsetAxis() != brainSurfaceOffsetDirectionDropdown.interactable)
45-
brainSurfaceOffsetDirectionDropdown.interactable = _probeManager.CanChangeBrainSurfaceOffsetAxis();
60+
if (ProbeManager.CanChangeBrainSurfaceOffsetAxis != brainSurfaceOffsetDirectionDropdown.interactable)
61+
brainSurfaceOffsetDirectionDropdown.interactable = ProbeManager.CanChangeBrainSurfaceOffsetAxis;
4662

4763
// Update display for brain surface offset
48-
if (!(Math.Abs(_probeManager.GetBrainSurfaceOffset() - _displayedBrainSurfaceOffset) > 0.001f)) return;
49-
_displayedBrainSurfaceOffset = _probeManager.GetBrainSurfaceOffset();
64+
if (!(Math.Abs(ProbeManager.BrainSurfaceOffset - _displayedBrainSurfaceOffset) > 0.001f)) return;
65+
_displayedBrainSurfaceOffset = ProbeManager.BrainSurfaceOffset;
5066
brainSurfaceOffsetInputField.text =
5167
_displayedBrainSurfaceOffset.ToString(CultureInfo.CurrentCulture);
5268
}
@@ -70,8 +86,8 @@ private void FixedUpdate()
7086

7187
#endregion
7288

73-
private ProbeManager _probeManager;
74-
private EphysLinkSettings _ephysLinkSettings;
89+
public ProbeManager ProbeManager { get; private set; }
90+
public EphysLinkSettings EphysLinkSettings { private get; set; }
7591
private TrajectoryPlannerManager _trajectoryPlannerManager;
7692

7793
#endregion
@@ -85,40 +101,6 @@ private void FixedUpdate()
85101

86102
#endregion
87103

88-
#region Property Getters and Setters
89-
90-
/// <summary>
91-
/// Set probe manager reference attached to this panel.
92-
/// </summary>
93-
/// <param name="probeManager">This panel's probe's corresponding probe manager</param>
94-
public void SetProbeManager(ProbeManager probeManager)
95-
{
96-
_probeManager = probeManager;
97-
98-
probeIdText.text = probeManager.GetID().ToString();
99-
probeIdText.color = probeManager.GetColor();
100-
}
101-
102-
/// <summary>
103-
/// Get the probe manager attached to this panel.
104-
/// </summary>
105-
/// <returns>This probe's probe manager</returns>
106-
public ProbeManager GetProbeManager()
107-
{
108-
return _probeManager;
109-
}
110-
111-
/// <summary>
112-
/// Set a reference to the Ephys Link settings panel.
113-
/// </summary>
114-
/// <param name="ephysLinkSettings">Reference to the Ephys Link settings menu.</param>
115-
public void SetEphysLinkSettings(EphysLinkSettings ephysLinkSettings)
116-
{
117-
_ephysLinkSettings = ephysLinkSettings;
118-
}
119-
120-
#endregion
121-
122104
#region Component Methods
123105

124106
/// <summary>
@@ -131,8 +113,8 @@ public void SetManipulatorIdDropdownOptions(List<string> idOptions)
131113
manipulatorIdDropdown.AddOptions(idOptions);
132114

133115
// Select the option corresponding to the current manipulator id
134-
var indexOfId = _probeManager.IsConnectedToManipulator()
135-
? Math.Max(0, idOptions.IndexOf(_probeManager.GetManipulatorId()))
116+
var indexOfId = ProbeManager.IsEphysLinkControlled
117+
? Math.Max(0, idOptions.IndexOf(ProbeManager.ManipulatorId))
136118
: 0;
137119
manipulatorIdDropdown.SetValueWithoutNotify(indexOfId);
138120
}
@@ -143,29 +125,31 @@ public void SetManipulatorIdDropdownOptions(List<string> idOptions)
143125
/// <param name="index">Manipulator option index that was selected (0 = no manipulator)</param>
144126
public void OnManipulatorDropdownValueChanged(int index)
145127
{
146-
if (_probeManager.IsConnectedToManipulator())
147-
_probeManager.SetEphysLinkMovement(false, "", false, () =>
128+
if (ProbeManager.IsEphysLinkControlled)
129+
ProbeManager.SetIsEphysLinkControlled(false, "", false, () =>
148130
{
149131
if (index != 0)
132+
{
150133
AttachToManipulatorAndUpdateUI();
134+
}
151135
else
152136
{
153-
_ephysLinkSettings.UpdateManipulatorPanelAndSelection();
154-
137+
EphysLinkSettings.UpdateManipulatorPanelAndSelection();
138+
155139
// Cleanup ghost prove stuff if applicable
156-
if (!_probeManager.HasGhost()) return;
157-
_trajectoryPlannerManager.DestroyProbe(_probeManager.GetGhostProbeManager());
158-
_probeManager.SetGhostProbeManager(null);
140+
if (!ProbeManager.HasGhost) return;
141+
_trajectoryPlannerManager.DestroyProbe(ProbeManager.GhostProbeManager);
142+
ProbeManager.GhostProbeManager = null;
159143
}
160144
});
161145
else
162146
AttachToManipulatorAndUpdateUI();
163147

164148
void AttachToManipulatorAndUpdateUI()
165149
{
166-
_probeManager.SetEphysLinkMovement(true,
150+
ProbeManager.SetIsEphysLinkControlled(true,
167151
manipulatorIdDropdown.options[index].text,
168-
onSuccess: () => { _ephysLinkSettings.UpdateManipulatorPanelAndSelection(); });
152+
onSuccess: () => { EphysLinkSettings.UpdateManipulatorPanelAndSelection(); });
169153
}
170154
}
171155

@@ -175,7 +159,7 @@ void AttachToManipulatorAndUpdateUI()
175159
/// <param name="x">X coordinate</param>
176160
public void OnZeroCoordinateXInputFieldEndEdit(string x)
177161
{
178-
_probeManager.SetZeroCoordinateOffsetX(float.Parse(x));
162+
ProbeManager.SetZeroCoordinateOffsetX(float.Parse(x));
179163
}
180164

181165
/// <summary>
@@ -184,7 +168,7 @@ public void OnZeroCoordinateXInputFieldEndEdit(string x)
184168
/// <param name="y">Y coordinate</param>
185169
public void OnZeroCoordinateYInputFieldEndEdit(string y)
186170
{
187-
_probeManager.SetZeroCoordinateOffsetY(float.Parse(y));
171+
ProbeManager.SetZeroCoordinateOffsetY(float.Parse(y));
188172
}
189173

190174
/// <summary>
@@ -193,7 +177,7 @@ public void OnZeroCoordinateYInputFieldEndEdit(string y)
193177
/// <param name="z">Z coordinate</param>
194178
public void OnZeroCoordinateZInputFieldEndEdit(string z)
195179
{
196-
_probeManager.SetZeroCoordinateOffsetZ(float.Parse(z));
180+
ProbeManager.SetZeroCoordinateOffsetZ(float.Parse(z));
197181
}
198182

199183
/// <summary>
@@ -202,7 +186,7 @@ public void OnZeroCoordinateZInputFieldEndEdit(string z)
202186
/// <param name="d">Depth coordinate</param>
203187
public void OnZeroCoordinateDInputFieldEndEdit(string d)
204188
{
205-
_probeManager.SetZeroCoordinateOffsetDepth(float.Parse(d));
189+
ProbeManager.SetZeroCoordinateOffsetDepth(float.Parse(d));
206190
}
207191

208192
/// <summary>
@@ -211,7 +195,7 @@ public void OnZeroCoordinateDInputFieldEndEdit(string d)
211195
/// <param name="value">Selected direction: 0 = depth, 1 = DV</param>
212196
public void OnBrainSurfaceOffsetDirectionDropdownValueChanged(int value)
213197
{
214-
_probeManager.SetDropToSurfaceWithDepth(value == 0);
198+
ProbeManager.SetDropToSurfaceWithDepth(value == 0);
215199
}
216200

217201
/// <summary>
@@ -220,7 +204,7 @@ public void OnBrainSurfaceOffsetDirectionDropdownValueChanged(int value)
220204
/// <param name="value">Input field value</param>
221205
public void OnBrainSurfaceOffsetValueUpdated(string value)
222206
{
223-
_probeManager.SetBrainSurfaceOffset(float.Parse(value));
207+
ProbeManager.BrainSurfaceOffset = float.Parse(value);
224208
}
225209

226210
/// <summary>
@@ -229,7 +213,7 @@ public void OnBrainSurfaceOffsetValueUpdated(string value)
229213
/// <param name="amount">Amount to increment by (negative numbers are valid)</param>
230214
public void IncrementBrainSurfaceOffset(float amount)
231215
{
232-
_probeManager.IncrementBrainSurfaceOffset(amount);
216+
ProbeManager.IncrementBrainSurfaceOffset(amount);
233217
}
234218

235219
#endregion

0 commit comments

Comments
 (0)