diff --git a/Assets/Entities/RuntimeSet/ActivePowerStructures.asset b/Assets/Entities/RuntimeSet/ActivePowerStructures.asset new file mode 100644 index 0000000..f01ab89 --- /dev/null +++ b/Assets/Entities/RuntimeSet/ActivePowerStructures.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: 3c46c7dedba14f3da958a2e6a3d3feaa, type: 3} + m_Name: ActivePowerStructures + m_EditorClassIdentifier: + _list: [] diff --git a/Assets/Entities/RuntimeSet/ActivePowerStructures.asset.meta b/Assets/Entities/RuntimeSet/ActivePowerStructures.asset.meta new file mode 100644 index 0000000..665b2a4 --- /dev/null +++ b/Assets/Entities/RuntimeSet/ActivePowerStructures.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 127d26f1f3536e94da36af662f63fa0b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs b/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs new file mode 100644 index 0000000..c87013f --- /dev/null +++ b/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs @@ -0,0 +1,10 @@ +using AsteroidGame.ScriptableObjects; +using UnityEngine; + +namespace AsteroidGame.Entities +{ + [CreateAssetMenu(fileName = "newPowerBaseRuntimeSet", menuName = "RuntimeSet/PowerBase")] + public class SPowerBaseRuntimeSet : SRuntimeSet + { + } +} \ No newline at end of file diff --git a/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs.meta b/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs.meta new file mode 100644 index 0000000..c05d2f4 --- /dev/null +++ b/Assets/Entities/ScriptableObjects/SPowerBaseRuntimeSet.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3c46c7dedba14f3da958a2e6a3d3feaa +timeCreated: 1665006553 \ No newline at end of file diff --git a/Assets/Entities/ScriptableObjects/SPowerConfig.cs b/Assets/Entities/ScriptableObjects/SPowerConfig.cs new file mode 100644 index 0000000..9c7c072 --- /dev/null +++ b/Assets/Entities/ScriptableObjects/SPowerConfig.cs @@ -0,0 +1,14 @@ +using AsteroidGame.Interfaces; +using UnityEngine; + +namespace AsteroidGame.Entities +{ + [CreateAssetMenu(fileName = "newPowerConfiguration", menuName = "Configuration/Power")] + public class SPowerConfig : ScriptableObject + { + public SPowerBaseRuntimeSet _activePowerStructures; + public bool isGenerator; + public bool isConsumer; + public int maxPower; + } +} \ No newline at end of file diff --git a/Assets/Entities/ScriptableObjects/SPowerConfig.cs.meta b/Assets/Entities/ScriptableObjects/SPowerConfig.cs.meta new file mode 100644 index 0000000..ceb8c6e --- /dev/null +++ b/Assets/Entities/ScriptableObjects/SPowerConfig.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87159085b5778b14482ec38673729d95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Entities/Scripts.meta b/Assets/Entities/Scripts.meta new file mode 100644 index 0000000..dabcc8a --- /dev/null +++ b/Assets/Entities/Scripts.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 087e96d3ceec42f9aba85753a4b8d15f +timeCreated: 1665005789 \ No newline at end of file diff --git a/Assets/Entities/EntityBase.cs b/Assets/Entities/Scripts/EntityBase.cs similarity index 100% rename from Assets/Entities/EntityBase.cs rename to Assets/Entities/Scripts/EntityBase.cs diff --git a/Assets/Entities/EntityBase.cs.meta b/Assets/Entities/Scripts/EntityBase.cs.meta similarity index 100% rename from Assets/Entities/EntityBase.cs.meta rename to Assets/Entities/Scripts/EntityBase.cs.meta diff --git a/Assets/Entities/Scripts/PowerBase.cs b/Assets/Entities/Scripts/PowerBase.cs new file mode 100644 index 0000000..5291f94 --- /dev/null +++ b/Assets/Entities/Scripts/PowerBase.cs @@ -0,0 +1,42 @@ +using System; +using AsteroidGame.Interfaces; +using UnityEngine; + +namespace AsteroidGame.Entities +{ + public class PowerBase : MonoBehaviour, IPowerSystem + { + [Header("State")] + [SerializeField] protected bool _isGenerator = true; + [SerializeField] protected bool _isConsumer = true; + [SerializeField] protected int _maxPower; + [SerializeField] protected int _currentPower; + + public void SetConfig(SPowerConfig config) + { + _isGenerator = config.isGenerator; + _isConsumer = config.isConsumer; + _maxPower = config.maxPower; + } + + #region Setters + + public void SetMaxPower(int newValue) => _maxPower = newValue; + + #endregion + + #region Getters + + public bool IsGenerator => _isGenerator; + + public bool IsConsumer => _isConsumer; + + public int GetMaxPower() => _maxPower; + + public int GetCurrentPower() => _currentPower; + + public float GetPowerFactor() => (float)_currentPower / _maxPower; + + #endregion + } +} \ No newline at end of file diff --git a/Assets/Entities/Scripts/PowerBase.cs.meta b/Assets/Entities/Scripts/PowerBase.cs.meta new file mode 100644 index 0000000..c45b37a --- /dev/null +++ b/Assets/Entities/Scripts/PowerBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5aca1826fdd547e1afd4a67d55a0f25c +timeCreated: 1665006027 \ No newline at end of file diff --git a/Assets/Entities/Structures/PowerPlant/PowerPlant.prefab b/Assets/Entities/Structures/PowerPlant/PowerPlant.prefab index 05a48e5..7612afb 100644 --- a/Assets/Entities/Structures/PowerPlant/PowerPlant.prefab +++ b/Assets/Entities/Structures/PowerPlant/PowerPlant.prefab @@ -56,11 +56,10 @@ MonoBehaviour: _cost: 100 _buildPlacementBlocked: 0 _buildTimer: 0 - _isGenerator: 1 - _isConsumer: 0 - _maxPower: 100 - _currentPower: 0 _structureBaseSet: {fileID: 11400000, guid: 1925957d2bc2f0c4a9210131f2d2c4e5, type: 2} + _powerBaseSet: {fileID: 11400000, guid: 127d26f1f3536e94da36af662f63fa0b, type: 2} + _powerConfig: {fileID: 11400000, guid: 742a00ce6f6a8e04cae160bc40f09e24, type: 2} + _power: {fileID: 0} --- !u!1 &1863277996181035512 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset b/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset new file mode 100644 index 0000000..341585f --- /dev/null +++ b/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset @@ -0,0 +1,18 @@ +%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: 87159085b5778b14482ec38673729d95, type: 3} + m_Name: PowerplantPowerConfiguration + m_EditorClassIdentifier: + _activePowerStructures: {fileID: 11400000, guid: 127d26f1f3536e94da36af662f63fa0b, type: 2} + isGenerator: 1 + isConsumer: 0 + maxPower: 100 diff --git a/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset.meta b/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset.meta new file mode 100644 index 0000000..3a1bb0c --- /dev/null +++ b/Assets/Entities/Structures/PowerPlant/PowerplantPowerConfiguration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 742a00ce6f6a8e04cae160bc40f09e24 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Entities/Structures/Scripts/StructureBase.cs b/Assets/Entities/Structures/Scripts/StructureBase.cs index a55c5af..fcc3ee8 100644 --- a/Assets/Entities/Structures/Scripts/StructureBase.cs +++ b/Assets/Entities/Structures/Scripts/StructureBase.cs @@ -1,33 +1,27 @@ - +using System; using AsteroidGame.Interfaces; using UnityEngine; namespace AsteroidGame.Entities { - public class StructureBase : EntityBase, IBuildable, IPowerSystem + public class StructureBase : EntityBase, IBuildable { [Header("BuildParameters")] [SerializeField] protected int _cost; [SerializeField] private bool _buildPlacementBlocked; [SerializeField] protected float _buildTimer; - [Header("Power")] - [SerializeField] protected bool _isGenerator; - [SerializeField] protected bool _isConsumer; - [SerializeField] protected int _maxPower; - [SerializeField] protected int _currentPower; - [Header("Configuration")] [SerializeField] private SEntityBaseRuntimeSet _structureBaseSet; - - #region Private + [SerializeField] private SPowerBaseRuntimeSet _powerBaseSet; - #endregion + [Header("Power")] + [SerializeField] private SPowerConfig _powerConfig; + [SerializeField] private PowerBase _power; #region Publics - public bool IsGenerator => _isGenerator; - public bool IsConsumer => _isConsumer; + public PowerBase Power => _power; public bool BuildPlacementBlocked => _buildPlacementBlocked; #endregion @@ -35,17 +29,23 @@ namespace AsteroidGame.Entities protected override void OnEnable() { base.OnEnable(); - if (!_isConsumer && !_isGenerator) - { - Debug.LogWarning("Power consumer/generator not set!"); - } _structureBaseSet.Add(this); + InitializePower(); + } + + private void InitializePower() + { + _power = gameObject.AddComponent(); + _power.SetConfig(_powerConfig); + _powerBaseSet.Add(_power); + } protected override void OnDisable() { base.OnDisable(); _structureBaseSet.Remove(this); + _powerBaseSet.Remove(_power); } private void OnTriggerStay(Collider other) @@ -66,19 +66,12 @@ namespace AsteroidGame.Entities #region Setters - public void SetMaxPower(int newValue) => _maxPower = newValue; public int SetCost(int newCost) => _cost = newCost; #endregion #region Getters - public int GetMaxPower() => _maxPower; - - public int GetCurrentPower() => _currentPower; - - public float GetPowerFactor() => (float)_currentPower / _maxPower; - public int GetCost() => _cost; #endregion diff --git a/Assets/Entities/Structures/Turret/Turret.prefab b/Assets/Entities/Structures/Turret/Turret.prefab index 0132361..6211817 100644 --- a/Assets/Entities/Structures/Turret/Turret.prefab +++ b/Assets/Entities/Structures/Turret/Turret.prefab @@ -752,12 +752,10 @@ MonoBehaviour: _cost: 10 _buildPlacementBlocked: 0 _buildTimer: 0 - _isGenerator: 0 - _isConsumer: 1 - _maxPower: 10 - _currentPower: 0 _structureBaseSet: {fileID: 11400000, guid: 1925957d2bc2f0c4a9210131f2d2c4e5, type: 2} - _weaponRange: 10 + _powerBaseSet: {fileID: 11400000, guid: 127d26f1f3536e94da36af662f63fa0b, type: 2} + _powerConfig: {fileID: 11400000, guid: 9dc2a0f5f29a11a4d9cabe19e18bdd42, type: 2} + _power: {fileID: 0} _damage: 1 _fireRate: 1 _projectileSpeed: 5 @@ -767,4 +765,4 @@ MonoBehaviour: _barrel: {fileID: 5103935545559248087} _targeterConfig: {fileID: 11400000, guid: 9df40bc219ab8f04cb4e86558bc0df86, type: 2} _targeter: {fileID: 0} - _targetEnemy: {fileID: 0} + _target: {fileID: 0} diff --git a/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset b/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset new file mode 100644 index 0000000..25e6019 --- /dev/null +++ b/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset @@ -0,0 +1,18 @@ +%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: 87159085b5778b14482ec38673729d95, type: 3} + m_Name: TurretPowerConfiguration + m_EditorClassIdentifier: + _activePowerStructures: {fileID: 11400000, guid: 127d26f1f3536e94da36af662f63fa0b, type: 2} + isGenerator: 0 + isConsumer: 1 + maxPower: 10 diff --git a/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset.meta b/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset.meta new file mode 100644 index 0000000..710fddb --- /dev/null +++ b/Assets/Entities/Structures/Turret/TurretPowerConfiguration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9dc2a0f5f29a11a4d9cabe19e18bdd42 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Handlers/PowerHandler.cs b/Assets/Handlers/PowerHandler.cs index dc3e9f4..3f0c2c5 100644 --- a/Assets/Handlers/PowerHandler.cs +++ b/Assets/Handlers/PowerHandler.cs @@ -13,14 +13,14 @@ namespace AsteroidGame.Handlers [SerializeField] private float _powerFactor; [Header("Connections")] - [SerializeField] private SStructureBaseRuntimeSet _activeStructures; + [SerializeField] private SPowerBaseRuntimeSet _activePowerStructures; private void Update() { _powerConsumption = 0; _powerConsumptionPeak = 0; _powerCapacity = 0; - foreach (var structure in _activeStructures._list) + foreach (var structure in _activePowerStructures._list) { if (structure.IsConsumer) { diff --git a/Assets/Handlers/PowerHandler.prefab b/Assets/Handlers/PowerHandler.prefab index 7ea268e..cb7a2c0 100644 --- a/Assets/Handlers/PowerHandler.prefab +++ b/Assets/Handlers/PowerHandler.prefab @@ -45,6 +45,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _powerConsumption: 0 + _powerConsumptionPeak: 0 _powerCapacity: 0 _powerFactor: 0 - _activeStructures: {fileID: 11400000, guid: bccdf438a1004a444bc24492728d6fbd, type: 2} + _activePowerStructures: {fileID: 11400000, guid: 127d26f1f3536e94da36af662f63fa0b, type: 2}