DayZ 1.29
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 строка 781

782 {
783 if ( g_Game.IsMultiplayer() && g_Game.IsClient() )
784 {
785 return m_CanWork;
786 }
787
788 if (!m_ThisEntityAI || m_ThisEntityAI.IsRuined())
789 {
790 return false;
791 }
792
793 // Check if the power source(s) (which can be serially connected) can provide needed energy.
794 float energy_usage = test_energy;
795 float gathered_energy = GetEnergy();
796 EntityAI energy_source = GetEnergySource();
797
798 if (energy_usage == -1)
799 {
800 energy_usage = GetEnergyUsage();
801 }
802
803 if ( !CheckWetness() )
804 {
805 return false;
806 }
807
808 if (gathered_energy <= 0 && energy_usage <= 0) //empty power source
809 {
810 return false;
811 }
812
813 int cycle_limit = 500; // Sanity check to definitely avoid infinite cycles
814
815 while ( gathered_energy < energy_usage ) // Look for energy source if we don't have enough stored energy
816 {
817 // Safetycheck!
818 if (cycle_limit > 0)
819 {
820 cycle_limit--;
821 }
822 else
823 {
824 DPrint("Energy Manager ERROR: The 'cycle_limit' safety break had to be activated to prevent possible game freeze. Dumping debug information...");
825 //Print(m_ThisEntityAI);
826 //Print(this);
827 //Print(energy_source);
828
829 if (energy_source.GetCompEM())
830 {
831 //Print(energy_source.GetCompEM());
832 }
833
834 //Print(gathered_energy);
835 //Print(energy_usage);
836
837 //Print(m_ThisEntityAI.GetPosition());
838
839 if (energy_source)
840 {
841 //Print(energy_source.GetPosition());
842 }
843
844 //Print("End of the 'cycle_limit' safety break ^ ");
845
846 return false;
847 }
848 // ^ Safetycheck!
849
850 if ( energy_source && energy_source != m_ThisEntityAI && !energy_source.IsRuined() && energy_source.GetCompEM() && energy_source.GetCompEM().IsSwitchedOn() && energy_source.GetCompEM().CheckWetness() )
851 {
852 gathered_energy = gathered_energy + energy_source.GetCompEM().GetEnergy();
853 energy_source = energy_source.GetCompEM().GetEnergySource();
854 }
855 else
856 {
857 // No power source, no energy.
858 return false;
859 }
860 }
861
862 // Enough energy was found
863 return true;
864 }
class LogManager EntityAI
DayZGame g_Game
Определения DayZGame.c:3942
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:1253
bool CheckWetness()
Energy manager: Checks if this device is being stopped from working by its wetness level....
Определения ComponentEnergyManager.c:867
float GetEnergy()
Energy manager: Returns the amount of stored energy this device has.
Определения ComponentEnergyManager.c:1259
EntityAI GetEnergySource()
Energy manager: Returns the energy source this device is plugged into.
Определения ComponentEnergyManager.c:1337
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(), g_Game, GetEnergy(), GetEnergySource(), GetEnergyUsage(), m_CanWork и Component::m_ThisEntityAI.

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