open_toontown_panda3d/panda/src/pgraph/attribNodeRegistry.h

89 lines
2.6 KiB
C++

// Filename: attribNodeRegistry.h
// Created by: drose (07Jul07)
//
////////////////////////////////////////////////////////////////////
//
// PANDA 3D SOFTWARE
// Copyright (c) Carnegie Mellon University. All rights reserved.
//
// All use of this software is subject to the terms of the revised BSD
// license. You should have received a copy of this license along
// with this source code in a file named "LICENSE."
//
////////////////////////////////////////////////////////////////////
#ifndef ATTRIBNODEREGISTRY_H
#define ATTRIBNODEREGISTRY_H
#include "pandabase.h"
#include "nodePath.h"
#include "ordered_vector.h"
#include "lightMutex.h"
////////////////////////////////////////////////////////////////////
// Class : AttribNodeRegistry
// Description : This global object records NodePaths that are
// referenced by scene graph attribs, such as
// ClipPlaneAttribs and LightAttribs.
//
// Its primary purpose is to unify attribs that are
// loaded in from bam files. Attrib nodes are
// identified by name and type; when a bam file that
// contains references to some attrib nodes is loaded,
// those nodes are first looked up here in the
// AttribNodeRegistry. If there is a match (by name and
// node type), the identified node is used instead of
// the node referenced within the bam file itself.
////////////////////////////////////////////////////////////////////
class EXPCL_PANDA_PGRAPH AttribNodeRegistry {
protected:
AttribNodeRegistry();
PUBLISHED:
void add_node(const NodePath &attrib_node);
bool remove_node(const NodePath &attrib_node);
NodePath lookup_node(const NodePath &orig_node) const;
int get_num_nodes() const;
NodePath get_node(int n) const;
MAKE_SEQ(get_nodes, get_num_nodes, get_node);
TypeHandle get_node_type(int n) const;
string get_node_name(int n) const;
int find_node(const NodePath &attrib_node) const;
int find_node(TypeHandle type, const string &name) const;
void remove_node(int n);
void clear();
void output(ostream &out) const;
void write(ostream &out) const;
INLINE static AttribNodeRegistry *get_global_ptr();
private:
static void make_global_ptr();
class Entry {
public:
INLINE Entry(const NodePath &node);
INLINE Entry(TypeHandle type, const string &name);
INLINE bool operator < (const Entry &other) const;
TypeHandle _type;
string _name;
NodePath _node;
};
typedef ov_set<Entry> Entries;
Entries _entries;
LightMutex _lock;
static AttribNodeRegistry * TVOLATILE _global_ptr;
};
#include "attribNodeRegistry.I"
#endif