From 020934e07fd54ca4ad71b10357f816bdef871fe2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= Date: Mon, 17 Nov 2025 14:45:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=BD=D0=B8=D1=88=D0=B8=D0=B0=D0=BB=20?= =?UTF-8?q?=D0=BC=D0=BE=D0=B1=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Code/App/AppStates/GameplayState.cs | 9 +- .../Assets/Code/App/BootstrapInstaller.cs | 1 + .../StateMachine/AppStateMachineContext.cs | 1 + .../Controller/CustomCharacterController.cs | 25 + .../Assets/Code/Gameplay/Enemies.meta | 3 + .../Assets/Code/Gameplay/Enemies/BaseEnemy.cs | 138 +++ .../Code/Gameplay/Enemies/BaseEnemy.cs.meta | 3 + .../Assets/Code/Gameplay/Enemies/Cockroach.cs | 0 .../Code/Gameplay/Enemies/Cockroach.cs.meta | 3 + .../Code/Gameplay/Enemies/DrunkenGrandpa.cs | 32 + .../Gameplay/Enemies/DrunkenGrandpa.cs.meta | 3 + .../Assets/Code/Gameplay/Enemies/FogEnemy.cs | 42 + .../Code/Gameplay/Enemies/FogEnemy.cs.meta | 3 + .../Code/Gameplay/Player/IPlayerProvider.cs | 11 + .../Gameplay/Player/IPlayerProvider.cs.meta | 3 + .../Code/Gameplay/Player/PlayerFactory.cs | 15 +- .../Code/Gameplay/Player/PlayerProvider.cs | 26 + .../Gameplay/Player/PlayerProvider.cs.meta | 3 + .../Player/CharacterControllerFullMono.prefab | 2 +- .../Assets/Resources/Scenes/Gameplay.meta | 8 + .../Assets/Resources/Scenes/Gameplay.unity | 304 +++++- .../Scenes/Gameplay/NavMesh-Platform.asset | Bin 0 -> 7236 bytes .../Gameplay/NavMesh-Platform.asset.meta | 8 + .../Assets/Resources/Scenes/MovementDev.unity | 131 +++ .../Resources/UI/Fonts/SOUTHGHETTO SDF.asset | 172 +--- .../UI/Fonts/VCR_OSD_MONO_1.001 SDF.asset | 875 +----------------- .../Prefabs/Player/CharacterController.prefab | 2 +- .../LiberationSans SDF - Fallback.asset | 280 +----- 28 files changed, 793 insertions(+), 1310 deletions(-) create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs.meta create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs create mode 100644 Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs.meta create mode 100644 Game/CourierOld/Assets/Resources/Scenes/Gameplay.meta create mode 100644 Game/CourierOld/Assets/Resources/Scenes/Gameplay/NavMesh-Platform.asset create mode 100644 Game/CourierOld/Assets/Resources/Scenes/Gameplay/NavMesh-Platform.asset.meta diff --git a/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs b/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs index 60a2231..9ac4ac2 100644 --- a/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs +++ b/Game/CourierOld/Assets/Code/App/AppStates/GameplayState.cs @@ -37,9 +37,9 @@ namespace Code.App.AppStates Context.UIService.LoadingScreen.Show(); _playerMoney = Context.PlayerFactory.CreatePlayerMoney(); - _playerHealth = Context.PlayerFactory.CreatePlayerHealth(); - - _playerHealth.OnDeath += EndGame; + + //_playerHealth = Context.PlayerProvider.Health; + //_playerHealth.OnDeath += EndGame; Context.AudioService.TransitToSnapshot(AudioSnapshotState.Peaceful); @@ -69,6 +69,9 @@ namespace Code.App.AppStates WaitForPlayerCharacterLoad() ); + _playerHealth = Context.PlayerProvider.Health; + _playerHealth.OnDeath += EndGame; + Context.AudioService.PlayRandomMusicUntilHumanityWillBeDestroyedForTheySins(MusicType.Peaceful); Context.AudioService.PlayRandomMusicUntilHumanityWillBeDestroyedForTheySins(MusicType.Action); diff --git a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs index ea4aaaf..f4faa55 100644 --- a/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs +++ b/Game/CourierOld/Assets/Code/App/BootstrapInstaller.cs @@ -27,6 +27,7 @@ namespace Code.App containerBuilder.AddSingleton(typeof(InputService), typeof(IInputService)); containerBuilder.AddSingleton(typeof(PlayerFactory), typeof(IPlayerFactory)); + containerBuilder.AddSingleton(typeof(PlayerProvider), typeof(IPlayerProvider)); InitializeCamera(containerBuilder, staticDataService); containerBuilder.AddSingleton(typeof(UIFactory), typeof(IUIFactory)); diff --git a/Game/CourierOld/Assets/Code/App/StateMachine/AppStateMachineContext.cs b/Game/CourierOld/Assets/Code/App/StateMachine/AppStateMachineContext.cs index 4bbbf95..4ce5563 100644 --- a/Game/CourierOld/Assets/Code/App/StateMachine/AppStateMachineContext.cs +++ b/Game/CourierOld/Assets/Code/App/StateMachine/AppStateMachineContext.cs @@ -16,6 +16,7 @@ namespace Code.App.StateMachine [Inject] public CameraStateMachine CameraStateMachine { get; private set; } [Inject] public IUIService UIService { get; private set; } [Inject] public IPlayerFactory PlayerFactory { get; private set; } + [Inject] public IPlayerProvider PlayerProvider { get; private set; } [Inject] public IAudioFactory AudioFactory { get; private set; } [Inject] public IAudioService AudioService { get; private set; } } diff --git a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs index 5d47b41..069a8f9 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Character/Controller/CustomCharacterController.cs @@ -33,6 +33,11 @@ namespace Code.Gameplay.Character.Controller private GroundMovementSystem _groundMovement; private AirMovementSystem _airMovement; + public bool IsSliding => _slideMechanic.IsSliding; + + private float abilityBlockTimer; + private bool isAbilitiesBlocked; + public void SetPosition(Vector3 position) => motor.SetPosition(position); public void SetRotation(Quaternion rotation) => motor.SetRotation(rotation); @@ -135,6 +140,20 @@ namespace Code.Gameplay.Character.Controller // Сохраняем текущий режим камеры _currentCameraMode = inputs.CameraMode; + + if (isAbilitiesBlocked) + { + abilityBlockTimer -= Time.deltaTime; + if (abilityBlockTimer <= 0) + { + isAbilitiesBlocked = false; + } + else + { + inputs.SprintPressed = false; + inputs.SlidePressed = false; + } + } // Обработка слайда _slideMechanic.RequestSlide(inputs.SlidePressed); @@ -221,6 +240,12 @@ namespace Code.Gameplay.Character.Controller _groundMovement.CancelJumpRequest(); } } + + public void BlockAbilities(float duration) + { + isAbilitiesBlocked = true; + abilityBlockTimer = duration; + } // Метод вызывается перед обновлением персонажа (можно использовать для подготовки) public void BeforeCharacterUpdate(float deltaTime) diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies.meta b/Game/CourierOld/Assets/Code/Gameplay/Enemies.meta new file mode 100644 index 0000000..c01ceb9 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3b36108558824d748620db29707cd2b1 +timeCreated: 1763228467 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs b/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs new file mode 100644 index 0000000..cb10e37 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs @@ -0,0 +1,138 @@ +using UnityEngine; +using UnityEngine.AI; +using Code.Gameplay.Player; +using Code.Gameplay.Character.Controller; +using Code.Gameplay.Character.Core; +using Reflex.Attributes; +using Reflex.Core; +using Reflex.Injectors; + +namespace Code.Gameplay.Enemies +{ + public abstract class BaseEnemy : MonoBehaviour + { + [Header("Base enemy configs")] + public int collisionDamage = 1; + public int attackDamage = 3; + + public float detectionRange = 10f; + public float attackRange = 5f; + + public float speed = 3f; + + public float stunDuration = 3f; + public float attackCooldown = 1.5f; + + [SerializeField] protected NavMeshAgent agent; + [SerializeField] protected Collider enemyCollider; + + [Inject] private IPlayerProvider _playerProvider; + + protected CharacterProvider Player => _playerProvider?.Character; + protected PlayerHealth PlayerHealth => _playerProvider?.Health; + protected CustomCharacterController PlayerController => Player?.CustomCharacterController; + + protected bool IsStunned; + protected float CurrentStunTimer; + + protected bool CanAttack = true; + protected float AttackCooldownTimer; + + protected virtual void Awake() + { + if (_playerProvider == null) + { + AttributeInjector.Inject(this, Container.ProjectContainer); + } + } + + protected virtual void Update() + { + if (!Player) return; + + HandleStun(); + HandleAttackCooldown(); + if (IsStunned) return; + + HandleMovement(); + HandleAttack(); + } + + protected virtual void HandleMovement() + { + if (!Player || !agent) return; + + var distanceToPlayer = Vector3.Distance(transform.position, Player.transform.position); + + if (distanceToPlayer <= detectionRange) + { + agent.isStopped = false; + agent.SetDestination(Player.transform.position); + } + else + { + agent.isStopped = true; + } + } + + protected virtual void HandleAttack() { } + + protected virtual void HandleStun() + { + if (!IsStunned) return; + + CurrentStunTimer -= Time.deltaTime; + + if (!(CurrentStunTimer <= 0)) return; + + IsStunned = false; + agent.isStopped = false; + enemyCollider.enabled = true; + } + + protected virtual void ApplyStun() + { + IsStunned = true; + CurrentStunTimer = stunDuration; + agent.isStopped = true; + enemyCollider.enabled = false; + } + + protected virtual void HandleAttackCooldown() + { + if (!CanAttack) + { + AttackCooldownTimer -= Time.deltaTime; + if (AttackCooldownTimer <= 0) + { + CanAttack = true; + } + } + } + + protected virtual void DealDamage() + { + if (!CanAttack || PlayerHealth == null) return; + + PlayerHealth.GetDamage(collisionDamage); + ApplyEffectsToPlayer(); + + CanAttack = false; + AttackCooldownTimer = attackCooldown; + } + + protected virtual void ApplyEffectsToPlayer() + { + PlayerController.BlockAbilities(3f); + } + + private void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, detectionRange); + + Gizmos.color = new Color(0.3f, 0.3f, 0.8f, 0.4f); + Gizmos.DrawSphere(transform.position, attackRange); + } + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs.meta new file mode 100644 index 0000000..5bcb1cc --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/BaseEnemy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 691006ba0f69448787db8f350ecf32f4 +timeCreated: 1763228480 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs b/Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs new file mode 100644 index 0000000..e69de29 diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs.meta new file mode 100644 index 0000000..bd5533b --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/Cockroach.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 119c0b675c944ed7ada6cdc8db4b04aa +timeCreated: 1763228933 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs b/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs new file mode 100644 index 0000000..c84671f --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs @@ -0,0 +1,32 @@ +using UnityEngine; +using UnityEngine.AI; + +namespace Code.Gameplay.Enemies +{ + public class DrunkenGrandpa : BaseEnemy + { + protected override void Awake() + { + base.Awake(); + + if (agent == null) return; + + var walkableArea = NavMesh.GetAreaFromName("Walkable"); + agent.areaMask = 1 << walkableArea; + } + + protected override void HandleAttack() + { + if (!Player) return; + + var distance = Vector3.Distance(transform.position, Player.transform.position); + + if (!(distance <= attackRange)) return; + + if (Player.CustomCharacterController.IsSliding) + ApplyStun(); + else + DealDamage(); + } + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs.meta new file mode 100644 index 0000000..3f03029 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/DrunkenGrandpa.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5e77164596e249bca15e09cdfc9ddac2 +timeCreated: 1763228910 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs b/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs new file mode 100644 index 0000000..83b57a3 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +namespace Code.Gameplay.Enemies +{ + public class FogEnemy : BaseEnemy + { + protected override void Awake() + { + base.Awake(); + + if (agent == null) return; + agent.enabled = false; + Destroy(agent); + } + + protected override void HandleMovement() + { + if (!Player) return; + + var direction = (Player.transform.position - transform.position).normalized; + transform.position += direction * (speed * Time.deltaTime); + } + + protected override void HandleAttack() + { + if (!Player || PlayerHealth == null) return; + + var distance = Vector3.Distance(transform.position, Player.transform.position); + + if (!(distance < attackRange)) return; + + PlayerHealth.GetDamage(PlayerHealth.MaxHealthPoints); + base.ApplyEffectsToPlayer(); + } + + private void OnDrawGizmosSelected() + { + Gizmos.color = new Color(0.3f, 0.3f, 0.8f, 0.4f); + Gizmos.DrawSphere(transform.position, attackRange); + } + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs.meta new file mode 100644 index 0000000..e62a2ab --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Enemies/FogEnemy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4c70370426e4457aa9a56c77689158ff +timeCreated: 1763228955 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs b/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs new file mode 100644 index 0000000..e3783f3 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs @@ -0,0 +1,11 @@ +using Code.Gameplay.Character.Core; + +namespace Code.Gameplay.Player +{ + public interface IPlayerProvider + { + CharacterProvider Character { get; } + PlayerHealth Health { get; } + bool IsSpawned { get; } + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs.meta new file mode 100644 index 0000000..772fdfb --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Player/IPlayerProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8fdfaa773e8645d5a2d400c0317b9894 +timeCreated: 1763237368 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerFactory.cs b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerFactory.cs index ce326e4..eee8b55 100644 --- a/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerFactory.cs +++ b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerFactory.cs @@ -14,6 +14,7 @@ namespace Code.Gameplay.Player public class PlayerFactory : IPlayerFactory { [Inject] PlayerConfig _playerConfig; + [Inject] private IPlayerProvider _playerProvider; public PlayerHealth CreatePlayerHealth(int count = -1) { @@ -25,14 +26,20 @@ namespace Code.Gameplay.Player public async UniTask CreatePlayer() { - CharacterProvider characterProvider = (await Addressables.InstantiateAsync(_playerConfig.characterPrefab).ToUniTask()).GetComponent(); - AttributeInjector.Inject(characterProvider, Container.ProjectContainer); - AttributeInjector.Inject(characterProvider.CustomCharacterController, Container.ProjectContainer); - return characterProvider; + var go = await Addressables.InstantiateAsync(_playerConfig.characterPrefab).ToUniTask(); + var provider = go.GetComponent(); + + 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); } } diff --git a/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs new file mode 100644 index 0000000..f2db52d --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs @@ -0,0 +1,26 @@ +using Code.Configs; +using Code.Gameplay.Character.Core; + +namespace Code.Gameplay.Player +{ + public class PlayerProvider : IPlayerProvider + { + public CharacterProvider Character { get; private set; } + + public PlayerHealth Health { get; private set; } + + public bool IsSpawned => Character != null; + + internal void SetPlayer(CharacterProvider character, PlayerConfig config) + { + Character = character; + Health = new PlayerHealth(config.maxHealth); + } + + internal void ClearPlayer() + { + Character = null; + Health = null; + } + } +} \ No newline at end of file diff --git a/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs.meta b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs.meta new file mode 100644 index 0000000..631ca80 --- /dev/null +++ b/Game/CourierOld/Assets/Code/Gameplay/Player/PlayerProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0dbe29c5f0e9431db8c8da25eeb8fa95 +timeCreated: 1763237388 \ No newline at end of file diff --git a/Game/CourierOld/Assets/Resources/Prefabs/Player/CharacterControllerFullMono.prefab b/Game/CourierOld/Assets/Resources/Prefabs/Player/CharacterControllerFullMono.prefab index 1b30345..302b9b0 100644 --- a/Game/CourierOld/Assets/Resources/Prefabs/Player/CharacterControllerFullMono.prefab +++ b/Game/CourierOld/Assets/Resources/Prefabs/Player/CharacterControllerFullMono.prefab @@ -257,7 +257,7 @@ GameObject: - component: {fileID: 1150185452844372375} m_Layer: 0 m_Name: CharacterControllerFullMono - m_TagString: Untagged + m_TagString: Player m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 diff --git a/Game/CourierOld/Assets/Resources/Scenes/Gameplay.meta b/Game/CourierOld/Assets/Resources/Scenes/Gameplay.meta new file mode 100644 index 0000000..096829f --- /dev/null +++ b/Game/CourierOld/Assets/Resources/Scenes/Gameplay.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e3b9428d285e53a4a265495e70bd230 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game/CourierOld/Assets/Resources/Scenes/Gameplay.unity b/Game/CourierOld/Assets/Resources/Scenes/Gameplay.unity index bdec33e..80b9853 100644 --- a/Game/CourierOld/Assets/Resources/Scenes/Gameplay.unity +++ b/Game/CourierOld/Assets/Resources/Scenes/Gameplay.unity @@ -119,6 +119,117 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &471754158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 471754163} + - component: {fileID: 471754162} + - component: {fileID: 471754161} + - component: {fileID: 471754159} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!114 &471754159 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471754158} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4c70370426e4457aa9a56c77689158ff, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Gameplay.Enemies.FogEnemy + collisionDamage: 1 + attackDamage: 3 + detectionRange: 0 + attackRange: 5 + speed: 3 + stunDuration: 0 + attackCooldown: 1.5 + agent: {fileID: 0} + enemyCollider: {fileID: 0} +--- !u!23 &471754161 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471754158} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &471754162 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471754158} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &471754163 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 471754158} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 13.28, y: 0.28, z: 2.59241} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &545729161 GameObject: m_ObjectHideFlags: 0 @@ -131,12 +242,13 @@ GameObject: - component: {fileID: 545729164} - component: {fileID: 545729163} - component: {fileID: 545729162} + - component: {fileID: 545729166} m_Layer: 0 m_Name: Platform m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 2147483647 m_IsActive: 1 --- !u!65 &545729162 BoxCollider: @@ -230,6 +342,38 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &545729166 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545729161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a5ac11cc976e418e8d13136b07e1f52, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.AI.Navigation::Unity.AI.Navigation.NavMeshSurface + m_SerializedVersion: 0 + m_AgentTypeID: 0 + m_CollectObjects: 0 + m_Size: {x: 10, y: 10, z: 10} + m_Center: {x: 0, y: 2, z: 0} + m_LayerMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_UseGeometry: 0 + m_DefaultArea: 0 + m_GenerateLinks: 0 + m_IgnoreNavMeshAgent: 1 + m_IgnoreNavMeshObstacle: 1 + m_OverrideTileSize: 0 + m_TileSize: 256 + m_OverrideVoxelSize: 0 + m_VoxelSize: 0.16666667 + m_MinRegionArea: 2 + m_NavMeshData: {fileID: 23800000, guid: 1238ac2c7273e4b2680e254879b67031, type: 2} + m_BuildHeightMesh: 0 --- !u!1 &1253837927 GameObject: m_ObjectHideFlags: 0 @@ -352,6 +496,162 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1719040498 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1719040504} + - component: {fileID: 1719040503} + - component: {fileID: 1719040502} + - component: {fileID: 1719040501} + - component: {fileID: 1719040500} + - component: {fileID: 1719040499} + m_Layer: 0 + m_Name: Grandpa + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!195 &1719040499 +NavMeshAgent: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + m_Enabled: 1 + m_AgentTypeID: 0 + m_Radius: 0.5 + m_Speed: 3.5 + m_Acceleration: 8 + avoidancePriority: 50 + m_AngularSpeed: 120 + m_StoppingDistance: 0 + m_AutoTraverseOffMeshLink: 1 + m_AutoBraking: 1 + m_AutoRepath: 1 + m_Height: 1 + m_BaseOffset: 0.5 + m_WalkableMask: 4294967295 + m_ObstacleAvoidanceType: 4 +--- !u!114 &1719040500 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5e77164596e249bca15e09cdfc9ddac2, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Gameplay.Enemies.DrunkenGrandpa + collisionDamage: 1 + attackDamage: 3 + detectionRange: 10 + attackRange: 1.2 + speed: 3 + stunDuration: 3 + attackCooldown: 1.5 + agent: {fileID: 1719040499} + enemyCollider: {fileID: 1719040501} +--- !u!65 &1719040501 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1719040502 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_ForceMeshLod: -1 + m_MeshLodSelectionBias: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_GlobalIlluminationMeshLod: 0 + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1719040503 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1719040504 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1719040498} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0.5, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 @@ -360,3 +660,5 @@ SceneRoots: - {fileID: 545729165} - {fileID: 1420420439} - {fileID: 1645301970} + - {fileID: 471754163} + - {fileID: 1719040504} diff --git a/Game/CourierOld/Assets/Resources/Scenes/Gameplay/NavMesh-Platform.asset b/Game/CourierOld/Assets/Resources/Scenes/Gameplay/NavMesh-Platform.asset new file mode 100644 index 0000000000000000000000000000000000000000..b07402401f15f2561a8c7a90e94d8ca7314ad71e GIT binary patch literal 7236 zcmbuDeT<}>sA&F}Y{nVmZ!YU#tZnppS~RbM=yz6<|q*vg)sp5^J~tEST8zjJeQ zi3GqKgmZI0d-IjIPn~(|?#`F`U!FYIaplwKeW^`|dBjMoga|QZPBubW$|4~W;>T?w z{AEIfN%T-8vq|KapfQ*fA-|Lt<@3Z}Ap7I!=X|IH4^gU=z>MXPe?6KPAuAoBf+#7! z7hgxqZF3>uZ+A$eFE&@6v`j3>l_c_Q?*e6Hbq>wjNtesulskMV>Uf_=}yX!`eJ z@{n3o!uk>^_=lOCK1}pA@;2$eMUX+?TuLrIW#+euJ23Z)$XxdaVmu-Kh`H<0Px&9j zw<|=UQ?vd~^mm;yl)9q&yU6QU^3S17{gnS9@~}Q2A(B%6PIQr97US&^`xlV+q0lKI zIwJO8j{d0r4)HzMXYA)WiSnd)0I~JaPumv8c)Ogx7yb0#M=X55=2uwwgPLDy;YT!I zWZ~b{e6fW;qxnZI{O6iqW#K0@zuLlI(7fBif3Nw+Ec{i?dCsH$SN_EvApLudg}<)( zCoKG*nlG{NcQpT`g?AvhjPJEgybZmb085b9fL({&8KTh1+%K!adHz0y%zb1M`7!MM zAI0-5lfXa)0K*xqsJM__XGI7GBXjYvI1;{T9Ak^K}-!PxAo_zen>y3*WE# zEf#*i=C@k-LCuFO{1MIhI~w)B^6z2IH(2=Nn%`#OPicO;g&)5_b2Ozk?j*>=of#(9gHiM2xpf|IC5YKa-Moqg09Vk72&? zPY&IkqFYm?pWOJzwQ%E~sTf!KFKScz^D!RP&v)wi^cO7L=!c)0=BxO0K|lBBG0+ON3r|CcP> z*zd)-(vQFKWc<}Tyc?rbYStg1`+WMV7H;(Kit+jKeoI3?cj|7*QRu|;$@f98=CkOJ z`cK_oE5RARJ>;RDj8F6Z#lIt>@r&MH`^f9lF~3a=Lbi$Dmt#CB<98><@cev5@@|wW z@qTWM-&fHc^`GJ^8L0CJOOsUh2N|BH)5Q#MEEE;@3#loYDj$l^ZqyY+czca zu8m-P8{>1(!i|3(v~c5}hhkjmH}~7aF&@?bh=m*dhb-La|5l7A#96#Aj=?|l`=c?g z{ysAI`(X<=`X94!qyLD7{}lSUKfWE~SRdkZ9GvIp@feS;?>iQ5*7t;koAo^z;|Y1c zoY3ogO7eQK$=S8h^>+?9fg^^818?FfyrBHO&51=ya1UpfY z2jDBHHy)`XlO{;rSY1Y()f_$?-Ubz0@uH*XS=SXOeJk98B^&s zl@+G4(o|NN$_=J+qp76oqHD5KHQ}k6^i)lJ3i9>3`>TawZp00OLOJi(ZHsn0dAA&l z?wO%;WPOX1D^z_|A94%%oq?*46e}~Xs;(;*N)w{!=JM`+kH;*7>J=YN>r(AW4>)c{-q_Ec&lcu8j>2=v3n92lAQ1a<|%%9y*nb=nG zrd`h$GoI_a-Y!>0YjZX53puyHQZ46dp_8@_xD(ZU%?~-YxFL#;^oo*Ra%Ox{tIBBm zRd33fbVnvjGiYbf&Y+#ih(O7a z!VCVEO5g-;4lAkKhdozs=q)$qdO=|lWLE4Edog@{IVantacyg9d>vxwdSG(P2dHeS zP)lHFj#6~CZ|WgE61548ND5T~x=ziR3!$6M+DOuSh2 z!B{q2bb_ghSEATgk;k%|2FUq1VM0}|gxoBIKa9*{Ti2Y%=j7PdBm9a?=5QasLY(S* z?%DL|v8|W${{u2L*AwE&GA&dDxQdKmhohtvh5Js zrY?kuA^Ylej;Y5}gdHI{6LnrlJcW!W|9pw37rWm5`;K2s|L5iF^GmM2X7<;Ob~cVS zy7*->cB+;*$*+lLD?97)Jd~~1)oc^zh@C(kVKT($g6w2Gg