mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-29 01:35:42 +00:00
Add the new callbacks to Unity (#3127)
* Add disconnection callback * Add support for connection failed callback and eliminate the dice interface i * Update with new callbacks * minor updates * update the plugins
This commit is contained in:
@@ -131,9 +131,9 @@ cc_library(
|
||||
#
|
||||
# Plugins for the native code for interacting with GoDice
|
||||
#
|
||||
unity_godice_commit = "15280c9ec7d24bd0ed3e8e596dd0145a5be6fed3"
|
||||
unity_godice_commit = "deaa8659cd4d377dd5fcc27ff45b7fd870bbe092"
|
||||
|
||||
unity_godice_sha = "94188a83025710d07c85ced0b78fcb5c4c35d16e02370918e04b89eea6e5c911"
|
||||
unity_godice_sha = "2f46a7c43a07c809ad2beedd10ebb1a6b0eb3c876e5c3d3539d60142030460eb"
|
||||
|
||||
http_archive(
|
||||
name = "net_eagle0_unity_godice",
|
||||
|
||||
@@ -238,7 +238,6 @@
|
||||
<Compile Include="Assets/Modern UI Pack/Scripts/Window/WindowManager.cs" />
|
||||
<Compile Include="Assets/Modern UI Pack/Scripts/UI Manager/UIManagerSliderEditor.cs" />
|
||||
<Compile Include="Assets/Eagle/CommandSelectors/IssueOrdersCommandSelector.cs" />
|
||||
<Compile Include="Assets/Bluetooth/IDiceInterfaceImports.cs" />
|
||||
<Compile Include="Assets/Shardok/Grid.cs" />
|
||||
<Compile Include="Assets/Eagle/CommandSelectors/ArmTroopsCommandSelector.cs" />
|
||||
<Compile Include="Assets/Eagle/Notifications/ARNNotifications/TruceAcceptedDetailsNotificationGenerator.cs" />
|
||||
|
||||
+52
-16
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using common;
|
||||
using TMPro;
|
||||
@@ -19,16 +20,26 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
private DieInfo? _onesDieInfo = null;
|
||||
|
||||
private List<DieInfo> _knownDice = new List<DieInfo>();
|
||||
private HashSet<string> _connectingIdentifiers = new HashSet<string>();
|
||||
|
||||
void Awake() {
|
||||
}
|
||||
|
||||
public void GetConfiguration(ConfigurationCallback cb) {
|
||||
_diceInterface = GetComponentInParent<DiceInterface>();
|
||||
|
||||
if (_diceInterface == null) {
|
||||
_diceInterface = GetComponentInParent<DiceInterface>();
|
||||
}
|
||||
_diceInterface.deviceFoundCallback = DeviceFoundCallback;
|
||||
_diceInterface.connectionCallback = ConnectionCallback;
|
||||
_diceInterface.connectionFailedCallback = ConnectionFailedCallback;
|
||||
_diceInterface.disconnectionCallback = DisconnectionCallback;
|
||||
_diceInterface.listenerStoppedCallback = ListenerStoppedCallback;
|
||||
_diceInterface.colorCallback = ReceiveColorCallback;
|
||||
|
||||
_diceInterface.logger = log => {
|
||||
Debug.Log(log);
|
||||
};
|
||||
|
||||
_diceInterface.StartListening();
|
||||
|
||||
_configurationCallback = cb;
|
||||
@@ -38,8 +49,6 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
gameObject.SetActive(true);
|
||||
}
|
||||
|
||||
void Awake() {}
|
||||
|
||||
void Start() {}
|
||||
|
||||
public void RowClicked(int rowIndex) {
|
||||
@@ -48,6 +57,8 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
_knownDice.RemoveAt(rowIndex);
|
||||
SetUpTable();
|
||||
} else {
|
||||
_diceInterface.StopListening();
|
||||
|
||||
_onesDieInfo = _knownDice[rowIndex];
|
||||
_knownDice.RemoveAt(rowIndex);
|
||||
_knownDice.ForEach(dieInfo => _diceInterface.Disconnect(dieInfo.identifier));
|
||||
@@ -67,13 +78,12 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
private void OnEnable() {}
|
||||
|
||||
private void OnDisable() {
|
||||
// _diceInterface.StopListening();
|
||||
//
|
||||
|
||||
diceRollGroup.RowCount = 0;
|
||||
}
|
||||
|
||||
void ListenerStoppedCallback() {}
|
||||
void ListenerStoppedCallback() {
|
||||
Debug.Log("Listener stopped!");
|
||||
}
|
||||
|
||||
void SetUpTable() {
|
||||
diceRollGroup.RowCount = _knownDice.Count;
|
||||
@@ -112,13 +122,12 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
|
||||
void DeviceFoundCallback(string identifier) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
if (_tensDieInfo != null && _tensDieInfo.Value.identifier.Equals(identifier)) {
|
||||
return;
|
||||
}
|
||||
if (_onesDieInfo != null && _onesDieInfo.Value.identifier.Equals(identifier)) {
|
||||
if (_connectingIdentifiers.Contains(identifier)) {
|
||||
return;
|
||||
}
|
||||
|
||||
_connectingIdentifiers.Add(identifier);
|
||||
|
||||
var existingIndex =
|
||||
_knownDice.FindIndex(dieInfo => dieInfo.identifier.Equals(identifier));
|
||||
if (existingIndex >= 0) {
|
||||
@@ -136,6 +145,8 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
|
||||
void ConnectionCallback(string identifier, string deviceName) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
_connectingIdentifiers.Remove(identifier);
|
||||
|
||||
if (_tensDieInfo != null && _tensDieInfo.Value.identifier.Equals(identifier)) {
|
||||
return;
|
||||
}
|
||||
@@ -159,22 +170,47 @@ public class DiceConfigurationPanelController : MonoBehaviour {
|
||||
});
|
||||
}
|
||||
|
||||
void DisconnectionCallback(string identifier) {
|
||||
void ConnectionFailedCallback(string identifier) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
_connectingIdentifiers.Remove(identifier);
|
||||
|
||||
var existingIndex =
|
||||
_knownDice.FindIndex(dieInfo => dieInfo.identifier.Equals(identifier));
|
||||
_knownDice.FindIndex(dieInfo => dieInfo.identifier.Equals(identifier));
|
||||
if (existingIndex >= 0) {
|
||||
_knownDice.RemoveAt(existingIndex);
|
||||
|
||||
SetUpTable();
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
void DisconnectionCallback(string identifier) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
_connectingIdentifiers.Remove(identifier);
|
||||
|
||||
if (_tensDieInfo is { } tensInfo &&
|
||||
tensInfo.identifier.Equals(identifier)) {
|
||||
_tensDieInfo = null;
|
||||
_onesDieInfo = null;
|
||||
} else if (_onesDieInfo is { } onesInfo &&
|
||||
onesInfo.identifier.Equals(identifier)) {
|
||||
_onesDieInfo = null;
|
||||
}
|
||||
|
||||
|
||||
var existingIndex =
|
||||
_knownDice.FindIndex(dieInfo => dieInfo.identifier.Equals(identifier));
|
||||
if (existingIndex >= 0) {
|
||||
_knownDice.RemoveAt(existingIndex);
|
||||
}
|
||||
|
||||
SetUpTable();
|
||||
_diceInterface.Connect(identifier);
|
||||
});
|
||||
}
|
||||
|
||||
public void DismissButtonClicked() {
|
||||
GetComponentInParent<Canvas>().gameObject.SetActive(false);
|
||||
gameObject.SetActive(false);
|
||||
_configurationCallback(null, null);
|
||||
}
|
||||
|
||||
|
||||
@@ -16,24 +16,28 @@ public class DiceInterface : MonoBehaviour {
|
||||
public static readonly byte GetColor = 23;
|
||||
}
|
||||
|
||||
readonly IDiceInterfaceImports _diceInterfaceImports = new NativeDiceInterfaceImports();
|
||||
readonly NativeDiceInterfaceImports _diceInterfaceImports = new();
|
||||
private static DiceInterface _singleton = null;
|
||||
|
||||
private static Dictionary<string, string> _deviceNames = new Dictionary<string, string>();
|
||||
|
||||
public delegate void DeviceFoundCallback(string identifier);
|
||||
public delegate void ConnectionCallback(string identifier, string deviceName);
|
||||
public delegate void ConnectionFailedCallback(string identifier);
|
||||
public delegate void DisconnectionCallback(string identifier);
|
||||
public delegate void ListenerStoppedCallback();
|
||||
public delegate void RollCallback(string identifier, sbyte x, sbyte y, sbyte z);
|
||||
public delegate void ColorCallback(string identifier, DieColor color);
|
||||
public delegate void LoggerCallback(string log);
|
||||
|
||||
public DeviceFoundCallback deviceFoundCallback = null;
|
||||
public ConnectionCallback connectionCallback = null;
|
||||
public ConnectionFailedCallback connectionFailedCallback = null;
|
||||
public DisconnectionCallback disconnectionCallback = null;
|
||||
public ListenerStoppedCallback listenerStoppedCallback = null;
|
||||
public RollCallback rollCallback = null;
|
||||
public ColorCallback colorCallback = null;
|
||||
public LoggerCallback logger = null;
|
||||
|
||||
public void StartListening() { _diceInterfaceImports.StartListening(); }
|
||||
|
||||
@@ -74,11 +78,14 @@ public class DiceInterface : MonoBehaviour {
|
||||
_singleton = this;
|
||||
|
||||
_diceInterfaceImports.SetDeviceConnectedCallback(DeviceConnectedDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetDeviceConnectionFailedCallback(
|
||||
DeviceConnectionFailedDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetDeviceDisconnectedCallback(
|
||||
DeviceDisconnectedDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetDeviceFoundCallback(DeviceFoundDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetDataCallback(DataDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetListenerStoppedCallback(ListenerStoppedDelegateMessageReceived);
|
||||
_diceInterfaceImports.SetLoggerCallback(LoggerDelegateMessageReceived);
|
||||
}
|
||||
|
||||
// Update is called once per frame
|
||||
@@ -116,6 +123,13 @@ public class DiceInterface : MonoBehaviour {
|
||||
}
|
||||
}
|
||||
|
||||
private static void DeviceConnectionFailedDelegateMessageReceived(
|
||||
string identifier) {
|
||||
if (_singleton != null && _singleton.connectionFailedCallback != null) {
|
||||
_singleton.connectionFailedCallback(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
private static void DeviceDisconnectedDelegateMessageReceived(string identifier) {
|
||||
if (_singleton != null && _singleton.disconnectionCallback != null) {
|
||||
_singleton.disconnectionCallback(identifier);
|
||||
@@ -175,4 +189,10 @@ public class DiceInterface : MonoBehaviour {
|
||||
_singleton.listenerStoppedCallback();
|
||||
}
|
||||
}
|
||||
|
||||
private static void LoggerDelegateMessageReceived(string log) {
|
||||
if (_singleton != null && _singleton.logger != null) {
|
||||
_singleton.logger(log);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,11 +12,13 @@ namespace UnityGoDiceInterface {
|
||||
public string identifier;
|
||||
public string deviceName;
|
||||
public DieColor color;
|
||||
public bool connected;
|
||||
|
||||
public DieInfo(string identifier, string deviceName, DieColor color) {
|
||||
this.identifier = identifier;
|
||||
this.deviceName = deviceName;
|
||||
this.color = color;
|
||||
this.connected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
-46
@@ -1,46 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace UnityGoDiceInterface {
|
||||
public interface IDiceInterfaceImports {
|
||||
delegate void DeviceFoundDelegateMessage(string identifier, string name);
|
||||
delegate void DataDelegateMessage(string identifier, List<byte> bytes);
|
||||
delegate void DeviceConnectedDelegateMessage(string identifier);
|
||||
delegate void DeviceDisconnectedDelegateMessage(string identifier);
|
||||
delegate void ListenerStoppedDelegateMessage();
|
||||
|
||||
protected static DeviceFoundDelegateMessage deviceFoundDelegate;
|
||||
protected static DataDelegateMessage dataDelegate;
|
||||
protected static DeviceConnectedDelegateMessage deviceConnectedDelegate;
|
||||
protected static DeviceDisconnectedDelegateMessage deviceDisconnectedDelegate;
|
||||
protected static ListenerStoppedDelegateMessage listenerStoppedDelegate;
|
||||
|
||||
public void StartListening();
|
||||
|
||||
public void StopListening();
|
||||
|
||||
public void Connect(string identifier);
|
||||
|
||||
public void Disconnect(string identifier);
|
||||
|
||||
public void Send(string identifier, List<byte> bytes);
|
||||
|
||||
public void SetDeviceFoundCallback(DeviceFoundDelegateMessage deviceFound) {
|
||||
deviceFoundDelegate = deviceFound;
|
||||
}
|
||||
|
||||
public void SetDataCallback(DataDelegateMessage data) { dataDelegate = data; }
|
||||
|
||||
public void SetDeviceConnectedCallback(DeviceConnectedDelegateMessage deviceConnected) {
|
||||
deviceConnectedDelegate = deviceConnected;
|
||||
}
|
||||
|
||||
public void SetDeviceDisconnectedCallback(
|
||||
DeviceDisconnectedDelegateMessage deviceDisconnected) {
|
||||
deviceDisconnectedDelegate = deviceDisconnected;
|
||||
}
|
||||
|
||||
public void SetListenerStoppedCallback(ListenerStoppedDelegateMessage listenerStopped) {
|
||||
listenerStoppedDelegate = listenerStopped;
|
||||
}
|
||||
}
|
||||
}
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 883bf622d61244e079aa51acadeb756e
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
+80
-12
@@ -4,7 +4,25 @@ using System.Runtime.InteropServices;
|
||||
using AOT;
|
||||
|
||||
namespace UnityGoDiceInterface {
|
||||
public class NativeDiceInterfaceImports : IDiceInterfaceImports {
|
||||
public class NativeDiceInterfaceImports {
|
||||
public delegate void DeviceFoundDelegateMessage(string identifier, string name);
|
||||
public delegate void DataDelegateMessage(string identifier, List<byte> bytes);
|
||||
public delegate void DeviceConnectedDelegateMessage(string identifier);
|
||||
public delegate void DeviceConnectionFailedDelegateMessage(
|
||||
string identifier);
|
||||
public delegate void DeviceDisconnectedDelegateMessage(string identifier);
|
||||
public delegate void ListenerStoppedDelegateMessage();
|
||||
public delegate void LoggerDelegateMessage(string log);
|
||||
|
||||
private static DeviceFoundDelegateMessage deviceFoundDelegate;
|
||||
private static DataDelegateMessage dataDelegate;
|
||||
private static DeviceConnectedDelegateMessage deviceConnectedDelegate;
|
||||
private static DeviceConnectionFailedDelegateMessage
|
||||
deviceConnectionFailedDelegate;
|
||||
private static DeviceDisconnectedDelegateMessage deviceDisconnectedDelegate;
|
||||
private static ListenerStoppedDelegateMessage listenerStoppedDelegate;
|
||||
private static LoggerDelegateMessage loggerDelegateMessage;
|
||||
|
||||
#if UNITY_IOS
|
||||
private const string BundleName = "__Internal";
|
||||
#elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
|
||||
@@ -17,8 +35,10 @@ namespace UnityGoDiceInterface {
|
||||
private delegate void
|
||||
MonoDataDelegateMessage(string identifier, UInt32 byteCount, IntPtr bytePtr);
|
||||
private delegate void MonoDeviceConnectedDelegateMessage(string identifier);
|
||||
private delegate void MonoDeviceConnectionFailedDelegateMessage(string identifier);
|
||||
private delegate void MonoDeviceDisconnectedDelegateMessage(string identifier);
|
||||
private delegate void MonoListenerStoppedDelegateMessage();
|
||||
private delegate void MonoLoggerDelegateMessage(string log);
|
||||
|
||||
[DllImport(dllName: BundleName, EntryPoint = "godice_start_listening")]
|
||||
private static extern void _NativeBridgeStartListening();
|
||||
@@ -31,6 +51,7 @@ namespace UnityGoDiceInterface {
|
||||
MonoDeviceFoundDelegateMessage deviceFoundDelegate,
|
||||
MonoDataDelegateMessage dataDelegate,
|
||||
MonoDeviceConnectedDelegateMessage deviceConnectedDelegate,
|
||||
MonoDeviceConnectionFailedDelegateMessage deviceConnectionFailedDelegateMessage,
|
||||
MonoDeviceDisconnectedDelegateMessage deviceDisconnectedDelegate,
|
||||
MonoListenerStoppedDelegateMessage listenerStoppedDelegate);
|
||||
|
||||
@@ -43,6 +64,9 @@ namespace UnityGoDiceInterface {
|
||||
[DllImport(dllName: BundleName, EntryPoint = "godice_send")]
|
||||
private static extern void
|
||||
_NativeBridgeSend(string identifier, UInt32 byteCount, IntPtr bytePtr);
|
||||
|
||||
[DllImport(dllName: BundleName, EntryPoint = "godice_set_logger")]
|
||||
private static extern void _NativeBridgeSetLogger(MonoLoggerDelegateMessage loggerDelegate);
|
||||
|
||||
private static List<byte> BytesFromRawPointer(UInt32 byteCount, IntPtr bytes) {
|
||||
byte[] array = new byte[byteCount];
|
||||
@@ -55,16 +79,16 @@ namespace UnityGoDiceInterface {
|
||||
*/
|
||||
[MonoPInvokeCallback(typeof(MonoDataDelegateMessage))]
|
||||
private static void MonoDeviceFoundMessageReceived(string identifier, string name) {
|
||||
if (IDiceInterfaceImports.deviceFoundDelegate != null) {
|
||||
IDiceInterfaceImports.deviceFoundDelegate(identifier, name);
|
||||
if (deviceFoundDelegate != null) {
|
||||
deviceFoundDelegate(identifier, name);
|
||||
}
|
||||
}
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoDataDelegateMessage))]
|
||||
private static void
|
||||
MonoDataMessageReceived(string identifier, UInt32 byteCount, IntPtr bytePtr) {
|
||||
if (IDiceInterfaceImports.dataDelegate != null) {
|
||||
IDiceInterfaceImports.dataDelegate(
|
||||
if (dataDelegate != null) {
|
||||
dataDelegate(
|
||||
identifier,
|
||||
BytesFromRawPointer(byteCount, bytePtr));
|
||||
}
|
||||
@@ -72,22 +96,36 @@ namespace UnityGoDiceInterface {
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoDeviceConnectedDelegateMessage))]
|
||||
private static void MonoDeviceConnected(string identifier) {
|
||||
if (IDiceInterfaceImports.deviceConnectedDelegate != null) {
|
||||
IDiceInterfaceImports.deviceConnectedDelegate(identifier);
|
||||
if (deviceConnectedDelegate != null) {
|
||||
deviceConnectedDelegate(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoDeviceConnectionFailedDelegateMessage))]
|
||||
private static void MonoDeviceConnectionFailed(string identifier) {
|
||||
if (deviceConnectionFailedDelegate != null) {
|
||||
deviceConnectionFailedDelegate(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoDeviceDisconnectedDelegateMessage))]
|
||||
private static void MonoDeviceDisconnected(string identifier) {
|
||||
if (IDiceInterfaceImports.deviceDisconnectedDelegate != null) {
|
||||
IDiceInterfaceImports.deviceDisconnectedDelegate(identifier);
|
||||
if (deviceDisconnectedDelegate != null) {
|
||||
deviceDisconnectedDelegate(identifier);
|
||||
}
|
||||
}
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoDeviceDisconnectedDelegateMessage))]
|
||||
[MonoPInvokeCallback(typeof(MonoListenerStoppedDelegateMessage))]
|
||||
private static void MonoListenerStopped() {
|
||||
if (IDiceInterfaceImports.listenerStoppedDelegate != null) {
|
||||
IDiceInterfaceImports.listenerStoppedDelegate();
|
||||
if (listenerStoppedDelegate != null) {
|
||||
listenerStoppedDelegate();
|
||||
}
|
||||
}
|
||||
|
||||
[MonoPInvokeCallback(typeof(MonoLoggerDelegateMessage))]
|
||||
private static void MonoLogger(string log) {
|
||||
if (loggerDelegateMessage != null) {
|
||||
loggerDelegateMessage(log);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,8 +134,10 @@ namespace UnityGoDiceInterface {
|
||||
MonoDeviceFoundMessageReceived,
|
||||
MonoDataMessageReceived,
|
||||
MonoDeviceConnected,
|
||||
MonoDeviceConnectionFailed,
|
||||
MonoDeviceDisconnected,
|
||||
MonoListenerStopped);
|
||||
_NativeBridgeSetLogger(MonoLogger);
|
||||
_NativeBridgeStartListening();
|
||||
}
|
||||
|
||||
@@ -114,5 +154,33 @@ namespace UnityGoDiceInterface {
|
||||
_NativeBridgeSend(identifier, (uint)data.Count, pointer);
|
||||
pinnedArray.Free();
|
||||
}
|
||||
|
||||
public void SetDeviceFoundCallback(DeviceFoundDelegateMessage deviceFound) {
|
||||
deviceFoundDelegate = deviceFound;
|
||||
}
|
||||
|
||||
public void SetDataCallback(DataDelegateMessage data) { dataDelegate = data; }
|
||||
|
||||
public void SetDeviceConnectedCallback(DeviceConnectedDelegateMessage deviceConnected) {
|
||||
deviceConnectedDelegate = deviceConnected;
|
||||
}
|
||||
|
||||
public void SetDeviceConnectionFailedCallback(
|
||||
DeviceConnectionFailedDelegateMessage deviceConnectionFailed) {
|
||||
deviceConnectionFailedDelegate = deviceConnectionFailed;
|
||||
}
|
||||
|
||||
public void SetDeviceDisconnectedCallback(
|
||||
DeviceDisconnectedDelegateMessage deviceDisconnected) {
|
||||
deviceDisconnectedDelegate = deviceDisconnected;
|
||||
}
|
||||
|
||||
public void SetListenerStoppedCallback(ListenerStoppedDelegateMessage listenerStopped) {
|
||||
listenerStoppedDelegate = listenerStopped;
|
||||
}
|
||||
|
||||
public void SetLoggerCallback(LoggerDelegateMessage logger) {
|
||||
loggerDelegateMessage = logger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+64
-15
@@ -12,13 +12,16 @@ public class RollPanelController : MonoBehaviour {
|
||||
public TMP_Text tensResultLabel;
|
||||
public TMP_Text onesResultLabel;
|
||||
|
||||
public TMP_Text reconnectionLabel;
|
||||
|
||||
public delegate void RollResultCallback(int? result);
|
||||
|
||||
private RollResultCallback _rollResultCallback;
|
||||
private RollType _rollType;
|
||||
|
||||
public void GetRoll(RollType rollType, RollResultCallback cb) {
|
||||
_diceInterface = GetComponentInParent<DiceInterface>();
|
||||
if (_diceInterface == null) { _diceInterface = GetComponentInParent<DiceInterface>(); }
|
||||
|
||||
_onesResult = null;
|
||||
_tensResult = null;
|
||||
_result = null;
|
||||
@@ -29,17 +32,20 @@ public class RollPanelController : MonoBehaviour {
|
||||
_rollType = rollType;
|
||||
|
||||
SetResultLabels();
|
||||
SetTensAlpha(0.25f);
|
||||
SetOnesAlpha(0.25f);
|
||||
|
||||
if (string.IsNullOrEmpty(_tensDieInfo.identifier) ||
|
||||
string.IsNullOrEmpty(_tensDieInfo.identifier)) {
|
||||
string.IsNullOrEmpty(_onesDieInfo.identifier)) {
|
||||
GetConfiguration();
|
||||
} else {
|
||||
_diceInterface.connectionCallback = ConnectionCallback;
|
||||
_diceInterface.rollCallback = RollCallback;
|
||||
_diceInterface.logger = LogFromNative;
|
||||
|
||||
_diceInterface.StartListening();
|
||||
// _diceInterface.StartListening();
|
||||
|
||||
_tensDieInfo.connected = false;
|
||||
_onesDieInfo.connected = false;
|
||||
SetAlphas();
|
||||
|
||||
_diceInterface.Connect(_tensDieInfo.identifier);
|
||||
_diceInterface.Connect(_onesDieInfo.identifier);
|
||||
@@ -57,9 +63,10 @@ public class RollPanelController : MonoBehaviour {
|
||||
|
||||
public enum RollType { StandardD100, OpenEnded, OpenEndedHigh, OpenEndedLow }
|
||||
|
||||
private void SetTensAlpha(float alpha) { tensResultLabel.alpha = alpha; }
|
||||
|
||||
private void SetOnesAlpha(float alpha) { onesResultLabel.alpha = alpha; }
|
||||
private void SetAlphas() {
|
||||
tensResultLabel.alpha = _tensDieInfo.connected ? 1.0f : 0.25f;
|
||||
onesResultLabel.alpha = _onesDieInfo.connected ? 1.0f : 0.25f;
|
||||
}
|
||||
|
||||
void OnEnable() {}
|
||||
|
||||
@@ -80,16 +87,23 @@ public class RollPanelController : MonoBehaviour {
|
||||
if (tensOpt is DieInfo tens && onesOpt is DieInfo ones) {
|
||||
gameObject.SetActive(true);
|
||||
_diceInterface.connectionCallback = ConnectionCallback;
|
||||
_diceInterface.connectionFailedCallback = ConnectionFailedCallback;
|
||||
_diceInterface.disconnectionCallback = DisconnectionCallback;
|
||||
_diceInterface.listenerStoppedCallback = ListenerStoppedCallback;
|
||||
_diceInterface.rollCallback = RollCallback;
|
||||
|
||||
_tensDieInfo = tens;
|
||||
_onesDieInfo = ones;
|
||||
|
||||
_tensDieInfo.connected = false;
|
||||
_onesDieInfo.connected = false;
|
||||
reconnectionLabel.gameObject.SetActive(false);
|
||||
|
||||
_diceInterface.Connect(_tensDieInfo.identifier);
|
||||
_diceInterface.Connect(_onesDieInfo.identifier);
|
||||
|
||||
tensResultLabel.text = "?";
|
||||
onesResultLabel.text = "?";
|
||||
SetAlphas();
|
||||
SetResultLabels();
|
||||
|
||||
tensResultLabel.color = UnityDieColors.ColorFromDieColor(_tensDieInfo.color);
|
||||
onesResultLabel.color = UnityDieColors.ColorFromDieColor(_onesDieInfo.color);
|
||||
@@ -103,13 +117,44 @@ public class RollPanelController : MonoBehaviour {
|
||||
void ConnectionCallback(string identifier, string deviceName) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
if (identifier == _tensDieInfo.identifier) {
|
||||
SetTensAlpha(1.0f);
|
||||
_tensDieInfo.connected = true;
|
||||
} else if (identifier == _onesDieInfo.identifier) {
|
||||
SetOnesAlpha(1.0f);
|
||||
_onesDieInfo.connected = true;
|
||||
}
|
||||
|
||||
SetAlphas();
|
||||
|
||||
if (_tensDieInfo.connected && _onesDieInfo.connected) {
|
||||
reconnectionLabel.gameObject.SetActive(false);
|
||||
_diceInterface.StopListening();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void ConnectionFailedCallback(string identifier) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
reconnectionLabel.gameObject.SetActive(true);
|
||||
_diceInterface.StartListening();
|
||||
});
|
||||
}
|
||||
|
||||
void DisconnectionCallback(string identifier) {
|
||||
MainQueue.Q.Enqueue(() => {
|
||||
if (identifier == _tensDieInfo.identifier) {
|
||||
_tensDieInfo.connected = false;
|
||||
} else if (identifier == _onesDieInfo.identifier) {
|
||||
_onesDieInfo.connected = false;
|
||||
}
|
||||
|
||||
SetAlphas();
|
||||
_diceInterface.Connect(identifier);
|
||||
});
|
||||
}
|
||||
|
||||
void ListenerStoppedCallback() {
|
||||
MainQueue.Q.Enqueue(() => { reconnectionLabel.text = "Unable to connect."; });
|
||||
}
|
||||
|
||||
void SetResultLabels() {
|
||||
if (_tensResult is int tr) {
|
||||
tensResultLabel.text = tr.ToString();
|
||||
@@ -142,9 +187,6 @@ public class RollPanelController : MonoBehaviour {
|
||||
void CheckCompletion() {
|
||||
if (_onesResult is int ones && _tensResult is int tens) {
|
||||
// FIXME: open ended rolls
|
||||
|
||||
_diceInterface.Disconnect(_tensDieInfo.identifier);
|
||||
_diceInterface.Disconnect(_onesDieInfo.identifier);
|
||||
_result = tens * 10 + ones;
|
||||
|
||||
skipContinueButtonText.text = "Dismiss";
|
||||
@@ -154,6 +196,9 @@ public class RollPanelController : MonoBehaviour {
|
||||
_rollResultCallback(_result);
|
||||
|
||||
_diceInterface.StopListening();
|
||||
|
||||
_diceInterface.Disconnect(_tensDieInfo.identifier);
|
||||
_diceInterface.Disconnect(_onesDieInfo.identifier);
|
||||
}
|
||||
}));
|
||||
}
|
||||
@@ -163,4 +208,8 @@ public class RollPanelController : MonoBehaviour {
|
||||
yield return new WaitForSeconds(delay);
|
||||
action();
|
||||
}
|
||||
|
||||
void LogFromNative(string log) {
|
||||
MainQueue.Q.Enqueue(() => { Debug.Log(log); });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6971,6 +6971,141 @@ RectTransform:
|
||||
m_AnchoredPosition: {x: 0, y: 0}
|
||||
m_SizeDelta: {x: 0, y: 28}
|
||||
m_Pivot: {x: 0.5, y: 1}
|
||||
--- !u!1 &92970743
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
serializedVersion: 6
|
||||
m_Component:
|
||||
- component: {fileID: 92970744}
|
||||
- component: {fileID: 92970746}
|
||||
- component: {fileID: 92970745}
|
||||
m_Layer: 0
|
||||
m_Name: Reconnection
|
||||
m_TagString: Untagged
|
||||
m_Icon: {fileID: 0}
|
||||
m_NavMeshLayer: 0
|
||||
m_StaticEditorFlags: 0
|
||||
m_IsActive: 1
|
||||
--- !u!224 &92970744
|
||||
RectTransform:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 92970743}
|
||||
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
|
||||
m_LocalPosition: {x: 0, y: 0, z: 0}
|
||||
m_LocalScale: {x: 1, y: 1, z: 1}
|
||||
m_ConstrainProportionsScale: 0
|
||||
m_Children: []
|
||||
m_Father: {fileID: 393513301}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
m_AnchorMax: {x: 0.5, y: 0.5}
|
||||
m_AnchoredPosition: {x: 0, y: -50}
|
||||
m_SizeDelta: {x: 300, y: 50}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &92970745
|
||||
MonoBehaviour:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 92970743}
|
||||
m_Enabled: 1
|
||||
m_EditorHideFlags: 0
|
||||
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
|
||||
m_Name:
|
||||
m_EditorClassIdentifier:
|
||||
m_Material: {fileID: 0}
|
||||
m_Color: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_RaycastTarget: 1
|
||||
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_Maskable: 1
|
||||
m_OnCullStateChanged:
|
||||
m_PersistentCalls:
|
||||
m_Calls: []
|
||||
m_text: Looking for dice...
|
||||
m_isRightToLeft: 0
|
||||
m_fontAsset: {fileID: 11400000, guid: ec2736df0379a45bfa7349b652fd07d6, type: 2}
|
||||
m_sharedMaterial: {fileID: 1026247389042360723, guid: ec2736df0379a45bfa7349b652fd07d6,
|
||||
type: 2}
|
||||
m_fontSharedMaterials: []
|
||||
m_fontMaterial: {fileID: 0}
|
||||
m_fontMaterials: []
|
||||
m_fontColor32:
|
||||
serializedVersion: 2
|
||||
rgba: 4278190335
|
||||
m_fontColor: {r: 1, g: 0, b: 0, a: 1}
|
||||
m_enableVertexGradient: 0
|
||||
m_colorMode: 3
|
||||
m_fontColorGradient:
|
||||
topLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
topRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
|
||||
bottomRight: {r: 1, g: 1, b: 1, a: 1}
|
||||
m_fontColorGradientPreset: {fileID: 0}
|
||||
m_spriteAsset: {fileID: 0}
|
||||
m_tintAllSprites: 0
|
||||
m_StyleSheet: {fileID: 0}
|
||||
m_TextStyleHashCode: -1183493901
|
||||
m_overrideHtmlColors: 0
|
||||
m_faceColor:
|
||||
serializedVersion: 2
|
||||
rgba: 4294967295
|
||||
m_fontSize: 18
|
||||
m_fontSizeBase: 18
|
||||
m_fontWeight: 400
|
||||
m_enableAutoSizing: 0
|
||||
m_fontSizeMin: 18
|
||||
m_fontSizeMax: 72
|
||||
m_fontStyle: 0
|
||||
m_HorizontalAlignment: 2
|
||||
m_VerticalAlignment: 256
|
||||
m_textAlignment: 65535
|
||||
m_characterSpacing: 0
|
||||
m_wordSpacing: 0
|
||||
m_lineSpacing: 0
|
||||
m_lineSpacingMax: 0
|
||||
m_paragraphSpacing: 0
|
||||
m_charWidthMaxAdj: 0
|
||||
m_enableWordWrapping: 1
|
||||
m_wordWrappingRatios: 0.4
|
||||
m_overflowMode: 0
|
||||
m_linkedTextComponent: {fileID: 0}
|
||||
parentLinkedComponent: {fileID: 0}
|
||||
m_enableKerning: 1
|
||||
m_enableExtraPadding: 0
|
||||
checkPaddingRequired: 0
|
||||
m_isRichText: 1
|
||||
m_parseCtrlCharacters: 1
|
||||
m_isOrthographic: 1
|
||||
m_isCullingEnabled: 0
|
||||
m_horizontalMapping: 0
|
||||
m_verticalMapping: 0
|
||||
m_uvLineOffset: 0
|
||||
m_geometrySortingOrder: 0
|
||||
m_IsTextObjectScaleStatic: 0
|
||||
m_VertexBufferAutoSizeReduction: 0
|
||||
m_useMaxVisibleDescender: 1
|
||||
m_pageToDisplay: 1
|
||||
m_margin: {x: 0, y: 0, z: 0, w: 0}
|
||||
m_isUsingLegacyAnimationComponent: 0
|
||||
m_isVolumetricText: 0
|
||||
m_hasFontAssetChanged: 0
|
||||
m_baseMaterial: {fileID: 0}
|
||||
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
|
||||
--- !u!222 &92970746
|
||||
CanvasRenderer:
|
||||
m_ObjectHideFlags: 0
|
||||
m_CorrespondingSourceObject: {fileID: 0}
|
||||
m_PrefabInstance: {fileID: 0}
|
||||
m_PrefabAsset: {fileID: 0}
|
||||
m_GameObject: {fileID: 92970743}
|
||||
m_CullTransparentMesh: 1
|
||||
--- !u!1 &96392114
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -17215,8 +17350,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 34.00125, y: -119}
|
||||
m_SizeDelta: {x: 68.0025, y: 0}
|
||||
m_AnchoredPosition: {x: 34.3275, y: -119}
|
||||
m_SizeDelta: {x: 68.655, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &181074080
|
||||
MonoBehaviour:
|
||||
@@ -33990,6 +34125,11 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1837103631940551462, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: nameLabel
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2154262805260441194, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_Name
|
||||
@@ -34123,7 +34263,7 @@ PrefabInstance:
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 113.2025
|
||||
value: 111.345
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -34133,12 +34273,12 @@ PrefabInstance:
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 56.60125
|
||||
value: 55.6725
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -60.015
|
||||
value: -40.005
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -34173,12 +34313,12 @@ PrefabInstance:
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 113.2025
|
||||
value: 111.345
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100.020004
|
||||
value: 80.01
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -34218,7 +34358,7 @@ PrefabInstance:
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 235.39627
|
||||
value: 235.6725
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -35498,6 +35638,7 @@ RectTransform:
|
||||
- {fileID: 877110351}
|
||||
- {fileID: 464027607}
|
||||
- {fileID: 1341790643}
|
||||
- {fileID: 92970744}
|
||||
m_Father: {fileID: 1168220719}
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0.5, y: 0.5}
|
||||
@@ -35557,10 +35698,9 @@ MonoBehaviour:
|
||||
m_EditorClassIdentifier:
|
||||
diceConfigurationPanelController: {fileID: 1532766423}
|
||||
skipContinueButtonText: {fileID: 1108793851}
|
||||
tensHeaderLabel: {fileID: 0}
|
||||
onesHeaderLabel: {fileID: 0}
|
||||
tensResultLabel: {fileID: 1954563315}
|
||||
onesResultLabel: {fileID: 373764329}
|
||||
reconnectionLabel: {fileID: 92970745}
|
||||
--- !u!1 &393951106
|
||||
GameObject:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -134966,8 +135106,8 @@ RectTransform:
|
||||
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
|
||||
m_AnchorMin: {x: 0, y: 1}
|
||||
m_AnchorMax: {x: 0, y: 1}
|
||||
m_AnchoredPosition: {x: 325.99875, y: -119}
|
||||
m_SizeDelta: {x: 68.0025, y: 0}
|
||||
m_AnchoredPosition: {x: 325.6725, y: -119}
|
||||
m_SizeDelta: {x: 68.655, y: 0}
|
||||
m_Pivot: {x: 0.5, y: 0.5}
|
||||
--- !u!114 &1296417815
|
||||
MonoBehaviour:
|
||||
@@ -196298,6 +196438,11 @@ PrefabInstance:
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: 0
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 1837103631940551462, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: nameLabel
|
||||
value:
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 2154262805260441194, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_Name
|
||||
@@ -196431,7 +196576,7 @@ PrefabInstance:
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 110.7925
|
||||
value: 111.345
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -196441,12 +196586,12 @@ PrefabInstance:
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 55.39625
|
||||
value: 55.6725
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 6185631331142294830, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.y
|
||||
value: -60.015
|
||||
value: -40.005
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -196481,12 +196626,12 @@ PrefabInstance:
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.x
|
||||
value: 110.7925
|
||||
value: 111.345
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_SizeDelta.y
|
||||
value: 100.020004
|
||||
value: 80.01
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
@@ -196526,7 +196671,7 @@ PrefabInstance:
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
propertyPath: m_AnchoredPosition.x
|
||||
value: 123.39876
|
||||
value: 124.3275
|
||||
objectReference: {fileID: 0}
|
||||
- target: {fileID: 7181142147825592926, guid: 9acf3ba64a8c04e6083aae699248b0c4,
|
||||
type: 3}
|
||||
|
||||
Reference in New Issue
Block a user