diff --git a/Assets/Scripts/Architecture/GameStates/Gameplay/SetupGameplayState.cs b/Assets/Scripts/Architecture/GameStates/Gameplay/SetupGameplayState.cs index 5c4c656..57ad5e6 100644 --- a/Assets/Scripts/Architecture/GameStates/Gameplay/SetupGameplayState.cs +++ b/Assets/Scripts/Architecture/GameStates/Gameplay/SetupGameplayState.cs @@ -37,6 +37,7 @@ public void Enter() private void SetUpPlayer(PlayerData player, PlayerCarpetDataProvider carpet) { + player.SizeConverter = new PlayerSizeConverter(player); player.SizeCalculator = new PLayerSizeCalculator(player, carpet); player.SizeSetter = new PlayerSizeSetter(player); player.CarpetSizeSetter = new PlayerCarpetSizeSetter(carpet.transform); diff --git a/Assets/Scripts/Data/Dynamic/Player/PlayerData.cs b/Assets/Scripts/Data/Dynamic/Player/PlayerData.cs index 3f92b3f..caa8edf 100644 --- a/Assets/Scripts/Data/Dynamic/Player/PlayerData.cs +++ b/Assets/Scripts/Data/Dynamic/Player/PlayerData.cs @@ -13,6 +13,7 @@ public class PlayerData public float Size { get; set; } public float Radius { get; set; } + public PlayerSizeConverter SizeConverter { get; set; } public PLayerSizeCalculator SizeCalculator { get; set; } public PlayerSizeSetter SizeSetter { get; set; } public PlayerCarpetSizeSetter CarpetSizeSetter { get; set; } diff --git a/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs b/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs new file mode 100644 index 0000000..9908f31 --- /dev/null +++ b/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs @@ -0,0 +1,24 @@ +using BlockBreaker.Data.Dynamic.Player; +using UnityEngine; + +namespace BlockBreaker.Features.Player.Bullet +{ + public class PlayerBulletSizeSetter + { + public void Set(PlayerBulletData bullet, float size) + { + bullet.Size = size; + bullet.Radius = size / 2f; + bullet.Transform.localScale = Vector3.one * bullet.Size; + + CorrectPosition(bullet); + } + + private void CorrectPosition(PlayerBulletData bullet) + { + Vector3 initialPosition = bullet.InitialPosition; + bullet.Transform.localPosition = + new Vector3(initialPosition.x, initialPosition.y + bullet.Radius, initialPosition.z); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs.meta b/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs.meta new file mode 100644 index 0000000..7610328 --- /dev/null +++ b/Assets/Scripts/Features/Player/Bullet/PlayerBulletSizeSetter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a3ebc962154e4827b6a8ca297fa77f4f +timeCreated: 1693741614 \ No newline at end of file diff --git a/Assets/Scripts/Features/Player/PLayerSizeCalculator.cs b/Assets/Scripts/Features/Player/PLayerSizeCalculator.cs index c4d8363..56e20dd 100644 --- a/Assets/Scripts/Features/Player/PLayerSizeCalculator.cs +++ b/Assets/Scripts/Features/Player/PLayerSizeCalculator.cs @@ -1,7 +1,6 @@ using System.Collections.Generic; using System.Linq; using BlockBreaker.Data.Dynamic.Player; -using BlockBreaker.Data.Static.Configuration.Player; using BlockBreaker.Features.Obstacle; using BlockBreaker.Features.Player.Carpet; using UnityEngine; diff --git a/Assets/Scripts/Features/Player/PlayerInputHandler.cs b/Assets/Scripts/Features/Player/PlayerInputHandler.cs index 83de1b7..a9ad487 100644 --- a/Assets/Scripts/Features/Player/PlayerInputHandler.cs +++ b/Assets/Scripts/Features/Player/PlayerInputHandler.cs @@ -1,4 +1,5 @@ -using BlockBreaker.Features.Player.Bullet; +using BlockBreaker.Data.Dynamic.Player; +using BlockBreaker.Features.Player.Bullet; using BlockBreaker.Infrastructure.Services; using BlockBreaker.Infrastructure.Services.Input; using UnityEngine; @@ -9,35 +10,39 @@ namespace BlockBreaker.Features.Player public class PlayerInputHandler : IActiveService { private readonly IObjectPool _bullets; + private readonly PlayerData _player; private readonly IPlayerTouchInputService _touchInputService; private PlayerBulletDataProvider _currentBullet; - public PlayerInputHandler(IObjectPool bullets, + public PlayerInputHandler(IObjectPool bullets, PlayerData player, IPlayerTouchInputService touchInputService) { _bullets = bullets; + _player = player; _touchInputService = touchInputService; } - ~PlayerInputHandler() => Disable(); - public void Enable() { _touchInputService.OnTouchBegan += InstantiateBullet; _touchInputService.OnTouchEnded += OnTouchEnded; - _touchInputService.OnTouchHold += OnTouchHold; + _touchInputService.OnTouchHold += ConvertPlayerSizeToBullet; } public void Disable() { _touchInputService.OnTouchBegan -= InstantiateBullet; _touchInputService.OnTouchEnded -= OnTouchEnded; - _touchInputService.OnTouchHold -= OnTouchHold; + _touchInputService.OnTouchHold -= ConvertPlayerSizeToBullet; } + ~PlayerInputHandler() => Disable(); + private void InstantiateBullet() => _currentBullet = _bullets.Get(); private void OnTouchEnded() { } // TODO: Shoot the bullet - private void OnTouchHold() { } // TODO: Convert player size to bullet + + private void ConvertPlayerSizeToBullet() => _player.SizeConverter.Convert(_currentBullet.Data, + _currentBullet.Data.Config.CreationSpeed * Time.deltaTime); } } \ No newline at end of file diff --git a/Assets/Scripts/Features/Player/PlayerSizeConverter.cs b/Assets/Scripts/Features/Player/PlayerSizeConverter.cs new file mode 100644 index 0000000..d78c15b --- /dev/null +++ b/Assets/Scripts/Features/Player/PlayerSizeConverter.cs @@ -0,0 +1,21 @@ +using BlockBreaker.Data.Dynamic.Player; +using BlockBreaker.Features.Player.Bullet; + +namespace BlockBreaker.Features.Player +{ + public class PlayerSizeConverter + { + private readonly PlayerData _player; + private readonly PlayerBulletSizeSetter _bulletSizeSetter = new(); + + public PlayerSizeConverter(PlayerData player) => _player = player; + + public void Convert(PlayerBulletData bullet, float sizeAmount) + { + _player.SizeSetter.Set(_player.Size - sizeAmount); + _player.CarpetSizeSetter.Set(_player.Size); + + _bulletSizeSetter.Set(bullet, bullet.Size + sizeAmount); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Features/Player/PlayerSizeConverter.cs.meta b/Assets/Scripts/Features/Player/PlayerSizeConverter.cs.meta new file mode 100644 index 0000000..bea424d --- /dev/null +++ b/Assets/Scripts/Features/Player/PlayerSizeConverter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2ec9c0f2bb29405f8deab13064a6c08f +timeCreated: 1693738298 \ No newline at end of file diff --git a/Assets/Scripts/Infrastructure/DependencyInjection/BindingsInstallers/SceneContext/Player/PlayerBindingsInstaller.cs b/Assets/Scripts/Infrastructure/DependencyInjection/BindingsInstallers/SceneContext/Player/PlayerBindingsInstaller.cs index fcbbdd7..7837927 100644 --- a/Assets/Scripts/Infrastructure/DependencyInjection/BindingsInstallers/SceneContext/Player/PlayerBindingsInstaller.cs +++ b/Assets/Scripts/Infrastructure/DependencyInjection/BindingsInstallers/SceneContext/Player/PlayerBindingsInstaller.cs @@ -87,7 +87,7 @@ private void BindData() .BindInterfacesAndSelfTo() .AsSingle() .WhenInjectedInto(typeof(PlayerDataProvider), typeof(PlayerConfigurator), - typeof(PlayerBulletConfigurator)); + typeof(PlayerBulletConfigurator), typeof(PlayerInputHandler)); } } } \ No newline at end of file