From f624dace6d4be6e2e168d48e7fb3e3ee5302e307 Mon Sep 17 00:00:00 2001 From: Stedd Date: Mon, 24 Oct 2022 20:55:25 +0200 Subject: [PATCH] Basic ammo functionality Lecture 178 --- .../InputSystem/MainPlayerInputs.inputactions | 2 +- Assets/Scenes/Sandbox.unity | 247 +++++++++++++++++- Assets/UIVariable.cs | 24 ++ Assets/UIVariable.cs.meta | 11 + Assets/Weapons/Ammo.cs | 106 ++++++++ Assets/Weapons/Ammo.cs.meta | 11 + Assets/Weapons/BeltAmmo.asset | 15 ++ Assets/Weapons/BeltAmmo.asset.meta | 8 + Assets/Weapons/FloatVariable.cs | 13 + Assets/Weapons/FloatVariable.cs.meta | 11 + Assets/Weapons/MachineGun.prefab | 26 ++ Assets/Weapons/MagazineAmmo.asset | 15 ++ Assets/Weapons/MagazineAmmo.asset.meta | 8 + Assets/Weapons/Revolver.prefab | 25 +- Assets/Weapons/Weapon.cs | 18 +- 15 files changed, 524 insertions(+), 16 deletions(-) create mode 100644 Assets/UIVariable.cs create mode 100644 Assets/UIVariable.cs.meta create mode 100644 Assets/Weapons/Ammo.cs create mode 100644 Assets/Weapons/Ammo.cs.meta create mode 100644 Assets/Weapons/BeltAmmo.asset create mode 100644 Assets/Weapons/BeltAmmo.asset.meta create mode 100644 Assets/Weapons/FloatVariable.cs create mode 100644 Assets/Weapons/FloatVariable.cs.meta create mode 100644 Assets/Weapons/MagazineAmmo.asset create mode 100644 Assets/Weapons/MagazineAmmo.asset.meta diff --git a/Assets/InputSystem/MainPlayerInputs.inputactions b/Assets/InputSystem/MainPlayerInputs.inputactions index 7b8f952..92bfee2 100644 --- a/Assets/InputSystem/MainPlayerInputs.inputactions +++ b/Assets/InputSystem/MainPlayerInputs.inputactions @@ -185,7 +185,7 @@ "id": "ed66cbff-2900-4a62-8896-696503cfcd31", "path": "/delta", "interactions": "", - "processors": "InvertVector2(invertX=false),ScaleVector2(x=0.05,y=0.05)", + "processors": "InvertVector2(invertX=false),ScaleVector2(x=0.15,y=0.15)", "groups": "KeyboardMouse", "action": "Look", "isComposite": false, diff --git a/Assets/Scenes/Sandbox.unity b/Assets/Scenes/Sandbox.unity index e9ef780..05bcfb0 100644 --- a/Assets/Scenes/Sandbox.unity +++ b/Assets/Scenes/Sandbox.unity @@ -398,7 +398,7 @@ Transform: m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 774924462} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &101430667 PrefabInstance: @@ -781,6 +781,30 @@ Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: 2b127815fd0f2074eae3a0c6a4786d0b, type: 3} m_PrefabInstance: {fileID: 1215845398} m_PrefabAsset: {fileID: 0} +--- !u!1 &449506739 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 1218087889432038952, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} + m_PrefabInstance: {fileID: 8204767108263278737} + m_PrefabAsset: {fileID: 0} +--- !u!114 &449506742 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 449506739} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c35481a551c3a4d9d5f0e3fe13a03d, type: 3} + m_Name: + m_EditorClassIdentifier: + _ammoType: 1 + _maxBeltAmmoAmount: 0 + _maxMagAmmoAmount: 0 + _currentBeltAmmoAmount: 0 + _currentMagAmmoAmount: 0 + _S_currentBeltAmmoAmount: {fileID: 11400000, guid: f19d1fc1d5102a545800f4f8273640b1, type: 2} + _S_currentMagAmmoAmount: {fileID: 11400000, guid: 9a77ec14c64717643bed1c6e7a3885ae, type: 2} --- !u!1 &520203987 GameObject: m_ObjectHideFlags: 0 @@ -812,7 +836,7 @@ RectTransform: m_ConstrainProportionsScale: 1 m_Children: [] m_Father: {fileID: 774924462} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} @@ -1571,6 +1595,7 @@ RectTransform: m_Children: - {fileID: 1004910984} - {fileID: 1722452409} + - {fileID: 925195242} - {fileID: 520203988} - {fileID: 1400272403} - {fileID: 89176748} @@ -1966,6 +1991,158 @@ Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: ab33e6080ae416b4d899f39fa8951b98, type: 3} m_PrefabInstance: {fileID: 923022665} m_PrefabAsset: {fileID: 0} +--- !u!1 &925195241 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 925195242} + - component: {fileID: 925195245} + - component: {fileID: 925195244} + - component: {fileID: 925195243} + m_Layer: 5 + m_Name: MagAmmoText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &925195242 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925195241} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 774924462} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 20, y: 20} + m_SizeDelta: {x: 400, y: 40} + m_Pivot: {x: 0, y: 0} +--- !u!114 &925195243 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925195241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: 'Mag ammo: 99999' + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 36 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!114 &925195244 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925195241} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 208857bb9f1bc8c48a08050795732b0a, type: 3} + m_Name: + m_EditorClassIdentifier: + _prefix: 'Mag ammo: ' + _variable: {fileID: 11400000, guid: 9a77ec14c64717643bed1c6e7a3885ae, type: 2} + _textObject: {fileID: 925195243} + _text: +--- !u!222 &925195245 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 925195241} + m_CullTransparentMesh: 1 --- !u!1001 &945433442 PrefabInstance: m_ObjectHideFlags: 0 @@ -2857,7 +3034,7 @@ RectTransform: - {fileID: 63075908} - {fileID: 1286262076} m_Father: {fileID: 774924462} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} @@ -2968,6 +3145,30 @@ Transform: m_CorrespondingSourceObject: {fileID: 400000, guid: 2b127815fd0f2074eae3a0c6a4786d0b, type: 3} m_PrefabInstance: {fileID: 304950691} m_PrefabAsset: {fileID: 0} +--- !u!1 &1483687393 stripped +GameObject: + m_CorrespondingSourceObject: {fileID: 3273242134651530650, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} + m_PrefabInstance: {fileID: 8204767108263278737} + m_PrefabAsset: {fileID: 0} +--- !u!114 &1483687396 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1483687393} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c35481a551c3a4d9d5f0e3fe13a03d, type: 3} + m_Name: + m_EditorClassIdentifier: + _ammoType: 3 + _maxBeltAmmoAmount: 0 + _maxMagAmmoAmount: 0 + _currentBeltAmmoAmount: 0 + _currentMagAmmoAmount: 0 + _S_currentBeltAmmoAmount: {fileID: 11400000, guid: f19d1fc1d5102a545800f4f8273640b1, type: 2} + _S_currentMagAmmoAmount: {fileID: 11400000, guid: 9a77ec14c64717643bed1c6e7a3885ae, type: 2} --- !u!1001 &1486746696 PrefabInstance: m_ObjectHideFlags: 0 @@ -3269,9 +3470,10 @@ GameObject: m_Component: - component: {fileID: 1722452409} - component: {fileID: 1722452411} + - component: {fileID: 1722452412} - component: {fileID: 1722452410} m_Layer: 5 - m_Name: AmmoText + m_Name: BeltAmmoText m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -3294,8 +3496,8 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 0, y: 0} - m_AnchoredPosition: {x: 20, y: 20} - m_SizeDelta: {x: 250, y: 40} + m_AnchoredPosition: {x: 20, y: 60} + m_SizeDelta: {x: 400, y: 40} m_Pivot: {x: 0, y: 0} --- !u!114 &1722452410 MonoBehaviour: @@ -3317,7 +3519,7 @@ MonoBehaviour: m_OnCullStateChanged: m_PersistentCalls: m_Calls: [] - m_text: 'Ammo: 999' + m_text: 'Belt ammo : 99999' m_isRightToLeft: 0 m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} @@ -3394,6 +3596,22 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1722452408} m_CullTransparentMesh: 1 +--- !u!114 &1722452412 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1722452408} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 208857bb9f1bc8c48a08050795732b0a, type: 3} + m_Name: + m_EditorClassIdentifier: + _prefix: 'Belt ammo: ' + _variable: {fileID: 11400000, guid: f19d1fc1d5102a545800f4f8273640b1, type: 2} + _textObject: {fileID: 1722452410} + _text: --- !u!1001 &1754370120 PrefabInstance: m_ObjectHideFlags: 0 @@ -3712,7 +3930,10 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _fovNormal: 40 + _senseNormal: 1 _fovZoom: 20 + _senseZoom: 0.5 + _input: {fileID: 0} _camera: {fileID: 1850161070} _zoomedIn: 0 --- !u!20 &1874573760 stripped @@ -3966,7 +4187,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1834225747245264377, guid: 3a896632310e02b468121bf09411f87e, type: 3} propertyPath: m_LocalPosition.x - value: -42.2 + value: -9.2 objectReference: {fileID: 0} - target: {fileID: 1834225747245264377, guid: 3a896632310e02b468121bf09411f87e, type: 3} propertyPath: m_LocalPosition.y @@ -3974,7 +4195,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 1834225747245264377, guid: 3a896632310e02b468121bf09411f87e, type: 3} propertyPath: m_LocalPosition.z - value: 19.77 + value: 6.2 objectReference: {fileID: 0} - target: {fileID: 1834225747245264377, guid: 3a896632310e02b468121bf09411f87e, type: 3} propertyPath: m_LocalRotation.w @@ -4215,6 +4436,10 @@ PrefabInstance: propertyPath: m_Name value: MuzzleFlash objectReference: {fileID: 0} + - target: {fileID: 6980118021907165246, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} + propertyPath: _ammoType + value: 2 + objectReference: {fileID: 0} - target: {fileID: 7060812621224890882, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} propertyPath: fireAction.m_Id value: 974fe4ce-65be-4370-b772-71ca6290711e @@ -4263,6 +4488,10 @@ PrefabInstance: propertyPath: m_NotificationBehavior value: 1 objectReference: {fileID: 0} + - target: {fileID: 8729095170121787993, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} + propertyPath: _maxHealth + value: 50000 + objectReference: {fileID: 0} - target: {fileID: 8997996947095583982, guid: c5efc39a8aaf6e64ea40e9ad573e9b47, type: 3} propertyPath: m_RootOrder value: 4 diff --git a/Assets/UIVariable.cs b/Assets/UIVariable.cs new file mode 100644 index 0000000..b1a068d --- /dev/null +++ b/Assets/UIVariable.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using TMPro; +using UnityEngine; + +public class UIVariable : MonoBehaviour +{ + [SerializeField] private string _prefix; + [SerializeField] private FloatVariable _variable; + [SerializeField] private TextMeshProUGUI _textObject; + [SerializeField] private string _text; + + private void OnEnable() + { + _textObject = GetComponent(); + _text = _textObject.text; + } + + private void Update() + { + _textObject.text = _prefix + _variable.Value; + } +} \ No newline at end of file diff --git a/Assets/UIVariable.cs.meta b/Assets/UIVariable.cs.meta new file mode 100644 index 0000000..a0ee939 --- /dev/null +++ b/Assets/UIVariable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 208857bb9f1bc8c48a08050795732b0a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Weapons/Ammo.cs b/Assets/Weapons/Ammo.cs new file mode 100644 index 0000000..4f2b48f --- /dev/null +++ b/Assets/Weapons/Ammo.cs @@ -0,0 +1,106 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Ammo : MonoBehaviour +{ + [Header("Config")] + [SerializeField] private int _ammoType; + [SerializeField] private int _maxBeltAmmoAmount; + [SerializeField] private int _maxMagAmmoAmount; + + [Header("State")] + [SerializeField] private int _currentBeltAmmoAmount; + [SerializeField] private int _currentMagAmmoAmount; + + [Header("Connections")] + [SerializeField] private FloatVariable _S_currentBeltAmmoAmount; + [SerializeField] private FloatVariable _S_currentMagAmmoAmount; + + private void OnEnable() + { + _currentBeltAmmoAmount = _maxBeltAmmoAmount; + _currentMagAmmoAmount = _maxMagAmmoAmount; + } + + #region Public Properties + + public int AmmoType + { + get => _ammoType; + set => _ammoType = value; + } + + public int MaxMagAmmoAmount + { + get => _maxMagAmmoAmount; + set => _maxMagAmmoAmount = value; + } + + public int CurrentMagAmmoAmount + { + get => _currentMagAmmoAmount; + set => _currentMagAmmoAmount = value; + } + + #endregion + + #region Setters + + public void Reload() + { + int diff = _maxMagAmmoAmount - _currentMagAmmoAmount; + print(diff); + if (diff < _currentBeltAmmoAmount) + { + _currentBeltAmmoAmount -= diff; + _currentMagAmmoAmount += diff; + } + else + { + _currentMagAmmoAmount += _currentBeltAmmoAmount; + _currentBeltAmmoAmount = 0; + } + + AmmoUpdate(); + } + + public void ModifyMagAmmo(int modifyValue) + { + _currentMagAmmoAmount += modifyValue; + if (_currentMagAmmoAmount > _maxMagAmmoAmount) + { + _currentMagAmmoAmount = _maxMagAmmoAmount; + } + + if (_currentMagAmmoAmount <= 0) + { + _currentMagAmmoAmount = 0; + } + + AmmoUpdate(); + } + + #endregion + + #region Getters + + public float GetMagazineAmmoFactor() + { + return _currentMagAmmoAmount / (float)_maxMagAmmoAmount; + } + + public float GetBeltAmmoFactor() + { + return _currentBeltAmmoAmount / (float)_maxBeltAmmoAmount; + } + + #endregion + + private void AmmoUpdate() + { + _S_currentBeltAmmoAmount.Value = _currentBeltAmmoAmount; + _S_currentMagAmmoAmount.Value = _currentMagAmmoAmount; + } +} \ No newline at end of file diff --git a/Assets/Weapons/Ammo.cs.meta b/Assets/Weapons/Ammo.cs.meta new file mode 100644 index 0000000..c549f61 --- /dev/null +++ b/Assets/Weapons/Ammo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97c35481a551c3a4d9d5f0e3fe13a03d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Weapons/BeltAmmo.asset b/Assets/Weapons/BeltAmmo.asset new file mode 100644 index 0000000..9a4401e --- /dev/null +++ b/Assets/Weapons/BeltAmmo.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 1dc60414db7c7e84b80ebf750c4680cc, type: 3} + m_Name: BeltAmmo + m_EditorClassIdentifier: + _value: 0 diff --git a/Assets/Weapons/BeltAmmo.asset.meta b/Assets/Weapons/BeltAmmo.asset.meta new file mode 100644 index 0000000..8d98d7c --- /dev/null +++ b/Assets/Weapons/BeltAmmo.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f19d1fc1d5102a545800f4f8273640b1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Weapons/FloatVariable.cs b/Assets/Weapons/FloatVariable.cs new file mode 100644 index 0000000..020f6c7 --- /dev/null +++ b/Assets/Weapons/FloatVariable.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +[CreateAssetMenu(menuName = "FloatVariable")] +public class FloatVariable : ScriptableObject +{ + [SerializeField] private float _value; + + public float Value + { + get => _value; + set => this._value = value; + } +} \ No newline at end of file diff --git a/Assets/Weapons/FloatVariable.cs.meta b/Assets/Weapons/FloatVariable.cs.meta new file mode 100644 index 0000000..da5cb74 --- /dev/null +++ b/Assets/Weapons/FloatVariable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1dc60414db7c7e84b80ebf750c4680cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Weapons/MachineGun.prefab b/Assets/Weapons/MachineGun.prefab index be45e77..0c7a0cb 100644 --- a/Assets/Weapons/MachineGun.prefab +++ b/Assets/Weapons/MachineGun.prefab @@ -10,6 +10,7 @@ GameObject: m_Component: - component: {fileID: 453068} - component: {fileID: 5719313868755367213} + - component: {fileID: 5655468185604888337} - component: {fileID: 3316574} - component: {fileID: 2346984} m_Layer: 0 @@ -46,6 +47,31 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 01ef216392c8f33409f2efcd91f4e510, type: 3} m_Name: m_EditorClassIdentifier: + _range: 100 + _weaponDamage: 25 + _fpCamera: {fileID: 0} + _muzzleFlash: {fileID: 0} + _bulletImpact: {fileID: 0} + _ammo: {fileID: 0} +--- !u!114 &5655468185604888337 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 118234} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c35481a551c3a4d9d5f0e3fe13a03d, type: 3} + m_Name: + m_EditorClassIdentifier: + _ammoType: 0 + _maxBeltAmmoAmount: 0 + _maxMagAmmoAmount: 0 + _currentBeltAmmoAmount: 0 + _currentMagAmmoAmount: 0 + _S_currentBeltAmmoAmount: {fileID: 11400000, guid: f19d1fc1d5102a545800f4f8273640b1, type: 2} + _S_currentMagAmmoAmount: {fileID: 11400000, guid: 9a77ec14c64717643bed1c6e7a3885ae, type: 2} --- !u!33 &3316574 MeshFilter: m_ObjectHideFlags: 0 diff --git a/Assets/Weapons/MagazineAmmo.asset b/Assets/Weapons/MagazineAmmo.asset new file mode 100644 index 0000000..e3a144c --- /dev/null +++ b/Assets/Weapons/MagazineAmmo.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + 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: 1dc60414db7c7e84b80ebf750c4680cc, type: 3} + m_Name: MagazineAmmo + m_EditorClassIdentifier: + _value: 0 diff --git a/Assets/Weapons/MagazineAmmo.asset.meta b/Assets/Weapons/MagazineAmmo.asset.meta new file mode 100644 index 0000000..a06f711 --- /dev/null +++ b/Assets/Weapons/MagazineAmmo.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a77ec14c64717643bed1c6e7a3885ae +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Weapons/Revolver.prefab b/Assets/Weapons/Revolver.prefab index ac073df..ff03ea9 100644 --- a/Assets/Weapons/Revolver.prefab +++ b/Assets/Weapons/Revolver.prefab @@ -10,6 +10,7 @@ GameObject: m_Component: - component: {fileID: 417070} - component: {fileID: 1703679832321447341} + - component: {fileID: 8817107657672854186} m_Layer: 0 m_Name: Revolver m_TagString: Untagged @@ -48,11 +49,31 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 01ef216392c8f33409f2efcd91f4e510, type: 3} m_Name: m_EditorClassIdentifier: + _range: 100 + _weaponDamage: 25 _fpCamera: {fileID: 0} _muzzleFlash: {fileID: 6070271853189258210} _bulletImpact: {fileID: 252487699782519274, guid: 82851982cb47c134a8403ffcb052b9d2, type: 3} - _range: 100 - _weaponDamage: 25 + _ammo: {fileID: 8817107657672854186} +--- !u!114 &8817107657672854186 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 117070} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 97c35481a551c3a4d9d5f0e3fe13a03d, type: 3} + m_Name: + m_EditorClassIdentifier: + _ammoType: 0 + _maxBeltAmmoAmount: 150 + _maxMagAmmoAmount: 7 + _currentBeltAmmoAmount: 0 + _currentMagAmmoAmount: 3 + _S_currentBeltAmmoAmount: {fileID: 11400000, guid: f19d1fc1d5102a545800f4f8273640b1, type: 2} + _S_currentMagAmmoAmount: {fileID: 11400000, guid: 9a77ec14c64717643bed1c6e7a3885ae, type: 2} --- !u!1 &160878 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Weapons/Weapon.cs b/Assets/Weapons/Weapon.cs index f0e3cd1..c4c9d8d 100644 --- a/Assets/Weapons/Weapon.cs +++ b/Assets/Weapons/Weapon.cs @@ -2,16 +2,21 @@ using UnityEngine; public class Weapon : MonoBehaviour { + [Header("Config")] + [SerializeField] private float _range = 100f; + [SerializeField] private float _weaponDamage = 25f; + + [Header("Connections")] [SerializeField] private Camera _fpCamera; [SerializeField] private ParticleSystem _muzzleFlash; [SerializeField] private GameObject _bulletImpact; - [SerializeField] private float _range = 100f; - [SerializeField] private float _weaponDamage = 25f; + [SerializeField] private Ammo _ammo; private void Awake() { _fpCamera = FindObjectOfType(); _muzzleFlash = GetComponentInChildren(); + _ammo = GetComponent(); } public void OnFire() @@ -22,12 +27,17 @@ public class Weapon : MonoBehaviour public void OnReload() { print($"Reloading {gameObject.name}"); + _ammo.Reload(); } private void Shoot() { - Animation(); - ProcessHit(); + if (_ammo.CurrentMagAmmoAmount > 0) + { + _ammo.ModifyMagAmmo(-1); + Animation(); + ProcessHit(); + } } private void Animation()