453 lines
20 KiB
C#
453 lines
20 KiB
C#
// This file is provided under The MIT License as part of Steamworks.NET.
|
|
// Copyright (c) 2013-2022 Riley Labrecque
|
|
// Please see the included LICENSE.txt for additional information.
|
|
|
|
// This file is automatically generated.
|
|
// Changes to this file will be reverted when you update Steamworks.NET
|
|
|
|
#if !(UNITY_STANDALONE_WIN || UNITY_STANDALONE_LINUX || UNITY_STANDALONE_OSX || STEAMWORKS_WIN || STEAMWORKS_LIN_OSX)
|
|
#define DISABLESTEAMWORKS
|
|
#endif
|
|
|
|
#if !DISABLESTEAMWORKS
|
|
|
|
using System.Runtime.InteropServices;
|
|
using IntPtr = System.IntPtr;
|
|
|
|
namespace Steamworks {
|
|
// friend game played information
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct FriendGameInfo_t {
|
|
public CGameID m_gameID;
|
|
public uint m_unGameIP;
|
|
public ushort m_usGamePort;
|
|
public ushort m_usQueryPort;
|
|
public CSteamID m_steamIDLobby;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
public struct InputAnalogActionData_t {
|
|
// Type of data coming from this action, this will match what got specified in the action set
|
|
public EInputSourceMode eMode;
|
|
|
|
// The current state of this action; will be delta updates for mouse actions
|
|
public float x, y;
|
|
|
|
// Whether or not this action is currently available to be bound in the active action set
|
|
public byte bActive;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = 1)]
|
|
public struct InputDigitalActionData_t {
|
|
// The current state of this action; will be true if currently pressed
|
|
public byte bState;
|
|
|
|
// Whether or not this action is currently available to be bound in the active action set
|
|
public byte bActive;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct InputMotionData_t {
|
|
// Sensor-fused absolute rotation; will drift in heading toward average
|
|
public float rotQuatX;
|
|
public float rotQuatY;
|
|
public float rotQuatZ;
|
|
public float rotQuatW;
|
|
|
|
// Positional acceleration
|
|
public float posAccelX;
|
|
public float posAccelY;
|
|
public float posAccelZ;
|
|
|
|
// Angular velocity
|
|
public float rotVelX;
|
|
public float rotVelY;
|
|
public float rotVelZ;
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct InputMotionDataV2_t {
|
|
//
|
|
// Gyro post processing:
|
|
//
|
|
|
|
// Drift Corrected Quaternion is calculated after steam input controller calibration values have been applied.
|
|
// Rawest _useful_ version of a quaternion.
|
|
// Most camera implementations should use this by comparing last rotation against current rotation, and applying the difference to the in game camera (plus your own sensitivity tweaks)
|
|
// It is worth viewing
|
|
public float driftCorrectedQuatX;
|
|
public float driftCorrectedQuatY;
|
|
public float driftCorrectedQuatZ;
|
|
public float driftCorrectedQuatW;
|
|
|
|
// Sensor fusion corrects using accelerometer, and "average forward over time" for "forward".
|
|
// This can "ouija" your aim, so it's not so appropriate for camera controls (sensor fusion was originally made for racing game steering )
|
|
// Same result as from old InputMotionData_t::rotQuatX/Y/Z/W
|
|
public float sensorFusionQuatX;
|
|
public float sensorFusionQuatY;
|
|
public float sensorFusionQuatZ;
|
|
public float sensorFusionQuatW;
|
|
|
|
// Deferred Sensor fusion quaternion with deferred correction
|
|
// Reduces perception of "ouija" effect by only applying correction when the controller is below "low noise" thresholds,
|
|
// while the controller rotates fast - never when the user is attempting precision aim.
|
|
public float deferredSensorFusionQuatX;
|
|
public float deferredSensorFusionQuatY;
|
|
public float deferredSensorFusionQuatZ;
|
|
public float deferredSensorFusionQuatW;
|
|
|
|
// Same as accel but values are calibrated such that 1 unit = 1G.
|
|
// X = Right
|
|
// Y = Forward out through the joystick USB port.
|
|
// Z = Up through the joystick axis.
|
|
public float gravityX;
|
|
public float gravityY;
|
|
public float gravityZ;
|
|
|
|
//
|
|
// Same as rotVel values in GetMotionData but values are calibrated to degrees per second.
|
|
// Local Space (controller relative)
|
|
// X = Pitch = left to right axis
|
|
// Y = Roll = axis through charging port
|
|
// Z = Yaw = axis through sticks
|
|
public float degreesPerSecondX;
|
|
public float degreesPerSecondY;
|
|
public float degreesPerSecondZ;
|
|
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamItemDetails_t {
|
|
public SteamItemInstanceID_t m_itemId;
|
|
public SteamItemDef_t m_iDefinition;
|
|
public ushort m_unQuantity;
|
|
public ushort m_unFlags; // see ESteamItemFlags
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamPartyBeaconLocation_t {
|
|
public ESteamPartyBeaconLocationType m_eType;
|
|
public ulong m_ulLocationID;
|
|
}
|
|
|
|
// connection state to a specified user, returned by GetP2PSessionState()
|
|
// this is under-the-hood info about what's going on with a SendP2PPacket(), shouldn't be needed except for debuggin
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct P2PSessionState_t {
|
|
public byte m_bConnectionActive; // true if we've got an active open connection
|
|
public byte m_bConnecting; // true if we're currently trying to establish a connection
|
|
public byte m_eP2PSessionError; // last error recorded (see enum above)
|
|
public byte m_bUsingRelay; // true if it's going through a relay server (TURN)
|
|
public int m_nBytesQueuedForSend;
|
|
public int m_nPacketsQueuedForSend;
|
|
public uint m_nRemoteIP; // potential IP:Port of remote host. Could be TURN server.
|
|
public ushort m_nRemotePort; // Only exists for compatibility with older authentication api's
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Structure that contains an array of const char * strings and the number of those strings
|
|
//-----------------------------------------------------------------------------
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamParamStringArray_t {
|
|
public IntPtr m_ppStrings;
|
|
public int m_nNumStrings;
|
|
}
|
|
|
|
// Details for a single published file/UGC
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamUGCDetails_t {
|
|
public PublishedFileId_t m_nPublishedFileId;
|
|
public EResult m_eResult; // The result of the operation.
|
|
public EWorkshopFileType m_eFileType; // Type of the file
|
|
public AppId_t m_nCreatorAppID; // ID of the app that created this file.
|
|
public AppId_t m_nConsumerAppID; // ID of the app that will consume this file.
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchPublishedDocumentTitleMax)]
|
|
private byte[] m_rgchTitle_;
|
|
public string m_rgchTitle // title of document
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_rgchTitle_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_rgchTitle_, Constants.k_cchPublishedDocumentTitleMax); }
|
|
}
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchPublishedDocumentDescriptionMax)]
|
|
private byte[] m_rgchDescription_;
|
|
public string m_rgchDescription // description of document
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_rgchDescription_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_rgchDescription_, Constants.k_cchPublishedDocumentDescriptionMax); }
|
|
}
|
|
public ulong m_ulSteamIDOwner; // Steam ID of the user who created this content.
|
|
public uint m_rtimeCreated; // time when the published file was created
|
|
public uint m_rtimeUpdated; // time when the published file was last updated
|
|
public uint m_rtimeAddedToUserList; // time when the user added the published file to their list (not always applicable)
|
|
public ERemoteStoragePublishedFileVisibility m_eVisibility; // visibility
|
|
[MarshalAs(UnmanagedType.I1)]
|
|
public bool m_bBanned; // whether the file was banned
|
|
[MarshalAs(UnmanagedType.I1)]
|
|
public bool m_bAcceptedForUse; // developer has specifically flagged this item as accepted in the Workshop
|
|
[MarshalAs(UnmanagedType.I1)]
|
|
public bool m_bTagsTruncated; // whether the list of tags was too long to be returned in the provided buffer
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchTagListMax)]
|
|
private byte[] m_rgchTags_;
|
|
public string m_rgchTags // comma separated list of all tags associated with this file
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_rgchTags_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_rgchTags_, Constants.k_cchTagListMax); }
|
|
}
|
|
// file/url information
|
|
public UGCHandle_t m_hFile; // The handle of the primary file
|
|
public UGCHandle_t m_hPreviewFile; // The handle of the preview file
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchFilenameMax)]
|
|
private byte[] m_pchFileName_;
|
|
public string m_pchFileName // The cloud filename of the primary file
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_pchFileName_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_pchFileName_, Constants.k_cchFilenameMax); }
|
|
}
|
|
public int m_nFileSize; // Size of the primary file
|
|
public int m_nPreviewFileSize; // Size of the preview file
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchPublishedFileURLMax)]
|
|
private byte[] m_rgchURL_;
|
|
public string m_rgchURL // URL (for a video or a website)
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_rgchURL_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_rgchURL_, Constants.k_cchPublishedFileURLMax); }
|
|
}
|
|
// voting information
|
|
public uint m_unVotesUp; // number of votes up
|
|
public uint m_unVotesDown; // number of votes down
|
|
public float m_flScore; // calculated score
|
|
// collection details
|
|
public uint m_unNumChildren;
|
|
}
|
|
|
|
// a single entry in a leaderboard, as returned by GetDownloadedLeaderboardEntry()
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct LeaderboardEntry_t {
|
|
public CSteamID m_steamIDUser; // user with the entry - use SteamFriends()->GetFriendPersonaName() & SteamFriends()->GetFriendAvatar() to get more info
|
|
public int m_nGlobalRank; // [1..N], where N is the number of users with an entry in the leaderboard
|
|
public int m_nScore; // score as set in the leaderboard
|
|
public int m_cDetails; // number of int32 details available for this entry
|
|
public UGCHandle_t m_hUGC; // handle for UGC attached to the entry
|
|
}
|
|
|
|
/// Store key/value pair used in matchmaking queries.
|
|
///
|
|
/// Actually, the name Key/Value is a bit misleading. The "key" is better
|
|
/// understood as "filter operation code" and the "value" is the operand to this
|
|
/// filter operation. The meaning of the operand depends upon the filter.
|
|
[StructLayout(LayoutKind.Sequential)]
|
|
public struct MatchMakingKeyValuePair_t {
|
|
MatchMakingKeyValuePair_t(string strKey, string strValue) {
|
|
m_szKey = strKey;
|
|
m_szValue = strValue;
|
|
}
|
|
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
|
public string m_szKey;
|
|
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 256)]
|
|
public string m_szValue;
|
|
}
|
|
|
|
// structure that contains client callback data
|
|
// see callbacks documentation for more details
|
|
/// Internal structure used in manual callback dispatch
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct CallbackMsg_t {
|
|
public int m_hSteamUser; // Specific user to whom this callback applies.
|
|
public int m_iCallback; // Callback identifier. (Corresponds to the k_iCallback enum in the callback structure.)
|
|
public IntPtr m_pubParam; // Points to the callback structure
|
|
public int m_cubParam; // Size of the data pointed to by m_pubParam
|
|
}
|
|
|
|
/// Describe the state of a connection.
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamNetConnectionInfo_t {
|
|
|
|
/// Who is on the other end? Depending on the connection type and phase of the connection, we might not know
|
|
public SteamNetworkingIdentity m_identityRemote;
|
|
|
|
/// Arbitrary user data set by the local application code
|
|
public long m_nUserData;
|
|
|
|
/// Handle to listen socket this was connected on, or k_HSteamListenSocket_Invalid if we initiated the connection
|
|
public HSteamListenSocket m_hListenSocket;
|
|
|
|
/// Remote address. Might be all 0's if we don't know it, or if this is N/A.
|
|
/// (E.g. Basically everything except direct UDP connection.)
|
|
public SteamNetworkingIPAddr m_addrRemote;
|
|
public ushort m__pad1;
|
|
|
|
/// What data center is the remote host in? (0 if we don't know.)
|
|
public SteamNetworkingPOPID m_idPOPRemote;
|
|
|
|
/// What relay are we using to communicate with the remote host?
|
|
/// (0 if not applicable.)
|
|
public SteamNetworkingPOPID m_idPOPRelay;
|
|
|
|
/// High level state of the connection
|
|
public ESteamNetworkingConnectionState m_eState;
|
|
|
|
/// Basic cause of the connection termination or problem.
|
|
/// See ESteamNetConnectionEnd for the values used
|
|
public int m_eEndReason;
|
|
|
|
/// Human-readable, but non-localized explanation for connection
|
|
/// termination or problem. This is intended for debugging /
|
|
/// diagnostic purposes only, not to display to users. It might
|
|
/// have some details specific to the issue.
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchSteamNetworkingMaxConnectionCloseReason)]
|
|
private byte[] m_szEndDebug_;
|
|
public string m_szEndDebug
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_szEndDebug_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_szEndDebug_, Constants.k_cchSteamNetworkingMaxConnectionCloseReason); }
|
|
}
|
|
|
|
/// Debug description. This includes the internal connection ID,
|
|
/// connection type (and peer information), and any name
|
|
/// given to the connection by the app. This string is used in various
|
|
/// internal logging messages.
|
|
///
|
|
/// Note that the connection ID *usually* matches the HSteamNetConnection
|
|
/// handle, but in certain cases with symmetric connections it might not.
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = Constants.k_cchSteamNetworkingMaxConnectionDescription)]
|
|
private byte[] m_szConnectionDescription_;
|
|
public string m_szConnectionDescription
|
|
{
|
|
get { return InteropHelp.ByteArrayToStringUTF8(m_szConnectionDescription_); }
|
|
set { InteropHelp.StringToByteArrayUTF8(value, m_szConnectionDescription_, Constants.k_cchSteamNetworkingMaxConnectionDescription); }
|
|
}
|
|
|
|
/// Misc flags. Bitmask of k_nSteamNetworkConnectionInfoFlags_Xxxx
|
|
public int m_nFlags;
|
|
|
|
/// Internal stuff, room to change API easily
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 63)]
|
|
public uint[] reserved;
|
|
}
|
|
|
|
/// Quick connection state, pared down to something you could call
|
|
/// more frequently without it being too big of a perf hit.
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamNetConnectionRealTimeStatus_t {
|
|
|
|
/// High level state of the connection
|
|
public ESteamNetworkingConnectionState m_eState;
|
|
|
|
/// Current ping (ms)
|
|
public int m_nPing;
|
|
|
|
/// Connection quality measured locally, 0...1. (Percentage of packets delivered
|
|
/// end-to-end in order).
|
|
public float m_flConnectionQualityLocal;
|
|
|
|
/// Packet delivery success rate as observed from remote host
|
|
public float m_flConnectionQualityRemote;
|
|
|
|
/// Current data rates from recent history.
|
|
public float m_flOutPacketsPerSec;
|
|
public float m_flOutBytesPerSec;
|
|
public float m_flInPacketsPerSec;
|
|
public float m_flInBytesPerSec;
|
|
|
|
/// Estimate rate that we believe that we can send data to our peer.
|
|
/// Note that this could be significantly higher than m_flOutBytesPerSec,
|
|
/// meaning the capacity of the channel is higher than you are sending data.
|
|
/// (That's OK!)
|
|
public int m_nSendRateBytesPerSecond;
|
|
|
|
/// Number of bytes pending to be sent. This is data that you have recently
|
|
/// requested to be sent but has not yet actually been put on the wire. The
|
|
/// reliable number ALSO includes data that was previously placed on the wire,
|
|
/// but has now been scheduled for re-transmission. Thus, it's possible to
|
|
/// observe m_cbPendingReliable increasing between two checks, even if no
|
|
/// calls were made to send reliable data between the checks. Data that is
|
|
/// awaiting the Nagle delay will appear in these numbers.
|
|
public int m_cbPendingUnreliable;
|
|
public int m_cbPendingReliable;
|
|
|
|
/// Number of bytes of reliable data that has been placed the wire, but
|
|
/// for which we have not yet received an acknowledgment, and thus we may
|
|
/// have to re-transmit.
|
|
public int m_cbSentUnackedReliable;
|
|
|
|
/// If you queued a message right now, approximately how long would that message
|
|
/// wait in the queue before we actually started putting its data on the wire in
|
|
/// a packet?
|
|
///
|
|
/// In general, data that is sent by the application is limited by the bandwidth
|
|
/// of the channel. If you send data faster than this, it must be queued and
|
|
/// put on the wire at a metered rate. Even sending a small amount of data (e.g.
|
|
/// a few MTU, say ~3k) will require some of the data to be delayed a bit.
|
|
///
|
|
/// Ignoring multiple lanes, the estimated delay will be approximately equal to
|
|
///
|
|
/// ( m_cbPendingUnreliable+m_cbPendingReliable ) / m_nSendRateBytesPerSecond
|
|
///
|
|
/// plus or minus one MTU. It depends on how much time has elapsed since the last
|
|
/// packet was put on the wire. For example, the queue might have *just* been emptied,
|
|
/// and the last packet placed on the wire, and we are exactly up against the send
|
|
/// rate limit. In that case we might need to wait for one packet's worth of time to
|
|
/// elapse before we can send again. On the other extreme, the queue might have data
|
|
/// in it waiting for Nagle. (This will always be less than one packet, because as
|
|
/// soon as we have a complete packet we would send it.) In that case, we might be
|
|
/// ready to send data now, and this value will be 0.
|
|
///
|
|
/// This value is only valid if multiple lanes are not used. If multiple lanes are
|
|
/// in use, then the queue time will be different for each lane, and you must use
|
|
/// the value in SteamNetConnectionRealTimeLaneStatus_t.
|
|
///
|
|
/// Nagle delay is ignored for the purposes of this calculation.
|
|
public SteamNetworkingMicroseconds m_usecQueueTime;
|
|
|
|
// Internal stuff, room to change API easily
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
|
|
public uint[] reserved;
|
|
}
|
|
|
|
/// Quick status of a particular lane
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamNetConnectionRealTimeLaneStatus_t {
|
|
// Counters for this particular lane. See the corresponding variables
|
|
// in SteamNetConnectionRealTimeStatus_t
|
|
public int m_cbPendingUnreliable;
|
|
public int m_cbPendingReliable;
|
|
public int m_cbSentUnackedReliable;
|
|
public int _reservePad1; // Reserved for future use
|
|
|
|
/// Lane-specific queue time. This value takes into consideration lane priorities
|
|
/// and weights, and how much data is queued in each lane, and attempts to predict
|
|
/// how any data currently queued will be sent out.
|
|
public SteamNetworkingMicroseconds m_usecQueueTime;
|
|
|
|
// Internal stuff, room to change API easily
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 10)]
|
|
public uint[] reserved;
|
|
}
|
|
|
|
//
|
|
// Ping location / measurement
|
|
//
|
|
/// Object that describes a "location" on the Internet with sufficient
|
|
/// detail that we can reasonably estimate an upper bound on the ping between
|
|
/// the two hosts, even if a direct route between the hosts is not possible,
|
|
/// and the connection must be routed through the Steam Datagram Relay network.
|
|
/// This does not contain any information that identifies the host. Indeed,
|
|
/// if two hosts are in the same building or otherwise have nearly identical
|
|
/// networking characteristics, then it's valid to use the same location
|
|
/// object for both of them.
|
|
///
|
|
/// NOTE: This object should only be used in the same process! Do not serialize it,
|
|
/// send it over the wire, or persist it in a file or database! If you need
|
|
/// to do that, convert it to a string representation using the methods in
|
|
/// ISteamNetworkingUtils().
|
|
[StructLayout(LayoutKind.Sequential, Pack = Packsize.value)]
|
|
public struct SteamNetworkPingLocation_t {
|
|
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 512)]
|
|
public byte[] m_data;
|
|
}
|
|
|
|
}
|
|
|
|
#endif // !DISABLESTEAMWORKS
|