/**
* Revision 1.4 2002/09/03 17:59:34 sandoz
* Changed to recycle the shadow.
*
* Revision 1.3 2000/05/08 18:05:06 pinkfish
* Fix up the shadow to work correctly with the effects inheritable using
* private variables.
*
* Revision 1.2 1999/04/21 11:47:21 wodan
* fixed small bug in stats function
*
* Revision 1.1 1998/01/06 04:39:04 ceres
* Initial revision
*
*/
#include <origin.h>
inherit "/std/basic/effects";
private object shadowed;
/** @ignore yes */
void setup_shadow( object thing ) {
shadow( thing, 1 );
shadowed = thing;
} /* setup_shadow() */
/** @ignore yes */
void destruct_shadow( object thing ) {
if( thing == TO ) {
if( !SHADOW_H->recycle_shadow(TO) )
destruct(TO);
} else {
thing->destruct_shadow( thing );
}
} /* destruct_shadow() */
/** @ignore yes */
void set_effs( mixed args ) { ::set_effs(args); }
/** @ignore yes */
void set_eeq( mixed args ) { ::set_eeq(args); }
/**
* This method is called by delete_effect(),
* and will removed the effects shadow from the object.
*/
void event_all_effects_deleted() {
if( PO == TO )
destruct_shadow(TO);
} /* event_all_effects_deleted() */
/**
* This method is called by the basic object inherit, and will
* removed all effect shadows from the object when being destructed.
*/
void event_object_being_dested() {
if( PO == shadowed ) {
int i = sizeof( query_effs() );
while( i-- )
TO->remove_effect_shadow( enum_to_sid(i) );
destruct_shadow(TO);
}
} /* event_all_effects_deleted() */
/** @ignore yes */
mixed stats() {
mixed tmp;
if( !pointerp( tmp = (mixed)shadowed->stats() ) )
tmp = ({ });
return ::stats() + tmp;
} /* stats() */