羅技UnitySDK:
鏈接:https://pan.baidu.com/s/12eGEipe4kiZjWfZTFmQvSg
提取碼:sk01
說明:這份SDK可以獲取羅技方向盤以及手排擋的所有數據,在Unity2018版本下測試是沒問題的,只需安裝羅技PC軟件即可
封裝工具類:
下面的摘自某大神的內容,寫的很詳細了,好的資源大家共享
using System;
using System.Collections;
using UnityEngine;
namespace Sakura
{
/// <summary>
/// Logitech輸入設備
/// </summary>
public enum LogitechSteeringWheelButtonType
{
/// <summary>
/// 方向盤 X 鍵(按鈕1)
/// </summary>
x,
/// <summary>
/// 方向盤 □ 鍵(按鈕2)
/// </summary>
rect,
/// <summary>
/// 方向盤 ○ 鍵(按鈕3)
/// </summary>
circle,
/// <summary>
/// 方向盤 △ 鍵(按鈕4)
/// </summary>
triangle,
/// <summary>
/// 方向盤 右撥片 鍵(按鈕5)
/// </summary>
rightDialSlice,
/// <summary>
/// 方向盤 左撥片 鍵(按鈕6)
/// </summary>
leftDialSlice,
/// <summary>
/// 方向盤 R2 鍵(按鈕7)
/// </summary>
R2,
/// <summary>
/// 方向盤 L2 鍵(按鈕8)
/// </summary>
L2,
/// <summary>
/// 方向盤 SHARE 鍵(按鈕9)
/// </summary>
share,
/// <summary>
/// 方向盤 OPTION 鍵(按鈕10)
/// </summary>
option,
/// <summary>
/// 方向盤 R3 鍵(按鈕11)
/// </summary>
R3,
/// <summary>
/// 方向盤 L3 鍵(按鈕12)
/// </summary>
L3,
/// <summary>
/// 方向盤 + 鍵(按鈕20)
/// </summary>
plus,
/// <summary>
/// 方向盤 - 鍵(按鈕21)
/// </summary>
subtract,
/// <summary>
/// 方向盤 回車 鍵(按鈕24)
/// </summary>
enter,
/// <summary>
/// 方向盤 logo 鍵(按鈕25)
/// </summary>
logoBtn
}
public enum CursorType
{
/// <summary>
/// Up
/// rec.rgdwPOV[0] = 0
/// </summary>
up,
/// <summary>
/// UP-RIGHT
/// rec.rgdwPOV[0] = 4500
/// </summary>
up_right,
/// <summary>
/// right
/// rec.rgdwPOV[0] = 9000
/// </summary>
right,
/// <summary>
/// DOWN-RIGHT
/// rec.rgdwPOV[0] = 13500
/// </summary>
down_right,
/// <summary>
/// down
/// rec.rgdwPOV[0] = 18000
/// </summary>
down,
/// <summary>
/// DOWN-LEFT
/// rec.rgdwPOV[0] = 22500
/// </summary>
down_left,
/// <summary>
/// left
/// rec.rgdwPOV[0] = 27000
/// </summary>
left,
/// <summary>
/// UP-LEFT
/// rec.rgdwPOV[0] = 31500
/// </summary>
up_left
}
public class LogitechController : MonoBehaviour
{
public static LogitechController Instance;
private LogitechGSDK.DIJOYSTATE2ENGINES rec;
/// <summary>
/// 方向盤
/// </summary>
public class SteeringWheel
{
/// <summary>
/// 剛點擊按鈕時觸發一次
/// LogitechWheelButtonType:按鈕類型
/// </summary>
public Action<LogitechSteeringWheelButtonType> OnTriggered;
/// <summary>
/// 維持點擊按鈕時一直觸發
/// LogitechWheelButtonType:按鈕類型
/// </summary>
public Action<LogitechSteeringWheelButtonType> OnPressed;
/// <summary>
/// 鬆開按鈕時觸發一次
/// LogitechWheelButtonType:按鈕類型
/// </summary>
public Action<LogitechSteeringWheelButtonType> OnReleased;
/// <summary>
/// 點擊按鈕時觸發一次,按住按鈕一直觸發
/// CursorType:方向類型
/// </summary>
public Action<CursorType> OnCursor;
/// <summary>
/// 每旋轉一檔旋鈕時觸發一次
/// bool:返回true,順時針旋轉;返回flase,逆時針旋轉
/// </summary>
public Action<bool> OnKnob;
/// <summary>
/// 轉動方向盤觸發
/// float:不觸碰方向盤,值一直爲0,觸碰後左扭到盡:-32768,右扭到盡爲32767
/// </summary>
public Action<float> OnSteeringWheel;
}
/// <summary>
/// 腳踏板
/// </summary>
public class Pedals
{
/// <summary>
/// 離合
/// float:不觸碰腳踏板,值一直爲0,觸碰後踩盡:-32768,鬆開爲32767
/// </summary>
public Action<float> Clutch;
/// <summary>
/// 剎車
/// float:不觸碰腳踏板,值一直爲0,觸碰後踩盡:-32768,鬆開爲32767
/// </summary>
public Action<float> Brake;
/// <summary>
/// 油門
/// float:不觸碰腳踏板,值一直爲0,觸碰後踩盡:-32768,鬆開爲32767
/// </summary>
public Action<float> Throttle;
}
/// <summary>
/// 檔位器
/// </summary>
public class GearShifter
{
/// <summary>
/// 剛進入新檔位時觸發一次
/// int:檔位數(0:R檔,1:1檔,2:2檔,以此類推)
/// </summary>
public Action<int> OnTriggered;
/// <summary>
/// 維持檔位時一直觸發
/// int:檔位數(0:R檔,1:1檔,2:2檔,以此類推)
/// </summary>
public Action<int> OnPressed;
/// <summary>
/// 離開檔位時觸發一次
/// int:檔位數(0:R檔,1:1檔,2:2檔,以此類推)
/// </summary>
public Action<int> OnReleased;
}
public GearShifter gearShifter;
public Pedals pedals;
public SteeringWheel steeringWheel;
private void Awake()
{
if (Instance == null)
Instance = this;
gearShifter = new GearShifter();
pedals = new Pedals();
steeringWheel = new SteeringWheel();
bool x = false;
// while (x == false)
{
x = LogitechGSDK.LogiSteeringInitialize(false);
Debug.Log(string.Format("<color=#ff0000ff>LogitechSteeringInit:</color> <color=#008000ff>{0}</color>", x));
}
}
private void Update()
{
if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0))
{
#region 檔位器
//擋位 1 擋
if (LogitechGSDK.LogiButtonTriggered(0, 12))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(1);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 12))
{
// if (gearShifter.OnPressed != null) gearShifter.OnPressed(1);
}
else if (LogitechGSDK.LogiButtonReleased(0, 12))
{
//if (gearShifter.OnReleased != null) gearShifter.OnReleased(1);
}
//擋位 2 擋
if (LogitechGSDK.LogiButtonTriggered(0, 13))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(2);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 13))
{
// if (gearShifter.OnPressed != null) gearShifter.OnPressed(2);
}
else if (LogitechGSDK.LogiButtonReleased(0, 13))
{
// if (gearShifter.OnReleased != null) gearShifter.OnReleased(2);
}
//擋位 3 擋
if (LogitechGSDK.LogiButtonTriggered(0, 14))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(3);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 14))
{
//if (gearShifter.OnPressed != null) gearShifter.OnPressed(3);
}
else if (LogitechGSDK.LogiButtonReleased(0, 14))
{
//if (gearShifter.OnReleased != null) gearShifter.OnReleased(3);
}
//擋位 4 擋
if (LogitechGSDK.LogiButtonTriggered(0, 15))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(4);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 15))
{
// if (gearShifter.OnPressed != null) gearShifter.OnPressed(4);
}
else if (LogitechGSDK.LogiButtonReleased(0, 15))
{
//if (gearShifter.OnReleased != null) gearShifter.OnReleased(4);
}
//擋位 5 擋
if (LogitechGSDK.LogiButtonTriggered(0, 16))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(5);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 16))
{
// if (gearShifter.OnPressed != null) gearShifter.OnPressed(5);
}
else if (LogitechGSDK.LogiButtonReleased(0, 16))
{
// if (gearShifter.OnReleased != null) gearShifter.OnReleased(5);
}
//擋位 6 擋
if (LogitechGSDK.LogiButtonTriggered(0, 17))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(6);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 17))
{
// if (gearShifter.OnPressed != null) gearShifter.OnPressed(6);
}
else if (LogitechGSDK.LogiButtonReleased(0, 17))
{
// if (gearShifter.OnReleased != null) gearShifter.OnReleased(6);
}
//擋位 R 擋
if (LogitechGSDK.LogiButtonTriggered(0, 18))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(0);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 18))
{
//if (gearShifter.OnPressed != null) gearShifter.OnPressed(0);
}
else if (LogitechGSDK.LogiButtonReleased(0, 18))
{
// if (gearShifter.OnReleased != null) gearShifter.OnReleased(0);
}
//N檔
{
if (LogitechGSDK.LogiButtonReleased(0, 12)
|| LogitechGSDK.LogiButtonReleased(0, 13)
|| LogitechGSDK.LogiButtonReleased(0, 14)
|| LogitechGSDK.LogiButtonReleased(0, 15)
|| LogitechGSDK.LogiButtonReleased(0, 16)
|| LogitechGSDK.LogiButtonReleased(0, 17)
|| LogitechGSDK.LogiButtonReleased(0, 18))
{
if (gearShifter.OnTriggered != null) gearShifter.OnTriggered(9);
}
}
#endregion
#region 腳踏板
rec = LogitechGSDK.LogiGetStateUnity(0);
//離合
if (pedals.Clutch != null) pedals.Clutch(rec.rglSlider[0]);
//剎車
if (pedals.Brake != null) pedals.Brake(rec.lRz);
//油門
if (pedals.Throttle != null) pedals.Throttle(rec.lY);
#endregion
#region 方向盤
rec = LogitechGSDK.LogiGetStateUnity(0);
if (steeringWheel.OnSteeringWheel != null) steeringWheel.OnSteeringWheel(rec.lX);
//方向盤 X 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 0))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.x);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 0))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.x);
}
else if (LogitechGSDK.LogiButtonReleased(0, 0))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.x);
}
//方向盤 □ 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 1))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.rect);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 1))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.rect);
}
else if (LogitechGSDK.LogiButtonReleased(0, 1))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.rect);
}
//方向盤 ○ 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 2))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.circle);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 2))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.circle);
}
else if (LogitechGSDK.LogiButtonReleased(0, 2))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.circle);
}
//方向盤 △ 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 3))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.triangle);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 3))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.triangle);
}
else if (LogitechGSDK.LogiButtonReleased(0, 3))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.triangle);
}
//方向盤 右撥片 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 4))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.rightDialSlice);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 4))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.rightDialSlice);
}
else if (LogitechGSDK.LogiButtonReleased(0, 4))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.rightDialSlice);
}
//方向盤 左撥片 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 5))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.leftDialSlice);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 5))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.leftDialSlice);
}
else if (LogitechGSDK.LogiButtonReleased(0, 5))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.leftDialSlice);
}
//方向盤 R2 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 6))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.R2);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 6))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.R2);
}
else if (LogitechGSDK.LogiButtonReleased(0, 6))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.R2);
}
//方向盤 L2 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 7))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.L2);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 7))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.L2);
}
else if (LogitechGSDK.LogiButtonReleased(0, 7))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.L2);
}
//方向盤 SHARE 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 8))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.share);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 8))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.share);
}
else if (LogitechGSDK.LogiButtonReleased(0, 8))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.share);
}
//方向盤 OPTION 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 9))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.option);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 9))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.option);
}
else if (LogitechGSDK.LogiButtonReleased(0, 9))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.option);
}
//方向盤 R3 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 10))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.R3);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 10))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.R3);
}
else if (LogitechGSDK.LogiButtonReleased(0, 10))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.R3);
}
//方向盤 L3 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 11))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.L3);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 11))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.L3);
}
else if (LogitechGSDK.LogiButtonReleased(0, 11))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.L3);
}
//方向盤 + 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 19))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.plus);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 19))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.plus);
}
else if (LogitechGSDK.LogiButtonReleased(0, 19))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.plus);
}
//方向盤 - 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 20))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.subtract);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 20))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.subtract);
}
else if (LogitechGSDK.LogiButtonReleased(0, 20))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.subtract);
}
//方向盤 回車 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 23))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.enter);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 23))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.enter);
}
else if (LogitechGSDK.LogiButtonReleased(0, 23))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.enter);
}
//方向盤 logo 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 24))
{
if (steeringWheel.OnTriggered != null) steeringWheel.OnTriggered(LogitechSteeringWheelButtonType.logoBtn);
}
else if (LogitechGSDK.LogiButtonIsPressed(0, 24))
{
if (steeringWheel.OnPressed != null) steeringWheel.OnPressed(LogitechSteeringWheelButtonType.logoBtn);
}
else if (LogitechGSDK.LogiButtonReleased(0, 24))
{
if (steeringWheel.OnReleased != null) steeringWheel.OnReleased(LogitechSteeringWheelButtonType.logoBtn);
}
//方向盤 紅色滾輪右滾 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 21))
{
if (steeringWheel.OnKnob != null) steeringWheel.OnKnob(true);
}
//方向盤 紅色滾輪左滾 鍵
if (LogitechGSDK.LogiButtonTriggered(0, 22))
{
if (steeringWheel.OnKnob != null) steeringWheel.OnKnob(false);
}
switch (rec.rgdwPOV[0])
{
case (0): //Up
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.up);
break;
case (4500): // UP-RIGHT
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.up_left);
break;
case (9000): //right
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.right);
break;
case (13500): //DOWN-RIGHT
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.down_right);
break;
case (18000): //down
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.down);
break;
case (22500): //DOWN-LEFT
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.down_left);
break;
case (27000): //left
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.left);
break;
case (31500): //UP-LEFT
if (steeringWheel.OnCursor != null) steeringWheel.OnCursor(CursorType.up_left);
break;
}
#endregion
}
}
private void OnDestroy()
{
LogitechGSDK.LogiSteeringShutdown();
//如果這裏報錯,需要在LogitechGSDK裏添加
/*
[DllImport("LogitechSteeringWheelEnginesWrapper", CharSet =CharSet.Unicode,
CallingConvention = CallingConvention.Cdecl)]
public static extern bool LogiSteeringShutdown();
*/
}
}
}
測試腳本:
public class LogitechDriving :MonoBehavior
{
public Sakura.LogitechController.GearShifter gearShifter;
public Sakura.LogitechController.Pedals pedals;
public Sakura.LogitechController.SteeringWheel steeringWheel;
void Start()
{
//接收羅技按鍵
LogitechKeyEvent();
}
void LogitechKeyEvent()
{
gearShifter = Sakura.LogitechController.Instance.gearShifter;
pedals = Sakura.LogitechController.Instance.pedals;
steeringWheel = Sakura.LogitechController.Instance.steeringWheel;
if (gearShifter==null || pedals==null || steeringWheel==null) return;
#region Events
gearShifter.OnTriggered += (index) =>
{
//Debug.Log(index + " OnTriggered");
};
//gearShifter.OnPressed += (index) =>{};
//gearShifter.OnReleased += (index) =>{};
pedals.Clutch += (xx) =>{ Logitech_Clutch = xx; };
pedals.Brake += (xx) => { Logitech_Brake = xx; };
pedals.Throttle +=(xx)=>{Logitech_Gas = xx; };
steeringWheel.OnTriggered += (index) =>
{
//Debug.Log(index + " OnTriggered");
};
//steeringWheel.OnPressed += (index) =>{};
//steeringWheel.OnReleased += (index) =>{};
steeringWheel.OnCursor += (inx) =>
{
//Debug.Log(inx + "OnReleased ");
};
steeringWheel.OnKnob += (inx) =>
{
//Debug.Log(inx + "OnReleased ");
};//旋鈕
steeringWheel.OnSteeringWheel += (inx) =>
{
};
#endregion
}
}