/* Do not remove the headers from this file! see /USAGE for more info. */
/*
** msg_recipient.c -- handle message passing for objects
**
** DOWNWARD: into the contents of the object
** UPWARD: up to this object's container
**
** 960603, Deathblade: added this header re: directions
*/
//:FUNCTION environment_can_hear
//Returns 1 if messages should propagate upwards to our environment.
int environment_can_hear()
{
object env = environment();
return env && !env->cant_hear_contents();
}
//:FUNCTION receive_inside_msg
//Handle a message received from inside us (which should never happen, but...)
//Inside messages propogate upward and downward, but we have no downward
varargs void
receive_inside_msg(string msg, object array exclude, int message_type,
mixed other)
{
object env;
receive(msg);
if(environment_can_hear() && (env = environment()) &&
(!arrayp(exclude) || member_array(env,exclude) == -1))
{
env->receive_inside_msg(msg, arrayp(exclude) ? exclude +
({this_object()}) : ({this_object()}),
message_type, other);
}
}
//:FUNCTION receive_outside_msg
//Receive a message from outside of us.
//Outside messages propogate downward, so just receive
varargs void
receive_outside_msg(string msg, object array exclude, int message_type,
mixed other)
{
receive(msg);
}
//### Where is this used? Is it needed? What is it's purpose?
//Remote messages propogate just like an inside message by default
varargs void
receive_remote_msg(string msg, object array exclude, int message_type,
mixed other)
{
receive_inside_msg(msg, exclude, message_type, other);
}
//:FUNCTION receive_private_msg
//Receive a message sent just to us.
varargs void
receive_private_msg(string msg, int message_type, mixed other)
{
receive(msg);
}