/*******************************************************************************
* Copyright (c) 2015
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*******************************************************************************/
package jsettlers.common.menu.messages;
import jsettlers.common.position.ShortPoint2D;
/**
* This is a message for the user, that is displayed at the users screen.
*
* @author michael
*/
public interface IMessage {
/**
* Number of messages that queue can hold at largest.
*/
public static final int MAX_MESSAGES = 16;
/**
* Longest duration for which messages should remain in queue, in milliseconds.
*/
public static final long MESSAGE_TTL = 90000;
/**
* Map grid distance beyond which two messages should be considered sufficiently different to be prompted separately.
*/
public static final int MESSAGE_DIST_THRESHOLD = 24;
/**
* Gets the type of this message.
*
* @return The type the message has.
*/
EMessageType getType();
/**
* Gets the age of the message, that is the time since it was sent.
*
* @return The time it was sent in milliseconds.
*/
int getAge();
/**
* Gets the message content. Only used for chat messages.
*
* @return A string that can be displayed to the user. Never null.
*/
String getMessage();
/**
* Gets the Player that send the message, as byte. If the message is a status message for the current user, the sender is -1. For attack messages,
* this is also used.
*
* @return The sender.
*/
byte getSender();
/**
* gets the position where the event occured.
*
* @return A point describing the message position on the map. May be outside the map.
*/
ShortPoint2D getPosition();
/**
* Compares this message to another one and decides whether they are redundant.
*
* @param m The message to compare to.
* @return true, if redundant.
*/
boolean duplicates(IMessage m);
/**
* Grow older by the specified number of milliseconds.
*
* @param milliseconds Number of milliseconds this message is to get older by.
* @return resulting age in milliseconds.
*/
int ageBy(int milliseconds);
}