DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ CanWork()

bool ComponentEnergyManager::CanWork ( float test_energy = -1)
inlineprotected

Energy manager: Checks whenever this device can do work or not.

Аргументы
test_energyfloat optional parameter will overwite the default energy consumption value of this device.
Возвращает
bool Returns true if this device will work when it's switched on. Otherwise it returns false.

См. определение в файле ComponentEnergyManager.c строка 757

758 {
759 if ( GetGame().IsMultiplayer() && GetGame().IsClient() )
760 {
761 return m_CanWork;
762 }
763
764 if (m_ThisEntityAI && m_ThisEntityAI.IsRuined())
765 {
766 return false;
767 }
768
769 // Check if the power source(s) (which can be serially connected) can provide needed energy.
770 float energy_usage = test_energy;
771 float gathered_energy = GetEnergy();
772 EntityAI energy_source = GetEnergySource();
773
774 if (energy_usage == -1)
775 {
776 energy_usage = GetEnergyUsage();
777 }
778
779 if ( !CheckWetness() )
780 {
781 return false;
782 }
783
784 if (gathered_energy <= 0 && energy_usage <= 0) //empty power source
785 {
786 return false;
787 }
788
789 int cycle_limit = 500; // Sanity check to definitely avoid infinite cycles
790
791 while ( gathered_energy < energy_usage ) // Look for energy source if we don't have enough stored energy
792 {
793 // Safetycheck!
794 if (cycle_limit > 0)
795 {
796 cycle_limit--;
797 }
798 else
799 {
800 DPrint("Energy Manager ERROR: The 'cycle_limit' safety break had to be activated to prevent possible game freeze. Dumping debug information...");
801 //Print(m_ThisEntityAI);
802 //Print(this);
803 //Print(energy_source);
804
805 if (energy_source.GetCompEM())
806 {
807 //Print(energy_source.GetCompEM());
808 }
809
810 //Print(gathered_energy);
811 //Print(energy_usage);
812
813 //Print(m_ThisEntityAI.GetPosition());
814
815 if (energy_source)
816 {
817 //Print(energy_source.GetPosition());
818 }
819
820 //Print("End of the 'cycle_limit' safety break ^ ");
821
822 return false;
823 }
824 // ^ Safetycheck!
825
826 if ( energy_source && energy_source != m_ThisEntityAI && !energy_source.IsRuined() && energy_source.GetCompEM() && energy_source.GetCompEM().IsSwitchedOn() && energy_source.GetCompEM().CheckWetness() )
827 {
828 gathered_energy = gathered_energy + energy_source.GetCompEM().GetEnergy();
829 energy_source = energy_source.GetCompEM().GetEnergySource();
830 }
831 else
832 {
833 // No power source, no energy.
834 return false;
835 }
836 }
837
838 // Enough energy was found
839 return true;
840 }
class LogManager EntityAI
EntityAI m_ThisEntityAI
Определения Component.c:24
float GetEnergyUsage()
Energy manager: Returns the number of energy this device needs to run itself (See its config >> energ...
Определения ComponentEnergyManager.c:1208
bool CheckWetness()
Energy manager: Checks if this device is being stopped from working by its wetness level....
Определения ComponentEnergyManager.c:843
float GetEnergy()
Energy manager: Returns the amount of stored energy this device has.
Определения ComponentEnergyManager.c:1214
EntityAI GetEnergySource()
Energy manager: Returns the energy source this device is plugged into.
Определения ComponentEnergyManager.c:1292
proto native CGame GetGame()
proto void DPrint(string var)
Prints content of variable to console/log. Should be used for critical messages so it will appear in ...

Перекрестные ссылки CheckWetness(), DPrint(), GetEnergy(), GetEnergySource(), GetEnergyUsage(), GetGame(), m_CanWork и Component::m_ThisEntityAI.

Используется в UpdateCanWork().