WIP PowerSystem

This commit is contained in:
Stedd 2022-10-05 23:56:48 +02:00
parent b1f2446fa6
commit 4027bf3c97
20 changed files with 189 additions and 37 deletions

View File

@ -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: []

View File

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

View File

@ -0,0 +1,10 @@
using AsteroidGame.ScriptableObjects;
using UnityEngine;
namespace AsteroidGame.Entities
{
[CreateAssetMenu(fileName = "newPowerBaseRuntimeSet", menuName = "RuntimeSet/PowerBase")]
public class SPowerBaseRuntimeSet : SRuntimeSet<PowerBase>
{
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3c46c7dedba14f3da958a2e6a3d3feaa
timeCreated: 1665006553

View File

@ -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;
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 87159085b5778b14482ec38673729d95
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 087e96d3ceec42f9aba85753a4b8d15f
timeCreated: 1665005789

View File

@ -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
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 5aca1826fdd547e1afd4a67d55a0f25c
timeCreated: 1665006027

View File

@ -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

View File

@ -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

View File

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

View File

@ -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<PowerBase>();
_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

View File

@ -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}

View File

@ -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

View File

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

View File

@ -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)
{

View File

@ -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}