⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ivp_clustering_visualizer.cxx

📁 hl2 source code. Do not use it illegal.
💻 CXX
📖 第 1 页 / 共 2 页
字号:

    return;
}


void IVP_Clustering_Visualizer_Shortrange::disable() {

    this->enabled = IVP_FALSE;

    return;
}


IVP_BOOL IVP_Clustering_Visualizer_Shortrange::get_state() {

    return(this->enabled);
}


IVP_Clustering_Visualizer_Shortrange::IVP_Clustering_Visualizer_Shortrange() {

    this->enabled = IVP_FALSE; // disabled by default!

    this->accept_filter_intruder         = new IVP_Clustering_Visualizer_Object_Hash(64);
    this->reject_filter_intruder         = new IVP_Clustering_Visualizer_Object_Hash(64);
    this->accept_filter_private_property = new IVP_Clustering_Visualizer_Object_Hash(64);
    this->reject_filter_private_property = new IVP_Clustering_Visualizer_Object_Hash(64);

    this->use_intruder_accept_filter         = IVP_FALSE;
    this->use_intruder_reject_filter         = IVP_FALSE;
    this->use_private_property_accept_filter = IVP_FALSE;
    this->use_private_property_reject_filter = IVP_FALSE;

//    this->remove_longrange_visualization = IVP_TRUE; //IVP_TRUE

    this->boxmode = TRAVERSED_BOXES; //ABORTED_BOXES TERMINALS_ONLY TRAVERSED_BOXES

    this->stats_n_sphere_collisiontests = 0;
    this->stats_n_box_collisiontests = 0;

    return;
}


IVP_Clustering_Visualizer_Shortrange::~IVP_Clustering_Visualizer_Shortrange() {

    this->enabled = IVP_FALSE; // just in case...

    P_DELETE(this->accept_filter_intruder);
    P_DELETE(this->reject_filter_intruder);
    P_DELETE(this->accept_filter_private_property);
    P_DELETE(this->reject_filter_private_property);

    return;
}










/*******************************************************************************
 *******************************************************************************
 *
 *  LONGRANGE CLUSTERING VISUALIZER
 *
 *******************************************************************************
 ******************************************************************************/

IVP_Clustering_Visualizer_Longrange_Callback::~IVP_Clustering_Visualizer_Longrange_Callback() {

    return;
}


/********************************************************************************
 *	Class:	       	IVP_CFEP_Hash
 *	Description:	hash table needed for fast storage of object pairs in
 *					"Exclusive Pair" collision filter
 ********************************************************************************/
class IVP_Clustering_Visualizer_Longrange_Hash : protected IVP_VHash {
protected:
    IVP_BOOL          compare     (void *elem0, void *elem1) const;
    int               obj_to_index(IVP_Real_Object *obj);

public:
    void              add         (IVP_Real_Object *obj);
    IVP_Real_Object * remove      (IVP_Real_Object *obj);
    IVP_Real_Object * find        (IVP_Real_Object *obj);

    IVP_Clustering_Visualizer_Longrange_Hash(int create_size);
    ~IVP_Clustering_Visualizer_Longrange_Hash();
};

IVP_BOOL IVP_Clustering_Visualizer_Longrange_Hash::compare(void *elem0, void *elem1) const {

    IVP_Real_Object *obj0 = (IVP_Real_Object *)elem0;
    IVP_Real_Object *obj1 = (IVP_Real_Object *)elem1;
    
    if ( obj0 != obj1 ) return(IVP_FALSE);
    
    return(IVP_TRUE);
}

int IVP_Clustering_Visualizer_Longrange_Hash::obj_to_index(IVP_Real_Object *obj) {

    return hash_index( (char *)obj, sizeof(obj));
};

void IVP_Clustering_Visualizer_Longrange_Hash::add(IVP_Real_Object *obj) {

    add_elem(obj, obj_to_index(obj));
}

IVP_Real_Object *IVP_Clustering_Visualizer_Longrange_Hash::remove(IVP_Real_Object *obj) {

    return (IVP_Real_Object *)remove_elem(obj, obj_to_index(obj));
}

