using System.Globalization;
using System;
using System.Collections.Generic;
using F3Device.Device;
///
/// F3D设备
///
public class F3DService
{
private static F3DService _instance;
///
/// 单例
///
public static F3DService Instance
{
get
{
if (_instance == null)
_instance = new F3DService();
_instance.Init();
return _instance;
}
}
private F3Device.Device.BaseDevice _mainDevice;
///
/// 主屏窗口所在设备 (IGraph3Device:左右画面 IFrame3Device:帧连续画面)
///
public F3Device.Device.BaseDevice mainDevice
{
get
{
return _mainDevice;
}
}
private F3Device.Device.BaseDevice _projectionDevice;
///
/// 投屏窗口所在设备 (IGraph3Device:左右画面 IFrame3Device:帧连续画面)
///
public F3Device.Device.BaseDevice projectionDevice
{
get
{
return _projectionDevice;
}
}
private IntPtr _mainWindowHandle = IntPtr.Zero;
///
/// 主窗口句柄
///
public IntPtr mainWindowHandle
{
get
{
return _mainWindowHandle;
}
}
private F3DService() { }
///
/// 初始化
/// 当设备环境更改时需重新初始化
///
public void Init()
{
_mainDevice = FindMainDevice();
F3Device.Screen.Monitor monitor = F3Device.DeviceManager.Instance.FindProjectionMonitor(_mainWindowHandle);
if (monitor != null)
{
F3Device.Screen.RECT rect = monitor.m_MonitorInfo.rcMonitor;
_projectionDevice = F3Device.DeviceManager.Instance.FindDevice(rect.Left, rect.Top, rect.Right, rect.Bottom);
}
}
///
/// 返回是否未来立体设备
///
///
public bool IsGCDevice()
{
if (_mainDevice != null)
{
if (_mainDevice is GC3000Device)
{
return true;
}
else if (_mainDevice is GCDevice)
{
return true;
}
}
if (projectionDevice != null)
{
if (projectionDevice is GC3000Device)
{
return true;
}
else if (projectionDevice is GCDevice)
{
return true;
}
}
return false;
}
///
/// 控制设备切换2/3D
///
/// 设备
/// 是否为3D
public void SwitchScreenState(F3Device.Device.BaseDevice dev, bool is3D)
{
if (dev == null) return;
if (dev is IFrame3Device)
{
IFrame3Device iDevice = dev as IFrame3Device;
if (is3D)
iDevice.Switch_IFrame_3D();
else
iDevice.Switch_IFrame_2D();
}
else if (dev is IGraph3Device)
{
IGraph3Device iDevice = dev as IGraph3Device;
if (is3D)
iDevice.Switch_IGraph_LR_3D();
else
iDevice.Switch_IGraph_2D();
}
}
///
/// 找出应用所在屏幕的当前设备
///
private F3Device.Device.BaseDevice FindMainDevice()
{
_mainWindowHandle = F3Device.API.GetProcessWnd();
#if UNITY_EDITOR
_mainWindowHandle = IntPtr.Zero;
List list = F3Device.API.GetProcessWndList();
foreach (IntPtr intptr in list)
F3Device.API.EnumChildWindows(intptr, new F3Device.API.CHILDWNDENUMPROC(EnumGameViewWindow), 0);
#endif
return F3Device.DeviceManager.Instance.FindDevice(_mainWindowHandle);
}
///
/// 编辑器中找出视图窗口
///
///
///
///
private bool EnumGameViewWindow(IntPtr hwnd, int lParam)
{
int cTxtLen = F3Device.API.GetWindowTextLength(hwnd.ToInt32()) + 1;
System.Text.StringBuilder text = new System.Text.StringBuilder(cTxtLen);
F3Device.API.GetWindowText(hwnd.ToInt32(), text, cTxtLen);
string title = text.ToString();
if (title.Contains("GameView"))
{
_mainWindowHandle = hwnd;
return false;
}
return true;
}
}