DayZ 1.30
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 строка 768

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