Skip to content

Commit 4599a91

Browse files
committed
feat(vhf): elec support
1 parent 817f9cd commit 4599a91

File tree

4 files changed

+611
-22
lines changed

4 files changed

+611
-22
lines changed

src/Packages/com.yuxiaviation.v320neo.fdmi/Runtime/Avionics/Communication/AudioController/AudioController.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public void _OnFirstInit() {
2121
isReceiveBool.subscribe(this, nameof(_OnAudioSourceStatusChange));
2222
}
2323

24-
foreach (var isReceiveBool in _isTransmit) {
25-
isReceiveBool.subscribe(this, nameof(_OnAudioSourceStatusChange));
24+
foreach (var isTransmitBool in _isTransmit) {
25+
isTransmitBool.subscribe(this, nameof(_OnAudioSourceStatusChange));
2626
}
2727

2828
foreach (var frequencyFloat in _frequency) {
@@ -31,7 +31,7 @@ public void _OnFirstInit() {
3131
}
3232

3333
[PublicAPI]
34-
public void _OnFInit() {
34+
public void _OnInit() {
3535
_OnAudioSourceStatusChange();
3636
}
3737

src/Packages/com.yuxiaviation.v320neo.fdmi/Runtime/Avionics/Communication/AudioSource/UdonRadioCommunicationAudioSource.asset

+205-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
using JetBrains.Annotations;
2+
using tech.gyoku.FDMi.core;
23
using UdonSharp;
34
using UnityEngine;
45
using URC;
6+
using VRC.SDKBase;
57

68
namespace VRChatAerospaceUniversity.V320.Avionics.Communication.AudioSource {
7-
[UdonBehaviourSyncMode(BehaviourSyncMode.None)]
9+
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)]
810
[AircraftLifecycleReceiver]
911
public class UdonRadioCommunicationAudioSource : UdonSharpBehaviour {
1012
public float defaultFrequency = 118.0f;
@@ -15,29 +17,68 @@ public float Frequency {
1517
set => _transceiver._SetFrequency(value);
1618
}
1719

20+
[UdonSynced] [SerializeField] [HideInInspector] private bool _receive;
1821
[PublicAPI]
1922
public bool Receive {
20-
get => _transceiver._GetReceive();
21-
set => _transceiver._SetReceive(value);
23+
get => _receive;
24+
set {
25+
TakeOwnership();
26+
27+
_receive = value;
28+
_UpdateReceiveTransmit();
29+
30+
RequestSerialization();
31+
}
2232
}
2333

34+
[UdonSynced] [SerializeField] [HideInInspector] private bool _transmit;
2435
[PublicAPI]
2536
public bool Transmit {
26-
get => _transceiver._GetTransmit();
27-
set => _transceiver._SetTransmit(value);
37+
get => _transmit;
38+
set {
39+
TakeOwnership();
40+
41+
_transmit = value;
42+
_UpdateReceiveTransmit();
43+
44+
RequestSerialization();
45+
}
2846
}
2947

3048
[SerializeField] private Transceiver _transceiver;
49+
[SerializeField] private FDMiBool _isPowered;
50+
51+
public void _UpdateReceiveTransmit() {
52+
var isPowered = !_isPowered || _isPowered.Data;
53+
54+
_transceiver._SetTransmit(isPowered && _transmit);
55+
_transceiver._SetReceive(isPowered && _receive);
56+
}
57+
58+
[PublicAPI]
59+
private void _OnPowerStateChanged() => _UpdateReceiveTransmit();
60+
public override void OnDeserialization() => _UpdateReceiveTransmit();
3161

3262
[PublicAPI]
3363
public void _OnInit() {
64+
if (_isPowered) {
65+
_isPowered.subscribe(this, nameof(_UpdateReceiveTransmit));
66+
}
67+
3468
// Delay 4s due to
3569
// https://github.com/esnya/UdonRadioCommunications/blob/v5.0.0/Packages/com.nekometer.esnya.udon-radio-communications/Scripts/UdonRadioCommunication.cs#L63
3670
SendCustomEventDelayedSeconds(nameof(_SetDefaultFrequency), 4);
71+
_UpdateReceiveTransmit();
3772
}
3873

3974
public void _SetDefaultFrequency() {
4075
_transceiver.Frequency = defaultFrequency;
4176
}
77+
78+
private void TakeOwnership() {
79+
if (Networking.IsOwner(gameObject)) return;
80+
81+
Networking.SetOwner(Networking.LocalPlayer, gameObject);
82+
}
4283
}
4384
}

0 commit comments

Comments
 (0)