bool CreatureEvents::registerEvent(Event* event, const pugi::xml_node&) { CreatureEvent* creatureEvent = dynamic_cast<CreatureEvent*>(event); if (!creatureEvent) { return false; } if (creatureEvent->getEventType() == CREATURE_EVENT_NONE) { std::cout << "Error: [CreatureEvents::registerEvent] Trying to register event without type!" << std::endl; return false; } CreatureEvent* oldEvent = getEventByName(creatureEvent->getName(), false); if (oldEvent) { //if there was an event with the same that is not loaded //(happens when realoading), it is reused if (!oldEvent->isLoaded() && oldEvent->getEventType() == creatureEvent->getEventType()) { oldEvent->copyEvent(creatureEvent); } return false; } else { //if not, register it normally m_creatureEvents[creatureEvent->getName()] = creatureEvent; return true; } }
bool CreatureEvents::registerEvent(Event_ptr event, const pugi::xml_node&) { CreatureEvent_ptr creatureEvent{static_cast<CreatureEvent*>(event.release())}; //event is guaranteed to be a CreatureEvent if (creatureEvent->getEventType() == CREATURE_EVENT_NONE) { std::cout << "Error: [CreatureEvents::registerEvent] Trying to register event without type!" << std::endl; return false; } CreatureEvent* oldEvent = getEventByName(creatureEvent->getName(), false); if (oldEvent) { //if there was an event with the same that is not loaded //(happens when realoading), it is reused if (!oldEvent->isLoaded() && oldEvent->getEventType() == creatureEvent->getEventType()) { oldEvent->copyEvent(creatureEvent.get()); } return false; } else { //if not, register it normally auto it = creatureEvents.find(creatureEvent->getName()); if (it != creatureEvents.end()) { it->second = *creatureEvent; } else { creatureEvents.emplace(creatureEvent->getName(), std::move(*creatureEvent)); } return true; } }