Added a PowerLost BoolReference to prevent looping over _activePowerStructures twice in PowerHandler

This commit is contained in:
Stedd 2024-10-06 11:50:36 +02:00
parent 27a10a152a
commit 328dea759f
9 changed files with 147 additions and 14 deletions

@ -1 +1 @@
Subproject commit 510aaf1b6755c4fe76ecac137cdefc1564c8a086
Subproject commit cf3cf65b068d861d5bd65db2fbbb53a55f5bbf4d

View File

@ -1,4 +1,5 @@
using GameDev.CoreSystems;
using ScriptableObjectArchitecture;
using UnityEngine;
namespace AsteroidGame.Entities
@ -10,7 +11,7 @@ namespace AsteroidGame.Entities
[SerializeField] protected bool _isConsumer = true;
[SerializeField] protected int _maxPower;
[SerializeField] protected int _currentPower;
[field: SerializeField] public bool PowerLost { get; set; }
[field: SerializeField] public BoolReference PowerLost { get; set; }
[SerializeField] private SoPowerSystemRuntimeSet _powerBaseSet;

View File

@ -239,6 +239,7 @@ Transform:
m_Children:
- {fileID: 5508661882298666976}
- {fileID: 705421445933726062}
- {fileID: 4118684648214416899}
m_Father: {fileID: 493861824998956378}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &4141114696578461492
@ -830,3 +831,56 @@ Transform:
m_Children: []
m_Father: {fileID: 7701460482385480461}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &8688796530504241915
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4118684648214416899}
- component: {fileID: 6322483218802957310}
m_Layer: 0
m_Name: Power
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4118684648214416899
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8688796530504241915}
serializedVersion: 2
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: 5262269693041317168}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &6322483218802957310
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8688796530504241915}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5aca1826fdd547e1afd4a67d55a0f25c, type: 3}
m_Name:
m_EditorClassIdentifier:
_isGenerator: 1
_isConsumer: 1
_maxPower: 0
_currentPower: 0
<PowerLost>k__BackingField:
_useConstant: 0
_constantValue: 0
_variable: {fileID: 11400000, guid: 6c917fb47e31d328fb812b6305fe834a, type: 2}
_powerBaseSet: {fileID: 0}

View File

@ -32,7 +32,7 @@ namespace AsteroidGame.Entities
private void InitializePower()
{
powerSystem ??= gameObject.AddComponent<PowerBase>();
powerSystem ??= gameObject.GetComponentInChildren<PowerBase>();
powerSystem.Initialize(_powerConfig);
}

View File

@ -44,7 +44,7 @@ namespace AsteroidGame.Entities
private void HandleWeapon()
{
if (!powerSystem.PowerLost)
if (!powerSystem.PowerLost.Value)
{
if (Targeter.FoundTarget())
{

View File

@ -29,6 +29,7 @@ Transform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 205462139360537208}
- {fileID: 6280290603549554065}
- {fileID: 1742443095838507103}
- {fileID: 989884077484375908}
@ -220,6 +221,59 @@ MeshRenderer:
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &4090424431812845262
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 205462139360537208}
- component: {fileID: 7983208663300763676}
m_Layer: 0
m_Name: Power
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &205462139360537208
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4090424431812845262}
serializedVersion: 2
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: 5898541643653152293}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7983208663300763676
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4090424431812845262}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 5aca1826fdd547e1afd4a67d55a0f25c, type: 3}
m_Name:
m_EditorClassIdentifier:
_isGenerator: 1
_isConsumer: 1
_maxPower: 0
_currentPower: 0
<PowerLost>k__BackingField:
_useConstant: 0
_constantValue: 0
_variable: {fileID: 11400000, guid: 6c917fb47e31d328fb812b6305fe834a, type: 2}
_powerBaseSet: {fileID: 0}
--- !u!1 &4124039516271301344
GameObject:
m_ObjectHideFlags: 0

View File

@ -11,7 +11,7 @@ namespace AsteroidGame.Handlers
[SerializeField] private int _powerConsumptionPeak;
[SerializeField] private IntReference _powerCapacity;
[SerializeField] private float _powerFactor;
[SerializeField] private bool _powerLost;
[SerializeField] private BoolReference _powerLost;
[Header("Connections")]
[SerializeField] private SoPowerSystemRuntimeSet _activePowerStructures;
@ -21,6 +21,7 @@ namespace AsteroidGame.Handlers
_powerConsumption.Value = 0;
_powerConsumptionPeak = 0;
_powerCapacity.Value = 0;
foreach (var structure in _activePowerStructures)
{
if (structure.IsConsumer)
@ -35,15 +36,7 @@ namespace AsteroidGame.Handlers
}
}
_powerLost = _powerConsumption.Value > _powerCapacity.Value;
foreach (IPowerSystem structure in _activePowerStructures)
{
if (structure.IsConsumer)
{
structure.PowerLost = _powerLost;
}
}
_powerLost.Value = _powerConsumption.Value > _powerCapacity.Value;
_powerFactor = _powerCapacity.Value > 0 ? (float)_powerConsumption.Value / _powerCapacity.Value : 0;
}

View File

@ -0,0 +1,23 @@
%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: 168ff32065cd13747a95ae8c9d2a0232, type: 3}
m_Name: PowerHandler.PowerLost
m_EditorClassIdentifier:
_value: 0
_readOnly: 0
_raiseWarning: 1
_isClamped: 0
_minClampedValue: 0
_maxClampedValue: 0
_event:
m_PersistentCalls:
m_Calls: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6c917fb47e31d328fb812b6305fe834a
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant: