48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
using UnityEngine;
|
|
using Code.Configs;
|
|
using Code.Gameplay.Character.Core;
|
|
using Cysharp.Threading.Tasks;
|
|
using Reflex.Attributes;
|
|
using Reflex.Core;
|
|
using Reflex.Extensions;
|
|
using Reflex.Injectors;
|
|
using UnityEngine.AddressableAssets;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace Code.Gameplay.Player
|
|
{
|
|
public class PlayerFactory : IPlayerFactory
|
|
{
|
|
[Inject] PlayerConfig _playerConfig;
|
|
[Inject] private IPlayerProvider _playerProvider;
|
|
|
|
public PlayerHealth CreatePlayerHealth(int count = -1)
|
|
{
|
|
if (count < 0) count = _playerConfig.maxHealth;
|
|
|
|
return new(count);
|
|
}
|
|
|
|
public async UniTask<CharacterProvider> CreatePlayer()
|
|
{
|
|
var go = await Addressables.InstantiateAsync(_playerConfig.characterPrefab).ToUniTask();
|
|
var provider = go.GetComponent<CharacterProvider>();
|
|
|
|
AttributeInjector.Inject(provider, Container.ProjectContainer);
|
|
AttributeInjector.Inject(provider.CustomCharacterController, Container.ProjectContainer);
|
|
|
|
((PlayerProvider)_playerProvider).SetPlayer(provider, _playerConfig);
|
|
|
|
return provider;
|
|
}
|
|
|
|
public void ReleasePlayer(CharacterProvider characterProvider)
|
|
{
|
|
((PlayerProvider)_playerProvider).ClearPlayer();
|
|
Addressables.ReleaseInstance(characterProvider.gameObject);
|
|
}
|
|
|
|
public async UniTask<ArmsMeshProvider> CreateArms(Transform papochka) => (await Addressables.InstantiateAsync(_playerConfig.armsMeshPrefab, papochka).ToUniTask()).GetComponent<ArmsMeshProvider>();
|
|
public void ReleaseArms(ArmsMeshProvider arms) => Addressables.ReleaseInstance(arms.gameObject);
|
|
}
|
|
} |