This commit is contained in:
CortexCore
2024-03-19 20:16:48 +08:00
parent 0da2773ea6
commit c8f8c3c8df
112 changed files with 682250 additions and 8960 deletions

View File

@@ -6,7 +6,10 @@
"GUID:677cd05ca06c46b4395470200b1acdad",
"GUID:d525ad6bd40672747bde77962f1c401e",
"GUID:49b49c76ee64f6b41bf28ef951cb0e50",
"GUID:2b6752324f5c76d4cad13e2095c77b9e"
"GUID:2b6752324f5c76d4cad13e2095c77b9e",
"GUID:e34a5702dd353724aa315fb8011f08c3",
"GUID:296866320aab85a42a0403bf684bac59",
"GUID:f51ebe6a0ceec4240a699833d6309b23"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@@ -2,8 +2,12 @@ using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using BITKit;
using BITKit.Modification;
using Cysharp.Threading.Tasks;
using Newtonsoft.Json;
using UnityEngine;
using YooAsset;
namespace BITFALL.Cosmetic
{
@@ -17,14 +21,16 @@ namespace BITFALL.Cosmetic
remove => CosmeticService.Singleton.OnCosmeticsChanged -= value;
}
public IDictionary<IModifyElement, object> Modifies { get; set; }
public IDictionary<IModifyElement, object> Modified { get; set; }
public IDictionary<IModifyElement, object> Modifies => CosmeticService.Singleton.Modifies;
public IDictionary<IModifyElement, object> Modified => CosmeticService.Singleton.Modified;
public void Add(IModifyElement modify, object obj)=>CosmeticService.Singleton.Add(modify,obj);
public void Remove(IModifyElement modify, out object obj)=>CosmeticService.Singleton.Remove(modify,out obj);
}
public class CosmeticService : MonoBehaviour,ICosmeticService
{
[DictionaryReferenceConfig(nameof(Cosmetic_Saved_Layout))]
public const string Cosmetic_Saved_Layout= "Cosmetic_Saved_Layout";
internal static ICosmeticService Singleton { get; private set; }
[SerializeField] private AssetableCosmetic[] initialCosmetics;
@@ -37,24 +43,58 @@ namespace BITFALL.Cosmetic
Singleton = this;
}
private void Start()
private async void Start()
{
Cosmetics = initialCosmetics.OfType<ICosmetic>().ToArray();
if (PlayerPrefs.HasKey(Cosmetic_Saved_Layout))
{
var array = JsonConvert.DeserializeObject<string[]>(PlayerPrefs.GetString(Cosmetic_Saved_Layout));
foreach (var path in array)
{
try
{
var asyncHandle = YooAssets.LoadAssetAsync(path);
await asyncHandle;
if (destroyCancellationToken.IsCancellationRequested) return;
var so = asyncHandle.AssetObject.As<AssetableCosmetic>();
_modifyManager.Modified.Add(so.Type, so);
}
catch (Exception e)
{
BIT4Log.LogException(e);
}
}
}
OnCosmeticsChanged?.Invoke();
destroyCancellationToken.Register(() =>
{
var array = _modifyManager.Modified.Values.Select(x => x.As<ICosmetic>().AddressablePath).ToArray();
PlayerPrefs.SetString(Cosmetic_Saved_Layout, JsonConvert.SerializeObject(array));
PlayerPrefs.Save();
});
}
private readonly IModifyManager _modifyManager = new ModifyManager();
public IDictionary<IModifyElement, object> Modifies => _modifyManager.Modifies;
public IDictionary<IModifyElement, object> Modified => _modifyManager.Modified;
public void Add(IModifyElement modify, object obj)
{
_modifyManager.Add(modify, obj);
if (Modified.TryGetValue(modify, out var x))
{
Modified.Remove(modify);
}
_modifyManager.Add(modify, obj);
OnCosmeticsChanged?.Invoke();
}
public void Remove(IModifyElement modify, out object obj)
{
_modifyManager.Remove(modify, out obj);
OnCosmeticsChanged?.Invoke();
_modifyManager.Remove(modify, out obj);
OnCosmeticsChanged?.Invoke();
}
}
}

View File

