| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- #include "LiveWatcher.h"
- LiveWatcher::LiveWatcher()
- {
- }
- LiveWatcher::~LiveWatcher()
- {
- }
- //Инициализировать объект
- bool LiveWatcher::Create(MOPReader & reader)
- {
- ConstString objId = reader.String();
- if(!FindObject(objId, object))
- {
- LogicDebugError("Mission object \"%s\" not found, skip LiveWatcher creation", objId.c_str());
- return false;
- }
- triggerHP = reader.Float()*0.01f;
- trigger.Init(reader);
- Activate(reader.Bool());
- return true;
- }
- //Активировать
- void LiveWatcher::Activate(bool isActive)
- {
- MissionObject::Activate(isActive);
- if(!EditMode_IsOn())
- {
- if(IsActive())
- {
- LogicDebug("Activate");
- SetUpdate(&LiveWatcher::Work, ML_TRIGGERS);
- }else{
- LogicDebug("Deactivate");
- DelUpdate(&LiveWatcher::Work);
- }
- }else{
- DelUpdate(&LiveWatcher::Work);
- }
- }
- //Инициализировать объект
- bool LiveWatcher::EditMode_Create(MOPReader & reader)
- {
- return true;
- }
- //Обновить параметры
- bool LiveWatcher::EditMode_Update(MOPReader & reader)
- {
- return true;
- }
- //Работа детектора
- void _cdecl LiveWatcher::Work(float dltTime, long level)
- {
- if(!object.Validate())
- {
- LogicDebugError("Lost object pointer, detector is off");
- object.Reset();
- Activate(false);
- return;
- }
- float hp = object.Ptr()->GetHP();
- float maxhp = object.Ptr()->GetMaxHP();
- if(maxhp > 0.0f)
- {
- float level = hp/maxhp;
- if(level < triggerHP)
- {
- LogicDebug("Triggering with object HP = %f", level*100.0f);
- trigger.Activate(Mission(), false);
- Activate(false);
- return;
- }
- }else{
- LogicDebugError("Invalidate object (\"%s\") MaxHP (%f<=0), detector is off", object.Ptr()->GetObjectID().c_str(), maxhp);
- object.Reset();
- Activate(false);
- return;
- }
- }
- MOP_BEGINLISTCG(LiveWatcher, "Live watcher", '1.00', 0x0fffffff, "This detector watching object HP and triggering when HP down more then setting", "Logic")
- MOP_STRING("Object id", "")
- MOP_FLOATEXC("HP", 50.0f, 0.0f, 100.0f, "Relative HP value in percents when decector triggering")
- MOP_MISSIONTRIGGERG("Trigger", "")
- MOP_BOOL("Active", true)
- MOP_ENDLIST(LiveWatcher)
|