BITFALL/Assets/BITKit/UnityPluginsSupport/Steamwork/SteamService.cs

94 lines
3.4 KiB
C#
Raw Normal View History

2023-06-08 14:09:50 +08:00
using System;
using System.Collections;
using System.Collections.Generic;
2023-10-02 23:24:56 +08:00
using System.Linq;
2023-09-01 14:33:54 +08:00
using System.Threading;
using Cysharp.Threading.Tasks;
2023-06-08 14:09:50 +08:00
using UnityEngine;
using Steamworks;
2023-09-01 14:33:54 +08:00
using Steamworks.Data;
2023-08-23 01:59:40 +08:00
2023-06-08 14:09:50 +08:00
namespace BITKit.Steamwork
{
public class SteamService : MonoBehaviour,ISteamService
{
2023-06-17 16:30:53 +08:00
internal static SteamService Singleton;
2023-06-08 14:09:50 +08:00
[Header(Constant.Header.Settings)]
[SerializeField]private uint appId=480;
2023-10-02 23:24:56 +08:00
[Header(Constant.Header.Settings)]
[SerializeField] private TextAsset allowCharacters;
2023-11-02 20:58:55 +08:00
[Header(Constant.Header.Settings)]
[SerializeField] private Optional<UnityInventoryItemDef[]> overrideInventoryItemDefs;
2023-06-08 14:09:50 +08:00
//接口实现
2023-06-17 16:30:53 +08:00
public ulong SteamId => SteamClient.SteamId;
2023-10-20 19:31:12 +08:00
public string Name =>SteamClient.IsValid ? SteamClient.Name.Where(x=>allowCharacters.text.Contains(x)).Aggregate("",(current, c) => current+c) : Environment.UserDomainName;
2023-08-23 01:59:40 +08:00
public bool IsInitialized=>SteamClient.IsValid&&SteamClient.IsLoggedOn;
2023-09-01 14:33:54 +08:00
public async UniTask<Texture2D> GetAvatarAsync(CancellationToken token)
{
var avatar =await SteamFriends.GetLargeAvatarAsync(SteamClient.SteamId);
var texture = new Texture2D(0, 0);
return avatar.Value.Covert();
}
2023-11-02 20:58:55 +08:00
public async UniTask<ISteamInventoryItemDef[]> GetInventoryItemDefsAsync(CancellationToken token)
{
if(overrideInventoryItemDefs.Allow)return overrideInventoryItemDefs.Value;
var items = await SteamInventory.GetAllItemsAsync();
if(items.HasValue is false)return Array.Empty<ISteamInventoryItemDef>();
return items.Value.GetItems().Select(x => new SteamInventoryItemDef()
{
Id = x.Id,
DefId = x.DefId
}).Cast<ISteamInventoryItemDef>().ToArray();
}
2023-06-17 16:30:53 +08:00
public int Id => (int)SteamClient.SteamId.AccountId;
2023-08-23 01:59:40 +08:00
private bool initialized;
2023-06-17 16:30:53 +08:00
private void Awake()
{
Singleton = this;
}
2023-06-08 14:09:50 +08:00
private void Start()
{
try
{
2023-08-23 01:59:40 +08:00
if (SteamClient.IsValid is false)
{
SteamClient.Init(appId);
}
initialized = true;
2023-06-08 14:09:50 +08:00
BIT4Log.Log<SteamService>("已初始化Steam");
}
2023-11-02 20:58:55 +08:00
catch (Exception e)
2023-06-08 14:09:50 +08:00
{
2023-08-23 01:59:40 +08:00
BIT4Log.Warning<SteamService>("Steam初始化失败请验证客户端是否运行");
2023-11-02 20:58:55 +08:00
Debug.Log(e);
2023-06-08 14:09:50 +08:00
}
}
2023-08-23 01:59:40 +08:00
2023-06-08 14:09:50 +08:00
private void OnDestroy()
{
2023-08-23 01:59:40 +08:00
if (initialized)
SteamClient.Shutdown();
2023-06-08 14:09:50 +08:00
}
2023-09-01 14:33:54 +08:00
2023-06-08 14:09:50 +08:00
}
2023-06-17 16:30:53 +08:00
[Serializable]
public class SteamServiceSingleton:ISteamService
{
private ISteamService _steamServiceImplementation=>SteamService.Singleton;
public int Id => _steamServiceImplementation.Id;
public ulong SteamId => _steamServiceImplementation.SteamId;
public string Name => _steamServiceImplementation.Name;
2023-08-23 01:59:40 +08:00
public bool IsInitialized=>_steamServiceImplementation.IsInitialized;
2023-09-01 14:33:54 +08:00
public UniTask<Texture2D> GetAvatarAsync(CancellationToken token)=>_steamServiceImplementation.GetAvatarAsync(token);
2023-11-02 20:58:55 +08:00
public UniTask<ISteamInventoryItemDef[]> GetInventoryItemDefsAsync(CancellationToken token)=>_steamServiceImplementation.GetInventoryItemDefsAsync(token);
2023-06-17 16:30:53 +08:00
}
2023-06-08 14:09:50 +08:00
}