Crossfire Server, Trunk  R22047
Archetypes Class Reference

#include <Archetypes.h>

+ Inheritance diagram for Archetypes:
+ Collaboration diagram for Archetypes:

Public Types

typedef std::function< void(archetype *, archetype *)> updateListener
 

Public Member Functions

 Archetypes ()
 
void clearReplaceListener ()
 
archetype * findByObjectName (const char *name)
 
archetype * findByObjectTypeName (int type, const char *name)
 
archetype * findBySkillNameAndType (const char *skill, int type)
 
archetype * findByTypeSubtype (int type, int subtype)
 
void setReplaceListener (updateListener fct)
 
- Public Member Functions inherited from AssetsCollection< archetype >
void clear ()
 
size_t count () const
 
archetype * define (const std::string &name, archetype *asset)
 
void each (std::function< void(archetype *)> op)
 
archetype * find (const std::string &name)
 
archetype * get (const std::string &name)
 
archetype * next (archetype *current)
 
const std::set< std::string > & undefined () const
 

Static Public Member Functions

static void recursive_update (object *item, archetype *updated)
 

Protected Member Functions

virtual archetype * create (const std::string &name)
 
virtual void destroy (archetype *item)
 
virtual void replace (archetype *existing, archetype *update)
 
- Protected Member Functions inherited from AssetsCollection< archetype >
virtual void added (archetype *)
 

Protected Attributes

updateListener m_updateListener
 
- Protected Attributes inherited from AssetsCollection< archetype >
std::map< std::string, archetype *> m_assets
 
std::set< std::string > m_undefined
 

Detailed Description

All archetypes in the game.

Definition at line 27 of file Archetypes.h.

Member Typedef Documentation

◆ updateListener

typedef std::function<void(archetype*, archetype*)> Archetypes::updateListener

Function prototype to be called when an archetype changes.

Definition at line 31 of file Archetypes.h.

Constructor & Destructor Documentation

◆ Archetypes()

Archetypes::Archetypes ( )
inline

Standard constructor.

Definition at line 36 of file Archetypes.h.

References empty_archetype.

Member Function Documentation

◆ clearReplaceListener()

void Archetypes::clearReplaceListener ( )
inline

Remvove the listener for archetypes changes.

Definition at line 51 of file Archetypes.h.

References create(), destroy(), findByObjectName(), findByObjectTypeName(), findBySkillNameAndType(), findByTypeSubtype(), m_updateListener, recursive_update(), and replace().

Referenced by AssetsManager::~AssetsManager().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ create()

archetype * Archetypes::create ( const std::string &  name)
protectedvirtual

Create a new asset.

Parameters
nameasset unique name.
Returns
asset.

Implements AssetsCollection< archetype >.

Definition at line 17 of file Archetypes.cpp.

References add_string(), CLEAR_FLAG, FLAG_REMOVED, and get_archetype_struct().

Referenced by clearReplaceListener().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ destroy()

void Archetypes::destroy ( archetype *  item)
protectedvirtual

Destroy an asset.

Parameters
itemasset to destroy.

Implements AssetsCollection< archetype >.

Definition at line 24 of file Archetypes.cpp.

References free_arch(), and object_free_inventory().

Referenced by clearReplaceListener().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ findByObjectName()

archetype * Archetypes::findByObjectName ( const char *  name)

Retrieve an archetype given the name that appears during the game (for example, "writing pen" instead of "stylus").

Parameters
namethe name we're searching for (ex: "writing pen")
Returns
the archetype found or NULL if nothing was found

Definition at line 80 of file Archetypes.cpp.

References find_string(), and AssetsCollection< archetype >::m_assets.

Referenced by clearReplaceListener(), create_archetype_by_object_name(), and find_archetype_by_object_name().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ findByObjectTypeName()

archetype * Archetypes::findByObjectTypeName ( int  type,
const char *  name 
)

Retrieve an archetype by type and name that appears during the game. It is basically the same as findByObjectName() except that it considers only items of the given type.

Parameters
typeitem type we're searching
namethe name we're searching for (ex: "writing pen")
Returns
found archetype, NULL if none matched.

Definition at line 95 of file Archetypes.cpp.

References AssetsCollection< archetype >::m_assets.

Referenced by clearReplaceListener(), and find_archetype_by_object_type_name().

+ Here is the caller graph for this function:

◆ findBySkillNameAndType()

archetype * Archetypes::findBySkillNameAndType ( const char *  skill,
int  type 
)

Retrieve an archetype by skill name and type.

Parameters
skillskill to search for. Must not be NULL.
typeitem type to search for. -1 means that it doesn't matter.
Returns
matching archetype, or NULL if none found.

Definition at line 107 of file Archetypes.cpp.

References AssetsCollection< archetype >::m_assets.

Referenced by clearReplaceListener(), and get_archetype_by_skill_name().

+ Here is the caller graph for this function:

◆ findByTypeSubtype()

archetype * Archetypes::findByTypeSubtype ( int  type,
int  subtype 
)

Retrieve an archetype by type and subtype. This returns the first archetype that matches both the type and subtype. type and subtype can be -1 to say ignore, but in this case, the match it does may not be very useful. This function is most useful when subtypes are known to be unique for a particular type (eg, skills).

Parameters
typeobject type to search for. -1 means any
subtypeobject subtype to search for. -1 means any
Returns
matching archetype, or NULL if none found.

Definition at line 119 of file Archetypes.cpp.

References AssetsCollection< archetype >::m_assets.

Referenced by clearReplaceListener(), and get_archetype_by_type_subtype().

+ Here is the caller graph for this function:

◆ recursive_update()

void Archetypes::recursive_update ( object *  item,
archetype *  updated 
)
static

Update if needed item based on the updated archetype, then recurse on item->below and item->inv. Updating implies getting the difference with the obsolete archetype's clone, then applying it to the updated version of the archetype. Inventory items of the updated version are not taken into account.

Parameters
itemwhat to update from.
updatedupdated archetype.

Definition at line 29 of file Archetypes.cpp.

References get_ob_diff(), object_copy_with_inv(), object_free_inventory(), set_variable(), stringbuffer_finish(), and stringbuffer_new().

Referenced by AssetsManager::archetypeUpdated(), clearReplaceListener(), and replace().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ replace()

void Archetypes::replace ( archetype *  existing,
archetype *  update 
)
protectedvirtual

Replace an asset by an updated version.

Parameters
existingasset to be updated.
updatenew version of the asset, which must be destroyed.

Implements AssetsCollection< archetype >.

Definition at line 60 of file Archetypes.cpp.

References free_arch(), AssetsCollection< archetype >::m_assets, m_updateListener, mark_inv_not_removed(), object_copy_with_inv(), object_free_inventory(), and recursive_update().

Referenced by clearReplaceListener().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setReplaceListener()

void Archetypes::setReplaceListener ( updateListener  fct)
inline

Set the listener to be called when an archetype is updated.

Parameters
fctlistener, may be an empty std::function.

Definition at line 44 of file Archetypes.h.

References m_updateListener.

Referenced by AssetsManager::AssetsManager().

+ Here is the caller graph for this function:

Field Documentation

◆ m_updateListener

updateListener Archetypes::m_updateListener
protected

Definition at line 122 of file Archetypes.h.

Referenced by clearReplaceListener(), replace(), and setReplaceListener().


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