/**
* DirectedBroadcast
*
*
*/
package key.effect;
import key.*;
import java.util.StringTokenizer;
/**
* A communication effect that goes to an entire
* medium, such as a room or channel. (Technically,
* it goes to any scape)
*/
public class DirectedBroadcast extends Broadcast
{
Splashable directedAt;
String otherMessage;
char targetCode;
/**
* Creates a new communication
*
* @param from the player who sent it
* @param location where the local effect is to take place
* @param main the message to show to everyone in the location scape
* @param self the message to show to the player
* @param other the UNPARSED other message
*/
public DirectedBroadcast( Scape location, Player from, Splashable to, String main, String self, String other, char tCode )
{
super( location, from, main, self );
directedAt = to;
otherMessage = other;
targetCode = tCode;
}
public String getMessage( Player receiver )
{
if( originator == receiver )
return( super.getMessage( receiver ) );
else
{
if( directedAt instanceof PlayerGroup )
{
if( ((PlayerGroup)directedAt).containsPlayer( receiver ) )
originator.putCode( targetCode, ((PlayerGroup)directedAt).allNames( receiver ) );
else
return( super.getMessage( receiver ) );
}
else
{
if( receiver == directedAt )
originator.putCode( targetCode, "you" );
else
return( super.getMessage( receiver ) );
}
return( Grammar.substitute( otherMessage, originator.getCodes() ) );
}
}
/**
* Directly splashes the location, with the exception of those
* in the directedAt, who are splashed directly themselves
*/
public void cause()
{
loc.splashExcept( this, directedAt, null );
directedAt.splash( this, null );
}
/**
* Doesn't splash the directedAt people directly,
* instead, this routine is used when we can
* guarantee that the players will be in the location
* scape.
*/
public void causeExclusive()
{
loc.splash( this, null );
}
}