shenjianxing 6b341ae2b4 适配VR
2025-04-01 16:16:45 +08:00

102 lines
3.3 KiB
C#

////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2007-2020 , Inc. All Rights Reserved.
//
////////////////////////////////////////////////////////////////////////////////
using System;
using GCSeries.Core.Interop;
namespace GCSeries.Core.Sdk
{
public class ZTargetManager : ZNativeResourceCache<ZTarget>
{
public ZTargetManager(ZContext context)
{
this._context = context;
}
////////////////////////////////////////////////////////////////////////
// Public Properties
////////////////////////////////////////////////////////////////////////
/// <summary>
/// The default head target ( glasses).
/// </summary>
public ZTarget HeadTarget => this.GetTarget(ZTargetType.Head);
/// <summary>
/// The default stylus target.
/// </summary>
public ZTarget StylusTarget => this.GetTarget(ZTargetType.Primary);
////////////////////////////////////////////////////////////////////////
// Public Methods
////////////////////////////////////////////////////////////////////////
/// <summary>
/// Gets the number of trackable targets of a specified type that
/// are currently supported.
/// </summary>
///
/// <param name="targetType">
/// The target type.
/// </param>
///
/// <returns>
/// The number of supported trackable targets of a specified type.
/// </returns>
public int GetNumTargets(ZTargetType targetType)
{
int numTargets = 0;
ZPlugin.LogOnError(ZPlugin.GetNumTargetsByType(
this._context.NativePtr, targetType, out numTargets),
"GetNumTargetsByType");
return numTargets;
}
/// <summary>
/// Gets a reference to a trackable target of a specified type at a
/// specified index.
/// </summary>
///
/// <param name="targetType">
/// The target type.
/// </param>
/// <param name="index">
/// The index to retrieve the target at.
/// </param>
///
/// <returns>
/// A reference to the trackable target if found. Null otherwise.
/// </returns>
public ZTarget GetTarget(ZTargetType targetType, int index = 0)
{
IntPtr targetNativePtr = IntPtr.Zero;
ZPlugin.LogOnError(ZPlugin.GetTargetByType(
this._context.NativePtr, targetType, index,
out targetNativePtr), "GetTargetByType");
return this.GetOrCreateCachedResource(targetNativePtr);
}
////////////////////////////////////////////////////////////////////////
// Private Methods
////////////////////////////////////////////////////////////////////////
private ZTarget GetOrCreateCachedResource(IntPtr targetNativePtr)
{
return this.GetOrCreateCachedResource(
targetNativePtr, t => new ZTarget(t));
}
////////////////////////////////////////////////////////////////////////
// Private Members
////////////////////////////////////////////////////////////////////////
private ZContext _context = null;
}
}