@@ -5,6 +5,7 @@ using BITFALL.Cosmetic;
using BITFALL.Entities.Equipment;
using BITFALL.Player.Movement;
using BITKit.PlayerCamera;
using Cysharp.Threading.Tasks;
using UnityEngine;
using UnityEngine.Rendering;
namespace BITKit.Entities.Player.Character
@@ -54,7 +55,7 @@ namespace BITKit.Entities.Player.Character
cosmeticService.OnCosmeticsChanged += Rebuild;
}
public override void OnStart()
{
@@ -71,27 +72,22 @@ namespace BITKit.Entities.Player.Character
_entityOverride.OnOverride += _ =>
{
UpdateMeshState();
allowFPVOverride.SetElements(_entityOverride,_);
allowFPVOverride.SetElements(_entityOverride, _);
};
_tpvRendererGroup = tpvRendererGroup.SelectMany(x => x.GetComponentsInChildren<Renderer>(true)).ToArray();
if (_equipment is not null)
{
_equipment.OnEquipAddressable += _ =>
{
allowFPVOverride.RemoveElement(_equipment);
};
_equipment.OnUnEquipAddressable += _ =>
{
allowFPVOverride.AddElement(_equipment);
};
_equipment.OnEquipAddressable += _ => { allowFPVOverride.RemoveElement(_equipment); };
_equipment.OnUnEquipAddressable += _ => { allowFPVOverride.AddElement(_equipment); };
}
if (_movement is not null)
{
_movement.OnStateChanged += OnNewState;
OnNewState(null,_movement.CurrentState);
OnNewState(null, _movement.CurrentState);
void OnNewState(IEntityMovementState oldState, IEntityMovementState newState)
{
allowFPVOverride.SetDisableElements(_movement, newState switch
@@ -107,7 +103,7 @@ namespace BITKit.Entities.Player.Character
});
}
}
allowFPVOverride.AddListener(value =>
{
foreach (var x in fpvOverrideRenderers)
@@ -115,11 +111,13 @@ namespace BITKit.Entities.Player.Character
x.enabled = value;
}
});
allowFPVOverride.AddElement(_equipment);
// if (_equipment is not null)
// allowFPVOverride.AddElement(_equipment);
Rebuild();
}
public override void OnPlayerInitialized()
{
UpdateMeshState();
@@ -139,10 +137,12 @@ namespace BITKit.Entities.Player.Character
private void UpdateMeshState()
{
allowFPVOverride.Invoke();
switch (_health, _cameraService)
{
case (null, null):
SetFPV(true);
SetFPV(false);
allowFPVOverride.Invoke(false);
break;
case (null, not null):
SetFPV(_cameraService.IsCameraActivated);
@@ -154,7 +154,7 @@ namespace BITKit.Entities.Player.Character
SetFPV(_health.IsAlive && _cameraService.IsCameraActivated);
break;
}
allowFPVOverride.Invoke();
}
private void SetFPV(bool isFpv)
@@ -179,8 +179,11 @@ namespace BITKit.Entities.Player.Character
}
}
[BIT]
private void Rebuild()
private async void Rebuild()
{
await UniTask.Delay(100);
await UniTask.SwitchToMainThread();
if (destroyCancellationToken.IsCancellationRequested) return;
fpvRenderer.Clear();
tpvRenderer.Clear();
fpvOverrideRenderers.Clear();
@@ -201,6 +204,7 @@ namespace BITKit.Entities.Player.Character
UpdateMeshState();
allowFPVOverride.Invoke();
}
}
}

View File

@@ -5,6 +5,7 @@ using System.Linq;
using BITFALL.Cosmetic;
using BITKit;
using BITKit.Entities;
using Cysharp.Threading.Tasks;
using UnityEngine;
namespace BITFALL.Entities.Cosmetic
@@ -23,19 +24,26 @@ namespace BITFALL.Entities.Cosmetic
destroyCancellationToken.Register(() => _cosmeticService.OnCosmeticsChanged -= OnCosmeticsChanged);
}
public override void OnStart()
{
base.OnStart();
OnCosmeticsChanged();
}
private void OnCosmeticsChanged()
{
foreach (var cosmetic in _cosmeticService.Cosmetics)
foreach (var cosmetic in _cosmeticService.Modified.Values.OfType<ICosmetic>())
{
foreach (var content in cosmetic.Contents.OfType<CosmeticModelContent>())
{
foreach (var _renderer in currentRenderers)
{
Destroy(_renderer);
Destroy(_renderer.gameObject);
}
var instance = Instantiate(content.Model, armature);
var instance = Instantiate(content.Model);
currentRenderers = instance.GetComponentsInChildren<SkinnedMeshRenderer>(true);
TransferSkinnedMeshes(currentRenderers, meshRoot, armature);
Destroy(instance);
}
}
}

View File

@@ -33,6 +33,7 @@ namespace BITFALL.Entities.Cosmetic
{
foreach (var _renderer in renderers)
{
if (!_renderer) continue;
if (content.Texture is Texture2D texture2D)
{
var multiple = texture2D.width / 64;

View File

@@ -48,7 +48,8 @@ namespace BITFALL.UX
instance.icon.style.backgroundImage = new StyleBackground(so.Icon);
instance.contextLabel.text = so.name;
if(modified.Contains(cosmetic))
var inUsed = modified.Contains(cosmetic);
if(inUsed)
{
instance.visualElement.AddToClassList("--toggled");
}
@@ -57,15 +58,27 @@ namespace BITFALL.UX
{
try
{
_cosmeticService.Add(so.Type, cosmetic);
if (inUsed)
{
_cosmeticService.Remove(so.Type, out _);
}
else
{
_cosmeticService.Add(so.Type, cosmetic);
}
}
catch (NotRequireModifyException e)
{
Alert.Print("需要前置",e.Message);
Alert.Print("需要前置", e.Message);
}
catch (IncompatibleModifyException e)
{
Alert.Print("不兼容的修改",e.Message);
Alert.Print("不兼容的修改", e.Message);
}
catch (NotSupportModifyException e)
{
Alert.Print("不支持的修改", e.Message);
}
};
}

View File

@@ -28,7 +28,6 @@ namespace BITFALL.UX
[SerializeReference, SubclassSelector] private ISceneService SceneService;
[Header(Constant.Header.Components)]
[SerializeField] private GameObject menuObject;
[SerializeField] private UXButton playButton;
[SerializeField] private UXButton stopButton;
[SerializeField] private UXButton exitButton;
@@ -96,7 +95,6 @@ namespace BITFALL.UX
private void OnConnected()
{
menuObject.SetActive(false);
newHostContainer.SetActive(false);
stopButton.SetActive(true);
exitButton.SetActive(false);
@@ -104,7 +102,6 @@ namespace BITFALL.UX
}
private void OnDisconnected()
{
menuObject.SetActive(true);
newHostContainer.SetActive(true);
stopButton.SetActive(false);
exitButton.SetActive(true);