From afcd8761e6205e607d51afdb52643fcce34c7477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C5=A1a=20Ceviel?= Date: Mon, 23 Feb 2026 20:16:07 +0300 Subject: [PATCH] initial weapons --- .../Character/Core/CharacterProvider.cs | 105 +- Assets/Code/Gameplay/Character/Inventory.meta | 3 + .../Character/Inventory/WeaponInventory.cs | 103 + .../Inventory/WeaponInventory.cs.meta | 3 + Assets/Code/Gameplay/Character/Stats.meta | 3 + .../Gameplay/Character/Stats/HealthSystem.cs | 53 + .../Character/Stats/HealthSystem.cs.meta | 3 + Assets/Code/Gameplay/Core.meta | 3 + Assets/Code/Gameplay/Core/IDamageable.cs | 11 + Assets/Code/Gameplay/Core/IDamageable.cs.meta | 3 + Assets/Code/Gameplay/Enemy.meta | 3 + Assets/Code/Gameplay/Enemy/SimpleEnemy.cs | 145 + .../Code/Gameplay/Enemy/SimpleEnemy.cs.meta | 3 + Assets/Code/Gameplay/Weapons.meta | 3 + Assets/Code/Gameplay/Weapons/AssaultRifle.cs | 13 + .../Gameplay/Weapons/AssaultRifle.cs.meta | 3 + Assets/Code/Gameplay/Weapons/Bullet.cs | 76 + Assets/Code/Gameplay/Weapons/Bullet.cs.meta | 3 + Assets/Code/Gameplay/Weapons/FireMode.cs | 9 + Assets/Code/Gameplay/Weapons/FireMode.cs.meta | 3 + Assets/Code/Gameplay/Weapons/Pistol.cs | 12 + Assets/Code/Gameplay/Weapons/Pistol.cs.meta | 3 + Assets/Code/Gameplay/Weapons/Rifle.cs | 13 + Assets/Code/Gameplay/Weapons/Rifle.cs.meta | 3 + Assets/Code/Gameplay/Weapons/WeaponBase.cs | 177 ++ .../Code/Gameplay/Weapons/WeaponBase.cs.meta | 3 + Assets/Code/Gameplay/Weapons/WeaponType.cs | 9 + .../Code/Gameplay/Weapons/WeaponType.cs.meta | 3 + Assets/Code/Input/IInputService.cs | 1 + Assets/Resources/Materials/Weapons.meta | 8 + Assets/Resources/Materials/Weapons/Glock.meta | 8 + .../Materials/Weapons/Glock/Barrel.mat | 137 + .../Materials/Weapons/Glock/Barrel.mat.meta | 8 + .../Materials/Weapons/Glock/textures.meta | 8 + .../Weapons/Glock/textures/Barrel1_diff.png | 3 + .../Glock/textures/Barrel1_diff.png.meta | 117 + .../Weapons/Glock/textures/Bullets1_diff.png | 3 + .../Glock/textures/Bullets1_diff.png.meta | 117 + .../Weapons/Glock/textures/Bullets1_nmap.png | 3 + .../Glock/textures/Bullets1_nmap.png.meta | 117 + .../Weapons/Glock/textures/Bullets1_spec.png | 3 + .../Glock/textures/Bullets1_spec.png.meta | 117 + .../Weapons/Glock/textures/Magazine1_nmap.png | 3 + .../Glock/textures/Magazine1_nmap.png.meta | 117 + .../Weapons/Glock/textures/Magazine1_spec.png | 3 + .../Glock/textures/Magazine1_spec.png.meta | 117 + Assets/Resources/Meshes/ak47.glb | Bin 0 -> 290500 bytes Assets/Resources/Meshes/ak47.glb.meta | 28 + Assets/Resources/Meshes/glock.obj | 3 + Assets/Resources/Meshes/glock.obj.meta | 110 + Assets/Resources/Meshes/m16a4.glb | Bin 0 -> 2074840 bytes Assets/Resources/Meshes/m16a4.glb.meta | 32 + Assets/Resources/Prefabs.meta | 8 + Assets/Resources/Prefabs/AK47.prefab | 1289 +++++++++ Assets/Resources/Prefabs/AK47.prefab.meta | 7 + Assets/Resources/Prefabs/Bullet.prefab | 133 + Assets/Resources/Prefabs/Bullet.prefab.meta | 7 + Assets/Resources/Prefabs/M16A4.prefab | 2322 +++++++++++++++++ Assets/Resources/Prefabs/M16A4.prefab.meta | 7 + Assets/Resources/Prefabs/Pistol.prefab | 550 ++++ Assets/Resources/Prefabs/Pistol.prefab.meta | 7 + Assets/Resources/Scenes/Gameplay.unity | 216 +- Packages/manifest.json | 1 + Packages/packages-lock.json | 23 +- ProjectSettings/ProjectSettings.asset | 2 +- ProjectSettings/TagManager.asset | 28 +- 66 files changed, 6388 insertions(+), 49 deletions(-) create mode 100644 Assets/Code/Gameplay/Character/Inventory.meta create mode 100644 Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs create mode 100644 Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs.meta create mode 100644 Assets/Code/Gameplay/Character/Stats.meta create mode 100644 Assets/Code/Gameplay/Character/Stats/HealthSystem.cs create mode 100644 Assets/Code/Gameplay/Character/Stats/HealthSystem.cs.meta create mode 100644 Assets/Code/Gameplay/Core.meta create mode 100644 Assets/Code/Gameplay/Core/IDamageable.cs create mode 100644 Assets/Code/Gameplay/Core/IDamageable.cs.meta create mode 100644 Assets/Code/Gameplay/Enemy.meta create mode 100644 Assets/Code/Gameplay/Enemy/SimpleEnemy.cs create mode 100644 Assets/Code/Gameplay/Enemy/SimpleEnemy.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons.meta create mode 100644 Assets/Code/Gameplay/Weapons/AssaultRifle.cs create mode 100644 Assets/Code/Gameplay/Weapons/AssaultRifle.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/Bullet.cs create mode 100644 Assets/Code/Gameplay/Weapons/Bullet.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/FireMode.cs create mode 100644 Assets/Code/Gameplay/Weapons/FireMode.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/Pistol.cs create mode 100644 Assets/Code/Gameplay/Weapons/Pistol.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/Rifle.cs create mode 100644 Assets/Code/Gameplay/Weapons/Rifle.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/WeaponBase.cs create mode 100644 Assets/Code/Gameplay/Weapons/WeaponBase.cs.meta create mode 100644 Assets/Code/Gameplay/Weapons/WeaponType.cs create mode 100644 Assets/Code/Gameplay/Weapons/WeaponType.cs.meta create mode 100644 Assets/Resources/Materials/Weapons.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/Barrel.mat create mode 100644 Assets/Resources/Materials/Weapons/Glock/Barrel.mat.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png.meta create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png create mode 100644 Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png.meta create mode 100644 Assets/Resources/Meshes/ak47.glb create mode 100644 Assets/Resources/Meshes/ak47.glb.meta create mode 100644 Assets/Resources/Meshes/glock.obj create mode 100644 Assets/Resources/Meshes/glock.obj.meta create mode 100644 Assets/Resources/Meshes/m16a4.glb create mode 100644 Assets/Resources/Meshes/m16a4.glb.meta create mode 100644 Assets/Resources/Prefabs.meta create mode 100644 Assets/Resources/Prefabs/AK47.prefab create mode 100644 Assets/Resources/Prefabs/AK47.prefab.meta create mode 100644 Assets/Resources/Prefabs/Bullet.prefab create mode 100644 Assets/Resources/Prefabs/Bullet.prefab.meta create mode 100644 Assets/Resources/Prefabs/M16A4.prefab create mode 100644 Assets/Resources/Prefabs/M16A4.prefab.meta create mode 100644 Assets/Resources/Prefabs/Pistol.prefab create mode 100644 Assets/Resources/Prefabs/Pistol.prefab.meta diff --git a/Assets/Code/Gameplay/Character/Core/CharacterProvider.cs b/Assets/Code/Gameplay/Character/Core/CharacterProvider.cs index 8b60eb5..dc07260 100644 --- a/Assets/Code/Gameplay/Character/Core/CharacterProvider.cs +++ b/Assets/Code/Gameplay/Character/Core/CharacterProvider.cs @@ -1,6 +1,8 @@ using Code.DI; using Code.Gameplay.Camera; using Code.Gameplay.Character.Controller; +using Code.Gameplay.Character.Inventory; +using Code.Gameplay.Character.Stats; using Code.Input; using UnityEngine; @@ -9,25 +11,64 @@ namespace Code.Gameplay.Character.Core public class CharacterProvider : MonoBehaviour { [SerializeField] private CustomCharacterController customCharacterController; - public CustomCharacterController CustomCharacterController => customCharacterController; - [SerializeField] private Transform cameraFollowPoint; - public Transform GetFollowTransform() => cameraFollowPoint; + [SerializeField] private HealthSystem healthSystem; + [SerializeField] private WeaponInventory weaponInventory; private IInputService _inputService; + private CameraController _cameraController; + + public CustomCharacterController CustomCharacterController => customCharacterController; + public HealthSystem HealthSystem => healthSystem; + public WeaponInventory WeaponInventory => weaponInventory; + public Transform GetFollowTransform() => cameraFollowPoint; private void Start() { - _inputService = FindFirstObjectByType().Resolve(); + _inputService = FindFirstObjectByType()?.Resolve(); + _cameraController = FindFirstObjectByType(); + + if (_inputService == null) + { + Debug.LogError("IInputService not found!"); + } + + if (_cameraController == null) + { + Debug.LogError("CameraController not found!"); + } + + if (healthSystem != null) + { + healthSystem.OnDied += HandleDeath; + } + } + + private void HandleDeath() + { + enabled = false; + if (customCharacterController != null) + { + customCharacterController.enabled = false; + } + + Debug.Log("Character died!"); } public void Teleport(Vector3 position, Quaternion rotation) { - customCharacterController.SetPosition(position); - customCharacterController.SetRotation(rotation); + if (customCharacterController != null) + { + customCharacterController.SetPosition(position); + customCharacterController.SetRotation(rotation); + } } + private void HandleCharacterInput() { + if (_inputService == null || _cameraController == null || customCharacterController == null) + return; + var inputs = new CharacterInputs(); var moveInput = _inputService.MoveInput; inputs.MoveAxisForward = moveInput.y; @@ -35,15 +76,63 @@ namespace Code.Gameplay.Character.Core inputs.SprintPressed = _inputService.SprintHeld; inputs.JumpPressed = _inputService.JumpPressed; - inputs.CameraRotation = FindFirstObjectByType().GetCameraRotation(); - inputs.CameraPlanarDirection = FindFirstObjectByType().GetPlanarDirection(); + inputs.CameraRotation = _cameraController.GetCameraRotation(); + inputs.CameraPlanarDirection = _cameraController.GetPlanarDirection(); customCharacterController.SetInputs(ref inputs); + + HandleWeaponInput(); + } + + private void HandleWeaponInput() + { + if (weaponInventory == null) return; + + if (_inputService.AttackPressed) + { + weaponInventory.ShootCurrentWeapon(); + } + else + { + weaponInventory.StopShootingCurrentWeapon(); + } + + var scroll = UnityEngine.Input.GetAxis("Mouse ScrollWheel"); + switch (scroll) + { + case > 0f: + weaponInventory.NextWeapon(); + break; + case < 0f: + weaponInventory.PreviousWeapon(); + break; + } + + if (UnityEngine.Input.GetKeyDown(KeyCode.R)) + { + weaponInventory.ReloadCurrentWeapon(); + } + + for (var i = 0; i < 9; i++) + { + if (UnityEngine.Input.GetKeyDown(KeyCode.Alpha1 + i)) + { + weaponInventory.SwitchWeapon(i); + } + } } private void Update() { HandleCharacterInput(); } + + private void OnDestroy() + { + if (healthSystem != null) + { + healthSystem.OnDied -= HandleDeath; + } + } } } \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Inventory.meta b/Assets/Code/Gameplay/Character/Inventory.meta new file mode 100644 index 0000000..1c587d1 --- /dev/null +++ b/Assets/Code/Gameplay/Character/Inventory.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 21d89144fc42461e9132c47c9abc8144 +timeCreated: 1771856381 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs b/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs new file mode 100644 index 0000000..ca92abd --- /dev/null +++ b/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs @@ -0,0 +1,103 @@ +using System.Collections.Generic; +using UnityEngine; +using Code.Gameplay.Weapons; +using System; + +namespace Code.Gameplay.Character.Inventory +{ + public class WeaponInventory : MonoBehaviour + { + [SerializeField] private List weapons = new List(); + [SerializeField] private Transform weaponHolder; + + [SerializeField] private int currentWeaponIndex = 0; + + public event Action OnWeaponSwitched; + public event Action OnWeaponsInitialized; + + public WeaponBase CurrentWeapon => weapons.Count > 0 ? weapons[currentWeaponIndex] : null; + public int WeaponCount => weapons.Count; + + private void Start() + { + InitializeWeapons(); + } + + private void InitializeWeapons() + { + for (var i = 0; i < weapons.Count; i++) + { + weapons[i] = Instantiate(weapons[i].gameObject, weaponHolder).GetComponent(); + weapons[i].gameObject.SetActive(false); + } + + if (weapons.Count > 0 && currentWeaponIndex < weapons.Count) + { + weapons[currentWeaponIndex].gameObject.SetActive(true); + OnWeaponSwitched?.Invoke(weapons[currentWeaponIndex]); + } + + OnWeaponsInitialized?.Invoke(); + } + + public void SwitchWeapon(int index) + { + if (index < 0 || index >= weapons.Count) return; + if (index == currentWeaponIndex) return; + + weapons[currentWeaponIndex].gameObject.SetActive(false); + currentWeaponIndex = index; + weapons[currentWeaponIndex].gameObject.SetActive(true); + + OnWeaponSwitched?.Invoke(weapons[currentWeaponIndex]); + } + + public void NextWeapon() + { + int nextIndex = (currentWeaponIndex + 1) % weapons.Count; + SwitchWeapon(nextIndex); + } + + public void PreviousWeapon() + { + int prevIndex = (currentWeaponIndex - 1 + weapons.Count) % weapons.Count; + SwitchWeapon(prevIndex); + } + + public void RemoveWeapon(WeaponBase weapon) + { + if (weapons.Contains(weapon)) + { + int index = weapons.IndexOf(weapon); + weapons.Remove(weapon); + Destroy(weapon.gameObject); + + if (index <= currentWeaponIndex) + { + currentWeaponIndex = Mathf.Max(0, currentWeaponIndex - 1); + } + + if (weapons.Count > 0) + { + weapons[currentWeaponIndex].gameObject.SetActive(true); + OnWeaponSwitched?.Invoke(weapons[currentWeaponIndex]); + } + } + } + + public void ReloadCurrentWeapon() + { + CurrentWeapon?.Reload(); + } + + public void ShootCurrentWeapon() + { + CurrentWeapon?.StartShooting(); + } + + public void StopShootingCurrentWeapon() + { + CurrentWeapon?.StopShooting(); + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs.meta b/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs.meta new file mode 100644 index 0000000..ebfe7c0 --- /dev/null +++ b/Assets/Code/Gameplay/Character/Inventory/WeaponInventory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c24ec1ac73384bd6a84bdff6028a6479 +timeCreated: 1771856390 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Stats.meta b/Assets/Code/Gameplay/Character/Stats.meta new file mode 100644 index 0000000..94a9594 --- /dev/null +++ b/Assets/Code/Gameplay/Character/Stats.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 916b1a7d923b4f95b9215a2c89deca6c +timeCreated: 1771856166 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs b/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs new file mode 100644 index 0000000..7e65e84 --- /dev/null +++ b/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs @@ -0,0 +1,53 @@ +using System; +using UnityEngine; +using Code.Gameplay.Core; + +namespace Code.Gameplay.Character.Stats +{ + public class HealthSystem : MonoBehaviour, IDamageable + { + [SerializeField] private float maxHealth = 100f; + [SerializeField] private float currentHealth; + + public event Action OnHealthChanged; + public event Action OnDied; + + public float CurrentHealth => currentHealth; + public float MaxHealth => maxHealth; + public float HealthPercentage => currentHealth / maxHealth; + public bool IsAlive => currentHealth > 0; + + private void Awake() + { + currentHealth = maxHealth; + } + + public void TakeDamage(float damage) + { + if (!IsAlive) return; + + currentHealth = Mathf.Max(0, currentHealth - damage); + OnHealthChanged?.Invoke(currentHealth, maxHealth); + + if (currentHealth <= 0) + { + Die(); + } + } + + public void Heal(float amount) + { + if (!IsAlive) return; + + currentHealth = Mathf.Min(maxHealth, currentHealth + amount); + OnHealthChanged?.Invoke(currentHealth, maxHealth); + } + + private void Die() + { + OnDied?.Invoke(); + } + + public Transform GetTransform() => transform; + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs.meta b/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs.meta new file mode 100644 index 0000000..b062246 --- /dev/null +++ b/Assets/Code/Gameplay/Character/Stats/HealthSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0d0a69fde097419bb4933773d22d739b +timeCreated: 1771856171 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Core.meta b/Assets/Code/Gameplay/Core.meta new file mode 100644 index 0000000..5af73d7 --- /dev/null +++ b/Assets/Code/Gameplay/Core.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cb192cceba6542cfb1421a4fc918f98e +timeCreated: 1771856099 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Core/IDamageable.cs b/Assets/Code/Gameplay/Core/IDamageable.cs new file mode 100644 index 0000000..21d5285 --- /dev/null +++ b/Assets/Code/Gameplay/Core/IDamageable.cs @@ -0,0 +1,11 @@ +using UnityEngine; + +namespace Code.Gameplay.Core +{ + public interface IDamageable + { + void TakeDamage(float damage); + Transform GetTransform(); + bool IsAlive { get; } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Core/IDamageable.cs.meta b/Assets/Code/Gameplay/Core/IDamageable.cs.meta new file mode 100644 index 0000000..da4f4ed --- /dev/null +++ b/Assets/Code/Gameplay/Core/IDamageable.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 220922d554ae49819144924d31f9ab51 +timeCreated: 1771856130 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Enemy.meta b/Assets/Code/Gameplay/Enemy.meta new file mode 100644 index 0000000..be2ce6c --- /dev/null +++ b/Assets/Code/Gameplay/Enemy.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2842ad672e65490483b34c3eb1c40ba7 +timeCreated: 1771856456 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs b/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs new file mode 100644 index 0000000..a5e77a0 --- /dev/null +++ b/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs @@ -0,0 +1,145 @@ +using Code.Gameplay.Character.Core; +using UnityEngine; +using Code.Gameplay.Core; +using Code.Gameplay.Character.Stats; +using Code.Gameplay.Weapons; + +namespace Code.Gameplay.Enemy +{ + public class SimpleEnemy : MonoBehaviour, IDamageable + { + [SerializeField] private HealthSystem healthSystem; + [SerializeField] private WeaponBase weapon; + [SerializeField] private Transform firePoint; + [SerializeField] private Transform target; + + [SerializeField] private float moveSpeed = 3f; + [SerializeField] private float rotationSpeed = 5f; + [SerializeField] private float detectionRange = 20f; + [SerializeField] private float attackRange = 15f; + [SerializeField] private float stopDistance = 5f; + + [SerializeField] private float attackCooldown = 1f; + [SerializeField] private LayerMask obstacleMask; + + private float lastAttackTime; + private bool isAttacking; + private CharacterController characterController; + + public bool IsAlive => healthSystem != null && healthSystem.IsAlive; + + private void Awake() + { + characterController = GetComponent(); + if (characterController == null) + characterController = gameObject.AddComponent(); + + if (healthSystem == null) + healthSystem = GetComponent(); + } + + private void Start() + { + if (healthSystem != null) + { + healthSystem.OnDied += HandleDeath; + } + + if (target != null) return; + + var player = FindFirstObjectByType(); + if (player != null) + target = player.transform; + } + + private void Update() + { + if (!IsAlive || target == null) return; + + var distanceToTarget = Vector3.Distance(transform.position, target.position); + + if (!(distanceToTarget <= detectionRange)) return; + + RotateTowardsTarget(); + + if (distanceToTarget <= attackRange) + { + Attack(); + + if (distanceToTarget < stopDistance) + { + MoveAway(); + } + } + else + { + MoveTowardsTarget(); + } + } + + private void RotateTowardsTarget() + { + var direction = (target.position - transform.position).normalized; + direction.y = 0; + + var lookRotation = Quaternion.LookRotation(direction); + transform.rotation = Quaternion.Slerp(transform.rotation, lookRotation, Time.deltaTime * rotationSpeed); + } + + private void MoveTowardsTarget() + { + var direction = (target.position - transform.position).normalized; + direction.y = 0; + + characterController.Move(direction * (moveSpeed * Time.deltaTime)); + } + + private void MoveAway() + { + var direction = (transform.position - target.position).normalized; + direction.y = 0; + + characterController.Move(direction * (moveSpeed * Time.deltaTime)); + } + + private void Attack() + { + if (Time.time - lastAttackTime < attackCooldown) return; + if (weapon == null) return; + + if (!HasLineOfSight()) return; + + lastAttackTime = Time.time; + weapon.Shoot(); + } + + private bool HasLineOfSight() + { + if (target == null) return false; + + var direction = (target.position - firePoint.position).normalized; + var distance = Vector3.Distance(firePoint.position, target.position); + + if (Physics.Raycast(firePoint.position, direction, out var hit, distance, obstacleMask)) + { + return hit.collider.transform == target; + } + + return true; + } + + private void HandleDeath() + { + enabled = false; + + Destroy(gameObject, 2f); + } + + public void TakeDamage(float damage) + { + healthSystem?.TakeDamage(damage); + } + + public Transform GetTransform() => transform; + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs.meta b/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs.meta new file mode 100644 index 0000000..c4e4576 --- /dev/null +++ b/Assets/Code/Gameplay/Enemy/SimpleEnemy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: dad72915bd7146e198bcb246c6c11b55 +timeCreated: 1771856464 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons.meta b/Assets/Code/Gameplay/Weapons.meta new file mode 100644 index 0000000..91a3a23 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 57cd3189c7a94a09a1625e1b79f40d65 +timeCreated: 1771856189 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/AssaultRifle.cs b/Assets/Code/Gameplay/Weapons/AssaultRifle.cs new file mode 100644 index 0000000..5ecdd9f --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/AssaultRifle.cs @@ -0,0 +1,13 @@ +namespace Code.Gameplay.Weapons +{ + public class AssaultRifle : WeaponBase + { + + protected override void Awake() + { + base.Awake(); + weaponType = WeaponType.AssaultRifle; + fireMode = FireMode.Automatic; + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/AssaultRifle.cs.meta b/Assets/Code/Gameplay/Weapons/AssaultRifle.cs.meta new file mode 100644 index 0000000..159213c --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/AssaultRifle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f211f8dc45884d2a9b2ff62f3e89da6f +timeCreated: 1771856305 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Bullet.cs b/Assets/Code/Gameplay/Weapons/Bullet.cs new file mode 100644 index 0000000..ee6cae9 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Bullet.cs @@ -0,0 +1,76 @@ +using UnityEngine; +using Code.Gameplay.Core; + +namespace Code.Gameplay.Weapons +{ + public class Bullet : MonoBehaviour + { + [SerializeField] private float lifeTime = 3f; + [SerializeField] private LayerMask hitLayers = -1; + [SerializeField] private GameObject impactEffect; + [SerializeField] private AudioClip impactSound; + + private float _speed; + private float _damage; + private Vector3 _direction; + private bool _isInitialized; + private AudioSource _audioSource; + + public void Initialize(float speed, float damage, Vector3 direction) + { + _speed = speed; + _damage = damage; + _direction = direction.normalized; + _isInitialized = true; + + _audioSource = GetComponent(); + + Destroy(gameObject, lifeTime); + } + + private void Update() + { + if (!_isInitialized) return; + + transform.position += _direction * (_speed * Time.deltaTime); + + transform.rotation = Quaternion.LookRotation(_direction); + + if (Physics.Raycast(transform.position, _direction, out var hit, _speed * Time.deltaTime, hitLayers)) + { + HitTarget(hit); + } + } + + private void HitTarget(RaycastHit hit) + { + var damageable = hit.collider.GetComponentInParent(); + damageable?.TakeDamage(_damage); + + if (impactEffect != null) + { + Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal)); + } + + if (impactSound != null && _audioSource != null) + { + _audioSource.PlayOneShot(impactSound); + } + + Destroy(gameObject); + } + + private void OnTriggerEnter(Collider other) + { + var damageable = other.GetComponentInParent(); + damageable?.TakeDamage(_damage); + + if (impactEffect != null) + { + Instantiate(impactEffect, transform.position, Quaternion.identity); + } + + Destroy(gameObject); + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Bullet.cs.meta b/Assets/Code/Gameplay/Weapons/Bullet.cs.meta new file mode 100644 index 0000000..e4a610b --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Bullet.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1cacd4ec13d3416db0148f5758966f0a +timeCreated: 1771856241 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/FireMode.cs b/Assets/Code/Gameplay/Weapons/FireMode.cs new file mode 100644 index 0000000..65b7b45 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/FireMode.cs @@ -0,0 +1,9 @@ +namespace Code.Gameplay.Weapons +{ + public enum FireMode + { + SemiAutomatic, + Automatic, + BoltAction + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/FireMode.cs.meta b/Assets/Code/Gameplay/Weapons/FireMode.cs.meta new file mode 100644 index 0000000..f2ebf7b --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/FireMode.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d68015d7f9d94843a7dcfb0d1ddc4d4f +timeCreated: 1771856216 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Pistol.cs b/Assets/Code/Gameplay/Weapons/Pistol.cs new file mode 100644 index 0000000..f7b5391 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Pistol.cs @@ -0,0 +1,12 @@ +namespace Code.Gameplay.Weapons +{ + public class Pistol : WeaponBase + { + protected override void Awake() + { + base.Awake(); + weaponType = WeaponType.Pistol; + fireMode = FireMode.SemiAutomatic; + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Pistol.cs.meta b/Assets/Code/Gameplay/Weapons/Pistol.cs.meta new file mode 100644 index 0000000..d6a6348 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Pistol.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a7a144ebf90447faadef43bde7844c84 +timeCreated: 1771856293 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Rifle.cs b/Assets/Code/Gameplay/Weapons/Rifle.cs new file mode 100644 index 0000000..7a16ec6 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Rifle.cs @@ -0,0 +1,13 @@ +namespace Code.Gameplay.Weapons +{ + public class Rifle : WeaponBase + { + + protected override void Awake() + { + base.Awake(); + weaponType = WeaponType.Rifle; + fireMode = FireMode.BoltAction; + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/Rifle.cs.meta b/Assets/Code/Gameplay/Weapons/Rifle.cs.meta new file mode 100644 index 0000000..3b555ed --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/Rifle.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c181bf00d2e4431c8fd029e8a6bffd83 +timeCreated: 1771856324 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/WeaponBase.cs b/Assets/Code/Gameplay/Weapons/WeaponBase.cs new file mode 100644 index 0000000..172a825 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/WeaponBase.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections; +using Code.Gameplay.Camera; +using UnityEngine; +using Random = UnityEngine.Random; + +namespace Code.Gameplay.Weapons +{ + public abstract class WeaponBase : MonoBehaviour + { + [SerializeField] protected WeaponType weaponType; + [SerializeField] protected string weaponName; + [SerializeField] protected FireMode fireMode; + + [SerializeField] protected float damage = 20f; + [SerializeField] protected float fireRate = 0.5f; + [SerializeField] protected float bulletSpeed = 50f; + [SerializeField] protected int magazineSize = 10; + [SerializeField] protected int currentAmmo; + [SerializeField] protected int reserveAmmo = 30; + [SerializeField] protected float reloadTime = 1.5f; + [SerializeField] protected float spreadAngle = 1f; + + private Transform _firePoint; + [SerializeField] protected GameObject bulletPrefab; + [SerializeField] protected ParticleSystem muzzleFlash; + [SerializeField] protected AudioClip shootSound; + [SerializeField] protected AudioClip reloadSound; + [SerializeField] protected AudioClip emptySound; + + protected AudioSource audioSource; + protected bool isShooting; + protected bool isReloading; + protected float lastShotTime; + + public WeaponType Type => weaponType; + public int CurrentAmmo => currentAmmo; + public int ReserveAmmo => reserveAmmo; + public int MagazineSize => magazineSize; + public bool IsReloading => isReloading; + + protected virtual void Awake() + { + audioSource = GetComponent(); + if (audioSource == null) + audioSource = gameObject.AddComponent(); + + currentAmmo = magazineSize; + } + + protected virtual void Start() + { + _firePoint = FindFirstObjectByType().transform; + } + + public virtual void Shoot() + { + if (isReloading) return; + if (currentAmmo <= 0) + { + PlayEmptySound(); + return; + } + + if (Time.time - lastShotTime < fireRate) + return; + + switch (fireMode) + { + case FireMode.SemiAutomatic: + if (!isShooting) return; + break; + case FireMode.Automatic: + break; + case FireMode.BoltAction: + if (!isShooting) return; + StartCoroutine(BoltActionDelay()); + break; + default: + throw new ArgumentOutOfRangeException(); + } + + PerformShot(); + } + + protected virtual void PerformShot() + { + currentAmmo--; + lastShotTime = Time.time; + + SpawnBullet(); + + if (muzzleFlash != null) + muzzleFlash.Play(); + + if (shootSound != null) + audioSource.PlayOneShot(shootSound); + + OnShoot(); + } + + protected virtual void SpawnBullet() + { + if (bulletPrefab == null) return; + + var spread = Random.insideUnitSphere * (spreadAngle / 100f); + var direction = (_firePoint.forward + spread).normalized; + + var bullet = Instantiate(bulletPrefab, _firePoint.position, Quaternion.LookRotation(direction)); + var bulletComponent = bullet.GetComponent(); + + if (bulletComponent != null) + { + bulletComponent.Initialize(bulletSpeed, damage, direction); + } + } + + protected virtual void OnShoot() + { + } + + public virtual void StartShooting() + { + isShooting = true; + + Shoot(); + } + + public virtual void StopShooting() + { + isShooting = false; + } + + public virtual void Reload() + { + if (isReloading) return; + if (reserveAmmo <= 0) return; + if (currentAmmo == magazineSize) return; + + StartCoroutine(ReloadCoroutine()); + } + + protected virtual IEnumerator ReloadCoroutine() + { + isReloading = true; + + if (reloadSound != null) + audioSource.PlayOneShot(reloadSound); + + yield return new WaitForSeconds(reloadTime); + + var ammoNeeded = magazineSize - currentAmmo; + var ammoToTake = Mathf.Min(ammoNeeded, reserveAmmo); + + currentAmmo += ammoToTake; + reserveAmmo -= ammoToTake; + + isReloading = false; + } + + protected virtual void PlayEmptySound() + { + if (emptySound != null) + audioSource.PlayOneShot(emptySound); + } + + public virtual void AddAmmo(int amount) + { + reserveAmmo += amount; + } + + protected virtual IEnumerator BoltActionDelay() + { + yield return new WaitForSeconds(reloadTime); + } + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/WeaponBase.cs.meta b/Assets/Code/Gameplay/Weapons/WeaponBase.cs.meta new file mode 100644 index 0000000..1d00ff5 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/WeaponBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea8f25ad07a74b75b439e057339b1d7e +timeCreated: 1771856259 \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/WeaponType.cs b/Assets/Code/Gameplay/Weapons/WeaponType.cs new file mode 100644 index 0000000..26eb9c4 --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/WeaponType.cs @@ -0,0 +1,9 @@ +namespace Code.Gameplay.Weapons +{ + public enum WeaponType + { + Pistol, + AssaultRifle, + Rifle + } +} \ No newline at end of file diff --git a/Assets/Code/Gameplay/Weapons/WeaponType.cs.meta b/Assets/Code/Gameplay/Weapons/WeaponType.cs.meta new file mode 100644 index 0000000..b8325ca --- /dev/null +++ b/Assets/Code/Gameplay/Weapons/WeaponType.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 582d1a42f0d543ec92a00b8e20c19520 +timeCreated: 1771856203 \ No newline at end of file diff --git a/Assets/Code/Input/IInputService.cs b/Assets/Code/Input/IInputService.cs index ad47a5a..c77c2b2 100644 --- a/Assets/Code/Input/IInputService.cs +++ b/Assets/Code/Input/IInputService.cs @@ -15,6 +15,7 @@ namespace Code.Input Vector2 MoveInput { get; } bool JumpPressed { get; } bool SprintHeld { get; } + bool AttackPressed { get; } void DebugBindAction(int mapId, int actionId, Action action); diff --git a/Assets/Resources/Materials/Weapons.meta b/Assets/Resources/Materials/Weapons.meta new file mode 100644 index 0000000..5df08ac --- /dev/null +++ b/Assets/Resources/Materials/Weapons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d81c3d9b1f064db0f986284801a29cff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock.meta b/Assets/Resources/Materials/Weapons/Glock.meta new file mode 100644 index 0000000..07fcb83 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b67898d6f71906689840123c24ae793f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/Barrel.mat b/Assets/Resources/Materials/Weapons/Glock/Barrel.mat new file mode 100644 index 0000000..33346fc --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/Barrel.mat @@ -0,0 +1,137 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Barrel + m_Shader: {fileID: 4800000, guid: 933532a4fcc9baf4fa0491de14d08ed7, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: + RenderType: Opaque + disabledShaderPasses: + - MOTIONVECTORS + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BaseMap: + m_Texture: {fileID: 2800000, guid: 6d5ce7a8d3967d345b242752557a8a23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 6d5ce7a8d3967d345b242752557a8a23, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _SpecGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_Lightmaps: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_LightmapsInd: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - unity_ShadowMasks: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _AddPrecomputedVelocity: 0 + - _AlphaClip: 0 + - _AlphaToMask: 0 + - _Blend: 0 + - _BlendModePreserveSpecular: 1 + - _BumpScale: 1 + - _ClearCoatMask: 0 + - _ClearCoatSmoothness: 0 + - _Cull: 2 + - _Cutoff: 0.5 + - _DetailAlbedoMapScale: 1 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _DstBlendAlpha: 0 + - _EnvironmentReflections: 1 + - _GlossMapScale: 0 + - _Glossiness: 0 + - _GlossyReflections: 0 + - _Metallic: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.005 + - _QueueOffset: 0 + - _ReceiveShadows: 1 + - _Smoothness: 0.5 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _SrcBlendAlpha: 1 + - _Surface: 0 + - _WorkflowMode: 1 + - _XRMotionVectorsPass: 1 + - _ZWrite: 1 + m_Colors: + - _BaseColor: {r: 1, g: 1, b: 1, a: 1} + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1} + m_BuildTextureStacks: [] + m_AllowLocking: 1 +--- !u!114 &715708165294685362 +MonoBehaviour: + m_ObjectHideFlags: 11 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Editor::UnityEditor.Rendering.Universal.AssetVersion + version: 10 diff --git a/Assets/Resources/Materials/Weapons/Glock/Barrel.mat.meta b/Assets/Resources/Materials/Weapons/Glock/Barrel.mat.meta new file mode 100644 index 0000000..e178ba1 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/Barrel.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3ee136a40e1a5655a07c4a0dc02b681 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures.meta b/Assets/Resources/Materials/Weapons/Glock/textures.meta new file mode 100644 index 0000000..401af6c --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 899a4d969751bc19290774d52ec3a264 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png b/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png new file mode 100644 index 0000000..3af9fc1 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:672123df2a69496c5efa9bda9925b57b6c815dd519f3f134a0a95bdfff6086e6 +size 676813 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png.meta new file mode 100644 index 0000000..0166d2f --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Barrel1_diff.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 6d5ce7a8d3967d345b242752557a8a23 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png new file mode 100644 index 0000000..2806d2e --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42422c4684e85d7b9433da20f55e397675b98a9db8c58fdf916a677c664dc358 +size 9844 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png.meta new file mode 100644 index 0000000..fbe8900 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_diff.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 3a4848e4fc292e6bc8d063100b093d67 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png new file mode 100644 index 0000000..2da1284 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb70252ae01cbaf80a9d6566cc40188e7f4d0101d2fd9c4268b4fbbe5df90163 +size 14979 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png.meta new file mode 100644 index 0000000..7b357b5 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_nmap.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 553a81c13fe3ecebb8c172f0fcb5b95e +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png new file mode 100644 index 0000000..9966d33 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2dfebacf24f08ea76877a69320e53b6cc37f5f87814750befa32d1e36cd1000 +size 6864 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png.meta new file mode 100644 index 0000000..9428059 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Bullets1_spec.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 22e404c3ff6d6b3f68f4244c221383bf +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png new file mode 100644 index 0000000..1dd2641 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5772502430173ce9b8cbeca316f36a2e343d805c043f7bbae2d7876fd1043730 +size 1351297 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png.meta new file mode 100644 index 0000000..c1ddef7 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_nmap.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: 9314735ce46737089b12d9659abb61c6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png new file mode 100644 index 0000000..91f7298 --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0550a19ac0ac25338efda436fee2f30c5fa928a470e367514c9879ce5eb037b +size 904716 diff --git a/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png.meta b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png.meta new file mode 100644 index 0000000..a53d0ca --- /dev/null +++ b/Assets/Resources/Materials/Weapons/Glock/textures/Magazine1_spec.png.meta @@ -0,0 +1,117 @@ +fileFormatVersion: 2 +guid: b91075319b4cd8808bab4a7b69496be6 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Meshes/ak47.glb b/Assets/Resources/Meshes/ak47.glb new file mode 100644 index 0000000000000000000000000000000000000000..da3a4704531b67104989615e195009c5ee385d3d GIT binary patch literal 290500 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 JDSpwr?KiN>^$P$1 literal 0 HcmV?d00001 diff --git a/Assets/Resources/Meshes/ak47.glb.meta b/Assets/Resources/Meshes/ak47.glb.meta new file mode 100644 index 0000000..045f7dc --- /dev/null +++ b/Assets/Resources/Meshes/ak47.glb.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: dc315a500c36f0c4c8e64b158423a23e +ScriptedImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 2 + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 11500000, guid: 715df9372183c47e389bb6e19fbc3b52, type: 3} + editorImportSettings: + generateSecondaryUVSet: 0 + importSettings: + nodeNameMethod: 1 + animationMethod: 2 + generateMipMaps: 1 + texturesReadable: 0 + defaultMinFilterMode: 9729 + defaultMagFilterMode: 9729 + anisotropicFilterLevel: 1 + instantiationSettings: + mask: -1 + layer: 0 + skinUpdateWhenOffscreen: 1 + lightIntensityFactor: 1 + sceneObjectCreation: 2 + assetDependencies: [] + reportItems: [] diff --git a/Assets/Resources/Meshes/glock.obj b/Assets/Resources/Meshes/glock.obj new file mode 100644 index 0000000..0aebc2f --- /dev/null +++ b/Assets/Resources/Meshes/glock.obj @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36bac131e2c8df3a5b318425edb403dec8eca84736814dde706bcaa27c0a2ea6 +size 1766621 diff --git a/Assets/Resources/Meshes/glock.obj.meta b/Assets/Resources/Meshes/glock.obj.meta new file mode 100644 index 0000000..92c8587 --- /dev/null +++ b/Assets/Resources/Meshes/glock.obj.meta @@ -0,0 +1,110 @@ +fileFormatVersion: 2 +guid: 686855a34c307aba18041e09cd085653 +ModelImporter: + serializedVersion: 24200 + internalIDToNameTable: [] + externalObjects: {} + materials: + materialImportMode: 2 + materialName: 0 + materialSearch: 1 + materialLocation: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + removeConstantScaleCurves: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + extraUserProperties: [] + clipAnimations: [] + isReadable: 0 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 1 + importVisibility: 1 + importBlendShapes: 1 + importCameras: 1 + importLights: 1 + nodeNameCollisionStrategy: 1 + fileIdsGeneration: 2 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + keepQuads: 0 + weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + generateMeshLods: 0 + meshLodGenerationFlags: 0 + maximumMeshLod: -1 + meshOptimizationFlags: -1 + indexFormat: 0 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 1 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 + secondaryUVPackMargin: 4 + useFileScale: 1 + strictVertexDataChecks: 0 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + normalCalculationMode: 4 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 0 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] + importAnimation: 1 + humanDescription: + serializedVersion: 3 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + globalScale: 1 + rootMotionBoneName: + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + autoGenerateAvatarMappingIfUnspecified: 1 + animationType: 2 + humanoidOversampling: 1 + avatarSetup: 0 + addHumanoidExtraRootOnlyWhenUsingAvatar: 1 + importBlendShapeDeformPercent: 1 + remapMaterialsIfMaterialImportModeIsNone: 0 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/Meshes/m16a4.glb b/Assets/Resources/Meshes/m16a4.glb new file mode 100644 index 0000000000000000000000000000000000000000..4222681d3ab8273caa96e309333eaa0e05c880a9 GIT binary patch literal 2074840 zcmeF)1)Lm3yDwne-Ccr1vf1&SpdnZw0!eTQk&Qr%2oQq1ySux)ySux)yX$>wc9NY4 zggqbUUhX;X`F;;IGnt*~{#SK%b$9ig{)2j~Gu0GRO!4A{i%)UvCR0qYe)q0j#esJv_$C7zcWTux*Sb}op@WAF9nv^tWRKCq8e6q1WU|Hd z;;11bTeZvN>RY!O+-qll*Ctz+ZOG)xg>ojFDb?pQt+RE7T&`5CuP@a%_>X^VU0;_k z=Q6p5OgUfQkk1rLg{}Slz#&b4pUc%3>hr}yp&{2$pUIY5XX+ZVg;GN?lgX8G<$C{Z z-Nr{0%GpdYTP_w$*@kSUKJPO|R+g>RCTn-dwc4%qMC;Id^vK4p{rZh)Ov_v-TIj#I zR{6T3CC}IAGWFT|`b?%&Xlzqov>xSLHd`)PJgb#0=L(j!zIk0dNlRLJQ$seNtIro2 z>Wk&pZJOToS4*4y+sjt(OBna9&Ci=ZKRZzxnMr+qp{7O~#--W4L;FtcyG`^7+C*)h zxlDF)d6shms8*uqSrxTTZ83eg{PX34TFbVqiDYvH z3p1&pYMOrSN~QX)8dn{ut}7M(H*38%Q;qt+@b%4K-B4!(E0&9;OfgsAP$=iM+J