IVP_Real_Object *IVP_Clustering_Visualizer_Longrange_Hash::find(IVP_Real_Object *obj) {

    return (IVP_Real_Object *)find_elem(obj, obj_to_index(obj));
}

IVP_Clustering_Visualizer_Longrange_Hash::IVP_Clustering_Visualizer_Longrange_Hash(int create_size) : IVP_VHash(create_size) {

    return;
}

IVP_Clustering_Visualizer_Longrange_Hash::~IVP_Clustering_Visualizer_Longrange_Hash() {

    return;
}


/*******************************************************************************
 *******************************************************************************
 *
 *  LONGRANGE CLUSTERING: METHODS
 *
 *******************************************************************************
 ******************************************************************************/

class IVP_Clustering_Visualizer_Longrange_Data {
public:
    IVP_Real_Object *  real_object;
    IVP_U_Float_Point  center;
    IVP_DOUBLE         radius;
};


void IVP_Clustering_Visualizer_Longrange::visualize() {

    if ( !this->enabled ) return;

    int x;
    for (x=this->visualize_data.len()-1; x>=0; x--) {
	IVP_Clustering_Visualizer_Longrange_Data *data = this->visualize_data.element_at(x);
	IVP_Real_Object *real_object = data->real_object;

	if (  real_object->get_core()->physical_unmoveable && !this->visualize_unmoveable_objects) return;
	if ( !real_object->get_core()->physical_unmoveable && !this->visualize_moveable_objects)   return;

	if ( this->use_accept_filter ) {
	    if ( !this->accept_filter->find(real_object) ) return;
	}

	if ( this->use_reject_filter ) {
	    if ( this->reject_filter->find(real_object) ) return;
	}

	int i;
	for (i=0; i<this->graphics_callbacks.len(); i++) {
	    IVP_Clustering_Visualizer_Longrange_Callback *callback = this->graphics_callbacks.element_at(i);

	    callback->real_object = real_object;
	    callback->center.set(&data->center);
	    callback->radius = data->radius;

	    callback->visualize_request();
	}

	this->visualize_data.remove(data);
	P_DELETE(data);
    }

    return;
}


void IVP_Clustering_Visualizer_Longrange::remove_object(IVP_Real_Object *real_object) {

    if ( !this->enabled ) return;

    this->remove_objectdata(real_object);

    int i;
    for (i=0; i<this->graphics_callbacks.len(); i++) {
	IVP_Clustering_Visualizer_Longrange_Callback *callback = this->graphics_callbacks.element_at(i);

	callback->real_object = real_object;
	callback->devisualize_request();
    }

    return;
}


void IVP_Clustering_Visualizer_Longrange::add_object(IVP_Real_Object *real_object, IVP_U_Float_Point *center, IVP_DOUBLE radius) {

    IVP_Clustering_Visualizer_Longrange_Data *data = new IVP_Clustering_Visualizer_Longrange_Data();
    data->real_object = real_object;
    data->center.set(center);
    data->radius = radius;

    this->visualize_data.add(data);

    return;
}


void IVP_Clustering_Visualizer_Longrange::remove_objectdata(IVP_Real_Object *real_object) {

    int x;
    for (x=0; x<this->visualize_data.len(); x++) {
	IVP_Clustering_Visualizer_Longrange_Data *data = this->visualize_data.element_at(x);
	if ( data->real_object != real_object ) continue;
	this->visualize_data.remove(data);
	P_DELETE(data);
	return;
    }

    return;
}


void IVP_Clustering_Visualizer_Longrange::install_visualize_callback(IVP_Clustering_Visualizer_Longrange_Callback *callback) {

    this->graphics_callbacks.add(callback);
    return;
}


void IVP_Clustering_Visualizer_Longrange::remove_visualize_callback(IVP_Clustering_Visualizer_Longrange_Callback *callback) {

    if ( this->graphics_callbacks.index_of(callback) == -1 ) {
	return;
    }
    
    this->graphics_callbacks.remove(callback);
    return;
}


void IVP_Clustering_Visualizer_Longrange::add_object_to_filter(IVP_Real_Object *obj, IVP_CLUSTERING_VISUALIZER_FILTER filter) {

    switch ( filter ) {
    case ACCEPT:
	{
	    if ( !this->accept_filter->find(obj) ) { // pair already stored?
		this->accept_filter->add(obj);       // no, then store now...
	    }
	}
	break;
    case REJECT:
	{
	    if ( !this->reject_filter->find(obj) ) { // pair already stored?
		this->reject_filter->add(obj);       // no, then store now...
	    }
	}
	break;
    }

    return;
}


void IVP_Clustering_Visualizer_Longrange::remove_object_from_filter(IVP_Real_Object *obj, IVP_CLUSTERING_VISUALIZER_FILTER filter) {

    switch ( filter ) {
    case ACCEPT:
	{
	    if ( this->accept_filter->find(obj) ) { // pair stored in hash?
		this->accept_filter->remove(obj); // yes, remove...
	    }
	}
	break;
    case REJECT:
	{
	    if ( this->reject_filter->find(obj) ) { // pair stored in hash?
		this->reject_filter->remove(obj); // yes, remove...
	    }
	}
	break;
    }

    return;
}


void IVP_Clustering_Visualizer_Longrange::enable() {

    int i;
    for (i=0; i<this->graphics_callbacks.len(); i++) {
	IVP_Clustering_Visualizer_Longrange_Callback *callback = this->graphics_callbacks.element_at(i);
	callback->enable();
	callback->enabled = IVP_TRUE;
    }

    this->enabled = IVP_TRUE;

    return;
}


void IVP_Clustering_Visualizer_Longrange::disable() {

    int i;
    for (i=0; i<this->graphics_callbacks.len(); i++) {
	IVP_Clustering_Visualizer_Longrange_Callback *callback = this->graphics_callbacks.element_at(i);
	callback->disable();
	callback->enabled = IVP_FALSE;
    }

    this->enabled = IVP_FALSE;

    return;
}


IVP_BOOL IVP_Clustering_Visualizer_Longrange::get_state() {

    return(this->enabled);
}


IVP_Clustering_Visualizer_Longrange::IVP_Clustering_Visualizer_Longrange() {

    this->enabled = IVP_FALSE;
    this->visualize_moveable_objects = IVP_FALSE; //TRUE;
    this->visualize_unmoveable_objects = IVP_FALSE; //TRUE;

    this->accept_filter = new IVP_Clustering_Visualizer_Longrange_Hash(1024);
    this->reject_filter = new IVP_Clustering_Visualizer_Longrange_Hash(1024);

    return;
}


IVP_Clustering_Visualizer_Longrange::~IVP_Clustering_Visualizer_Longrange() {

    P_DELETE(this->accept_filter);
    P_DELETE(this->reject_filter);

    return;
}






#if 0

IVP_Clustering_Visualizer_Shortrange::IVP_Clustering_Visualizer_Shortrange(IVP_Real_Object *object) {

    // { statistical output
    this->statistics_sphere_collisions = new IVP_BetterStatisticsmanager_Data_Entity(INT_VALUE);
    this->statistics_sphere_collisions->set_text("# of sphere collision tests: ");
    this->statistics_sphere_collisions->set_position(10, 10);

    this->statistics_box_collisions = new IVP_BetterStatisticsmanager_Data_Entity(INT_VALUE);
    this->statistics_box_collisions->set_text("# of box collision tests: ");
    this->statistics_box_collisions->set_position(10, 20);

    this->statistics_true_collisions = new IVP_BetterStatisticsmanager_Data_Entity(INT_VALUE);
    this->statistics_true_collisions->set_text("# of true collisions: ");
    this->statistics_true_collisions->set_position(10, 30);

    this->statistics_terminals = new IVP_BetterStatisticsmanager_Data_Entity(INT_VALUE);
    this->statistics_terminals->set_text("# of terminal collisions: ");
    this->statistics_terminals->set_position(10, 40);

    IVP_BetterStatisticsmanager *stats_manager = this->environment->get_betterstatisticsmanager();
    stats_manager->install_data_entity(this->statistics_sphere_collisions);
    stats_manager->install_data_entity(this->statistics_box_collisions);
    stats_manager->install_data_entity(this->statistics_true_collisions);
    stats_manager->install_data_entity(this->statistics_terminals);
    // statistical output }

    return;
}


#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -