Compare commits

..

4 Commits

12 changed files with 178 additions and 17 deletions
+5
View File
@@ -53,6 +53,11 @@ MonoBehaviour:
_damage: 0 _damage: 0
_distance: 0 _distance: 0
_price: 100 _price: 100
_sellingMultiplier: 0.5
_upgrades:
- {fileID: 11400000, guid: 68a1d6af410516a45b1a068a14506079, type: 2}
- {fileID: 11400000, guid: 796a3264078b8e844b8bae5672ed08ae, type: 2}
- {fileID: 11400000, guid: cc5e39ac57e1c14429e9292b640829e6, type: 2}
--- !u!114 &4447708407417138733 --- !u!114 &4447708407417138733
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@@ -1,10 +1,22 @@
using UnityEngine; using UnityEngine;
[CreateAssetMenu(fileName = "TurretLvl_", menuName = "Scriptable Objects/Turret Upgrade")] [CreateAssetMenu(fileName = "Lvl_", menuName = "Scriptable Objects/Turret Upgrade")]
public class TurretUpgrade : ScriptableObject public class TurretUpgrade : ScriptableObject
{ {
// TODO: инкапсулировать поля [Tooltip("Процент стоисти от базовой цены турели для улучшения")]
public float UpgradeDamageMultiplier = 1.5f; [SerializeField] private float _upgradeCostMultiplier = 0.2f;
public float UpgradeDistanceMultiplier = 1.5f; [Tooltip("null, чтобы не менять префаб пули")]
public float UpgradeReloadTimeMultiplier = 0.75f; [SerializeField] private TurretBullet _bulletPrefab;
[Tooltip("-1, чтобы не менять урон")]
[SerializeField] private float _upgradeDamageMultiplier = -1f;
[Tooltip("-1, чтобы не менять дальность")]
[SerializeField] private float _upgradeDistanceMultiplier = -1f;
[Tooltip("-1, чтобы не менять время перезарядки")]
[SerializeField] private float _upgradeReloadTimeMultiplier = -1f;
public float UpgradeConstMultiplier => _upgradeCostMultiplier;
public TurretBullet BulletPrefab => _bulletPrefab;
public float UpgradeDamageMultiplier => _upgradeDamageMultiplier;
public float UpgradeDistanceMultiplier => _upgradeDistanceMultiplier;
public float UpgradeReloadTimeMultiplier => _upgradeReloadTimeMultiplier;
} }
+48 -10
View File
@@ -12,25 +12,45 @@ public class Turret : MonoBehaviour
[Header("Economy")] [Header("Economy")]
[SerializeField] private int _price; [SerializeField] private int _price;
[SerializeField] private float _sellingMultiplier = 0.5f; [SerializeField] private float _sellingMultiplier = 0.5f;
[SerializeField] private float _upgradeCostMultiplier = 0.2f;
[SerializeField] private float _upgradeCostMultiplierIncrement = 0.1f;
[Header("Upgrade")] [Header("Upgrade")]
[SerializeField] TurretUpgrade[] _upgrades; [SerializeField] TurretUpgrade[] _upgrades;
private float _reloadTimer; private float _reloadTimer;
private int _lvl; private int _lvl;
private float _baseReloadTime;
private float _baseDamage;
private float _baseDistance;
private float _currentPrice;
public int Price => _price; public int Price => _price;
public float Damage => _damage; public float Damage => _damage;
public float Distance => _distance; public float Distance => _distance;
public int SellPrice => Mathf.RoundToInt(_price * _sellingMultiplier); public int SellPrice => Mathf.RoundToInt(_currentPrice * _sellingMultiplier);
public int UpgradeCost => Mathf.RoundToInt(_price * _upgradeCostMultiplier); public int UpgradeCost
public bool IsMaxLevel => _lvl >= _upgrades.Length - 1; {
get
{
if (IsMaxLevel)
return 0;
return Mathf.RoundToInt(_price * _upgrades[_lvl].UpgradeConstMultiplier);
}
}
public bool IsMaxLevel => _lvl >= _upgrades.Length;
public int Level => _lvl + 1;
public int MaxLevel => _upgrades.Length;
private void Start() private void Start()
{ {
if (_bulletSpawnPoint == null) if (_bulletSpawnPoint == null)
_bulletSpawnPoint = transform; _bulletSpawnPoint = transform;
_baseReloadTime = _reloadTime;
_baseDamage = _damage;
_baseDistance = _distance;
_currentPrice = _price;
} }
public void Upgrade() public void Upgrade()
@@ -39,11 +59,29 @@ public class Turret : MonoBehaviour
return; return;
var upgrade = _upgrades[_lvl++]; var upgrade = _upgrades[_lvl++];
// TODO: исправить умножение на 0 if (upgrade.BulletPrefab != null)
_damage *= upgrade.UpgradeDamageMultiplier; _bulletPrefab = upgrade.BulletPrefab;
_distance *= upgrade.UpgradeDistanceMultiplier;
_reloadTime *= upgrade.UpgradeReloadTimeMultiplier; if (upgrade.UpgradeDistanceMultiplier != -1)
_upgradeCostMultiplier += _upgradeCostMultiplierIncrement; {
if (_damage == 0)
_baseDamage = _damage = upgrade.UpgradeDamageMultiplier;
else
_damage = _baseDamage * upgrade.UpgradeDamageMultiplier;
}
if (upgrade.UpgradeDistanceMultiplier != -1)
{
if (_distance == 0)
_baseDistance = _distance = upgrade.UpgradeDistanceMultiplier;
else
_distance = _baseDistance * upgrade.UpgradeDistanceMultiplier;
}
if (upgrade.UpgradeReloadTimeMultiplier != -1)
_reloadTime = _baseReloadTime * upgrade.UpgradeReloadTimeMultiplier;
_currentPrice += _price * 0.25f;
} }
private void Update() private void Update()
+11 -2
View File
@@ -10,6 +10,7 @@ public class TurretUpgradeViewer : MonoBehaviour
[SerializeField] private TMPro.TextMeshProUGUI _upgradeCostText; [SerializeField] private TMPro.TextMeshProUGUI _upgradeCostText;
private int _upgradeCost; private int _upgradeCost;
private bool _isMaxLevel;
private void OnEnable() private void OnEnable()
{ {
@@ -27,7 +28,7 @@ public class TurretUpgradeViewer : MonoBehaviour
private void OnMoneyChanged(int newMoney) private void OnMoneyChanged(int newMoney)
{ {
_upgradeButton.interactable = newMoney >= _upgradeCost; _upgradeButton.interactable = newMoney >= _upgradeCost && !_isMaxLevel;
} }
private void OnTurretClicked(Turret turret) private void OnTurretClicked(Turret turret)
@@ -44,8 +45,16 @@ public class TurretUpgradeViewer : MonoBehaviour
private void UpdateBtn(Turret turret) private void UpdateBtn(Turret turret)
{ {
_isMaxLevel = turret.IsMaxLevel;
if (_isMaxLevel)
{
_upgradeCostText.text = "MAX";
_upgradeButton.interactable = false;
return;
}
_upgradeCost = turret.UpgradeCost; _upgradeCost = turret.UpgradeCost;
_upgradeCostText.text = _upgradeCost.ToString(); _upgradeCostText.text = _upgradeCost.ToString();
_upgradeButton.interactable = _wallet.Money >= _upgradeCost && !turret.IsMaxLevel; _upgradeButton.interactable = _wallet.Money >= _upgradeCost;
} }
} }
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 97de97cce299b0f479cd791fdfff039a
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
+8
View File
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b6c10b08ad53464fbbd5fd07a5d752b
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
%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: 55eb675261abc594980c07f1195ca644, type: 3}
m_Name: Lvl_2
m_EditorClassIdentifier: Assembly-CSharp::TurretUpgrade
_upgradeCostMultiplier: 0.2
_bulletPrefab: {fileID: 0}
_upgradeDamageMultiplier: 1.5
_upgradeDistanceMultiplier: 1.5
_upgradeReloadTimeMultiplier: 0.75
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 68a1d6af410516a45b1a068a14506079
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
%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: 55eb675261abc594980c07f1195ca644, type: 3}
m_Name: Lvl_3
m_EditorClassIdentifier: Assembly-CSharp::TurretUpgrade
_upgradeCostMultiplier: 0.4
_bulletPrefab: {fileID: 0}
_upgradeDamageMultiplier: 1.75
_upgradeDistanceMultiplier: 1.75
_upgradeReloadTimeMultiplier: 0.75
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 796a3264078b8e844b8bae5672ed08ae
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,19 @@
%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: 55eb675261abc594980c07f1195ca644, type: 3}
m_Name: Lvl_4
m_EditorClassIdentifier: Assembly-CSharp::TurretUpgrade
_upgradeCostMultiplier: 0.5
_bulletPrefab: {fileID: 0}
_upgradeDamageMultiplier: 2
_upgradeDistanceMultiplier: 2
_upgradeReloadTimeMultiplier: 0.5
@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: cc5e39ac57e1c14429e9292b640829e6
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant: