# Multiplayer Chat
# ================
#
# 1) Display chat messages from other aircraft to
#    the screen using screen.nas
#
# 2) Display a complete history of chat via dialog.
#
# 3) Allow chat messages to be written by the user.

var messages = {};

check_messages = func
{  

  var mp = props.globals.getNode("/ai/models").getChildren("multiplayer");
  
  foreach (i; mp)
  {
    var lmsg           = getprop(i.getPath() ~ "/sim/multiplay/chat");
    var lcallsign      = getprop(i.getPath() ~ "/callsign");
    
    if ((lmsg != nil) and (lmsg != "") and (lcallsign != nil) and (lcallsign != ""))
    {
      #print("Call Sign: " ~ lcallsign);
      #print("lmsg: " ~ lmsg);
      #print("Freq: " ~ ltransmitfreq);

      if ((! contains(messages, lcallsign)) or (lmsg != messages[lcallsign]))
      {
        # Indicate we've seen this message.
        messages[lcallsign] = lmsg;
        echo_message(lmsg, lcallsign);        
      }
    }
  }
  
  # Check for new messages every couple of seconds.
  settimer(check_messages, 3);  
}

echo_message = func(msg, callsign)
{
   if (callsign != nil)
   {
     msg = callsign ~ ": " ~ msg;
   }
   
   var ldisplay = getprop("/sim/multiplay/chat_display");

   if ((ldisplay != nil) and (ldisplay == "1"))
   {
     # Only display the message to screen if configured.
     setprop("/sim/messages/ai-plane", msg);
   }

   # Add the chat to the chat history.
   var lchat = getprop("/sim/multiplay/chat_history");

   if (lchat == nil)
   {
     setprop("/sim/multiplay/chat_history", msg);
   } 
   else
   {
     if (substr(lchat, size(lchat) -1, 1) != "\n")
     {
       lchat = lchat ~ "\n";
     }
     
     setprop("/sim/multiplay/chat_history", lchat ~ msg);
   }
}


settimer(func {
  # Call-back to ensure we see our own messages.
  setlistener("/sim/multiplay/chat", func{ echo_message(cmdarg().getValue(), getprop("/sim/multiplay/callsign")); });

  # check for new messages
  check_messages();
  
}, 1);