Horizon Official Technical Documentation
GridNPCTrigger Struct Reference

#include <GridNotifiers.hpp>

+ Collaboration diagram for GridNPCTrigger:

Public Member Functions

 GridNPCTrigger (const std::shared_ptr< Horizon::Zone::Unit > &unit)
 
template<class T >
void check_and_trigger (GridRefManager< T > &m)
 
void Visit (GridRefManager< unit_ns(NPC)> &m)
 
template<class NOT_INTERESTED >
void Visit (GridRefManager< NOT_INTERESTED > &)
 
template<>
void Visit (GridRefManager< Player > &m)
 
template<>
void Visit (GridRefManager< Elemental > &m)
 
template<>
void Visit (GridRefManager< Homunculus > &m)
 
template<>
void Visit (GridRefManager< Mercenary > &m)
 
template<>
void Visit (GridRefManager< Pet > &m)
 
template<>
void Visit (GridRefManager< Monster > &m)
 
template<>
void Visit (GridRefManager< Skill > &m)
 
template<>
void Visit (GridRefManager< Item > &m)
 

Public Attributes

std::weak_ptr< Horizon::Zone::Unit_source
 
RangeCheckPredicate _predicate
 

Constructor & Destructor Documentation

◆ GridNPCTrigger()

GridNPCTrigger::GridNPCTrigger ( const std::shared_ptr< Horizon::Zone::Unit > &  unit)
inlineexplicit
207 : _source(unit), _predicate(unit)
208 { }
RangeCheckPredicate _predicate
Definition: GridNotifiers.hpp:204
std::weak_ptr< Horizon::Zone::Unit > _source
Definition: GridNotifiers.hpp:203

Member Function Documentation

◆ check_and_trigger()

template<class T >
void GridNPCTrigger::check_and_trigger ( GridRefManager< T > &  m)
410{
411 if (_source.expired())
412 return;
413
414 using namespace Horizon::Zone::Units;
415 for (typename GridRefManager<T>::iterator iter = m.begin(); iter != typename GridRefManager<T>::iterator(nullptr); ++iter) {
416 std::shared_ptr<NPC> npc = iter->source()->template downcast<NPC>();
417 if (npc == nullptr)
418 continue;
419
420
421 //@TODO npc check and trigger script for npc in range
422 std::shared_ptr<npc_db_data> const &nd = sZone->get_component_of_type<Horizon::Zone::ScriptManager>(Horizon::System::RUNTIME_SCRIPTVM)->npc()->get_npc_from_db(npc->guid());
423 if (nd != nullptr && nd->trigger_range && _predicate(npc, nd->trigger_range)) {
424 std::shared_ptr<Player> player = _source.lock()->downcast<Player>();
425 sZone->get_component_of_type<Horizon::Zone::ScriptManager>(Horizon::System::RUNTIME_SCRIPTVM)->npc()->contact_npc_for_player(player, npc->guid());
426 }
427 }
428}
#define sZone
Definition: Zone.hpp:247
Forward declaration of GridRefManager, the class that manages GridReference.
Definition: GridRefManager.hpp:41
iterator begin()
Definition: GridRefManager.hpp:54
Definition: ScriptManager.hpp:60
Definition: Player.hpp:62
@ RUNTIME_SCRIPTVM
Definition: System.hpp:87
Definition: GameLogicProcess.hpp:43

References _predicate, _source, GridRefManager< OBJECT >::begin(), Horizon::System::RUNTIME_SCRIPTVM, and sZone.

+ Here is the call graph for this function:

◆ Visit() [1/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Elemental > &  m)

◆ Visit() [2/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Homunculus > &  m)

◆ Visit() [3/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Item > &  m)

◆ Visit() [4/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Mercenary > &  m)

◆ Visit() [5/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Monster > &  m)

◆ Visit() [6/10]

template<class NOT_INTERESTED >
void GridNPCTrigger::Visit ( GridRefManager< NOT_INTERESTED > &  )
inline
216{ }

◆ Visit() [7/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Pet > &  m)

◆ Visit() [8/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Player > &  m)

◆ Visit() [9/10]

template<>
void GridNPCTrigger::Visit ( GridRefManager< Skill > &  m)

◆ Visit() [10/10]

void GridNPCTrigger::Visit ( GridRefManager< unit_ns(NPC)> &  m)

Member Data Documentation

◆ _predicate

RangeCheckPredicate GridNPCTrigger::_predicate

Referenced by check_and_trigger().

◆ _source

std::weak_ptr<Horizon::Zone::Unit> GridNPCTrigger::_source

Referenced by check_and_trigger().


The documentation for this struct was generated from the following files: