123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 |
- class VehicleBattery : ItemBase
- {
- override bool CanPutAsAttachment(EntityAI parent)
- {
- if (!super.CanPutAsAttachment(parent))
- return false;
-
- if (parent.IsInherited(BatteryCharger))
- {
- BatteryCharger charger = BatteryCharger.Cast(parent);
- return charger.CanReceiveAttachment(this, InventorySlots.INVALID);
- }
-
- if (GetCompEM().GetPluggedDevice())
- return false;
-
- return true;
- }
-
- override bool CanDetachAttachment(EntityAI parent)
- {
- return true;
- }
-
- override bool CanReceiveAttachment(EntityAI attachment, int slotId)
- {
- if (GetCompEM().IsPlugged())
- return false;
-
- return super.CanReceiveAttachment(attachment, slotId);
- }
-
- override bool CanPutIntoHands(EntityAI player)
- {
- if (!super.CanPutIntoHands(parent))
- {
- return false;
- }
-
- if (HasEnergyManager())
- {
- ItemBase poweredDevice = ItemBase.Cast(GetCompEM().GetPluggedDevice());
- if (poweredDevice && poweredDevice.IsInherited(MetalWire))
- {
- return true;
- }
- else if (poweredDevice && poweredDevice.IsOn())
- {
- return false;
- }
- }
- return true;
- }
-
- override bool CanPutInCargo(EntityAI parent)
- {
- if (!super.CanPutInCargo(parent))
- {
- return false;
- }
-
- ItemBase poweredDevice = ItemBase.Cast(GetCompEM().GetPluggedDevice());
- return !(poweredDevice && poweredDevice.IsInherited(MetalWire));
- }
-
- override void OnInventoryEnter(Man player)
- {
- super.OnInventoryEnter(player);
-
- if (GetHierarchyParent() == player || (GetHierarchyParent() && GetHierarchyParent().GetInventory().GetCargo()))
- {
- if (HasEnergyManager())
- {
- ItemBase poweredDevice = ItemBase.Cast(GetCompEM().GetPluggedDevice());
-
- if (poweredDevice)
- {
- if (poweredDevice.IsInherited(MetalWire))
- {
- //Unplug the device the wire is powering, but keep wire plugged to battery
- if (poweredDevice.GetCompEM().IsPlugged())
- poweredDevice.GetCompEM().UnplugDevice(poweredDevice.GetCompEM().GetPluggedDevice());
- }
- else
- {
- this.GetCompEM().UnplugAllDevices();
- }
- }
- }
- }
- }
-
- override void OnMovedInsideCargo(EntityAI container)
- {
- super.OnMovedInsideCargo(container);
-
- if (HasEnergyManager())
- {
- ItemBase poweredDevice = ItemBase.Cast(GetCompEM().GetPluggedDevice());
-
- if (poweredDevice)
- {
- //Should not be possible, but better safe than sorry
- if (poweredDevice.IsInherited(MetalWire))
- {
- poweredDevice.GetCompEM().UnplugAllDevices();
- }
- else
- {
- this.GetCompEM().UnplugAllDevices();
- }
- }
- }
- }
-
- override bool CanDisplayAttachmentSlot(int slot_id)
- {
- if (GetCompEM().IsPlugged())
- return false;
- return super.CanDisplayAttachmentSlot(slot_id);
- }
-
- override bool DisplayNameRuinAttach()
- {
- return true;
- }
-
- override bool ShowZonesHealth()
- {
- return true;
- }
-
- override void SetActions()
- {
- super.SetActions();
-
- AddAction(ActionAttachOnSelection);
- AddAction(ActionDetach);
- AddAction(ActionPlugTargetIntoThis);
- }
-
- //------------------------------------
- //!ENERGY CONSUMPTION
- //------------------------------------
-
- private int m_Efficiency0To10; // Synchronized variable
- static private float m_EfficiencyDecayStart = 0.1; // At this % of maximum energy the output of the battery starts to weaken.
-
- void VehicleBattery()
- {
- m_Efficiency0To10 = 10;
- RegisterNetSyncVariableInt("m_Efficiency0To10");
-
- }
-
- //! Returns efficiency of this battery. The value is synchronized from server to all clients and is accurate down to 0.1 units.
- float GetEfficiency0To1()
- {
- return m_Efficiency0To10 * 0.1;
- }
-
- //! Returns efficiency of this battery. The value is synchronized from server to all clients and is accurate down to 0.1 unit.
- float GetEfficiencyDecayStart()
- {
- return m_EfficiencyDecayStart;
- }
-
- override void OnEnergyConsumed()
- {
- super.OnEnergyConsumed();
-
- #ifdef SERVER
- float energyCoef = GetCompEM().GetEnergy0To1();
-
- if (energyCoef < m_EfficiencyDecayStart && m_EfficiencyDecayStart > 0)
- {
- m_Efficiency0To10 = Math.Round((energyCoef / m_EfficiencyDecayStart) * 10);
- }
- SetSynchDirty();
- #endif
- }
-
- // BatteryCharging
- override void OnEnergyAdded()
- {
- super.OnEnergyAdded();
-
- #ifdef SERVER
- float energyCoef = GetCompEM().GetEnergy0To1();
-
- if (energyCoef < m_EfficiencyDecayStart && m_EfficiencyDecayStart > 0)
- {
- m_Efficiency0To10 = Math.Round((energyCoef / m_EfficiencyDecayStart) * 10);
- }
- else
- {
- m_Efficiency0To10 = 10;
- }
-
- SetSynchDirty();
- #endif
- }
- }
|