// Profiles
new GuiControlProfile (NetGraphGhostsActiveProfile)
{
   fontColor = "255 255 255";
};
new GuiControlProfile (NetGraphGhostUpdatesProfile)
{
   fontColor = "255 0 0";
};
new GuiControlProfile (NetGraphBitsSentProfile)
{
   fontColor = "0 255 0";
};
new GuiControlProfile (NetGraphBitsReceivedProfile)
{
   fontColor = "0 0 255";
};
new GuiControlProfile (NetGraphLatencyProfile)
{
   fontColor = "0 255 255";
};
new GuiControlProfile (NetGraphPacketLossProfile)
{
   fontColor = "0 0 0";
};

//--- OBJECT WRITE BEGIN ---
new GuiControl(NetGraphGui) {
   profile = "GuiDefaultProfile";
   horizSizing = "left";
   vertSizing = "bottom";
   position = "0 0";
   extent = "640 480";
   minExtent = "8 2";
   visible = "1";
   noCursor = "1";
   
   new GuiGraphCtrl(NetGraph) {
      profile = "GuiDefaultProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "432 5";
      extent = "200 200";
      minExtent = "8 2";
      visible = "1";
    };

   new GuiTextCtrl(Latency) {
      profile = "NetGraphLatencyProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "436 184";
      extent = "100 18";
      minExtent = "8 2";
      visible = "1";
      text = "Latency";
      maxLength = "255";
   };
   new GuiTextCtrl(PacketLoss) {
      profile = "GuiTextProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "536 184";
      extent = "59 18";
      minExtent = "8 2";
      visible = "1";
      text = "Packet Loss";
      maxLength = "255";
   };
   new GuiTextCtrl(BitsReceived) {
      profile = "NetGraphBitsReceivedProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "536 170";
      extent = "100 18";
      minExtent = "8 2";
      visible = "1";
      text = "Bits Received";
      maxLength = "255";
   };
   new GuiTextCtrl(GhostsActive) {
      profile = "NetGraphGhostsActiveProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "436 156";
      extent = "100 18";
      minExtent = "8 2";
      visible = "1";
      text = "Ghosts Active";
      maxLength = "255";
   };
   new GuiTextCtrl(GhostUpdates) {
      profile = "NetGraphGhostUpdatesProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "536 156";
      extent = "100 18";
      minExtent = "8 2";
      visible = "1";
      text = "Ghost Updates";
      maxLength = "255";
   };
   new GuiTextCtrl(BitsSent) {
      profile = "NetGraphBitsSentProfile";
      horizSizing = "left";
      vertSizing = "bottom";
      position = "436 170";
      extent = "100 18";
      minExtent = "8 2";
      visible = "1";
      text = "Bits Sent";
      maxLength = "255";
   };
};
//--- OBJECT WRITE END ---

// Functions
function NetGraph::toggleNetGraph()
{
    if(!$NetGraph::isInitialized)
    {
        $Stats::netGhostUpdates = 0;
        NetGraph::updateStats();
        $NetGraph::isInitialized = true;
    }

    if(!Canvas.isMember(NetGraphGui))
    {
        Canvas.add(NetGraphGui);
    }
    else
      Canvas.remove(NetGraphGui);
}

function NetGraph::updateStats()
{
  $NetGraphThread = NetGraph.schedule(32, "updateStats");

  if(!$Stats::netGhostUpdates)
     return;

  if(isobject(NetGraph))
  {
    if(isobject(ServerConnection))
        NetGraph.addDatum(0,ServerConnection.getGhostsActive());
    GhostsActive.setText("Ghosts Active: " @ ServerConnection.getGhostsActive());
    NetGraph.addDatum(1,$Stats::netGhostUpdates);
    GhostUpdates.setText("Ghost Updates: " @ $Stats::netGhostUpdates);
    $Stats::netGhostUpdates = 0;
    NetGraph.addDatum(2,$Stats::netBitsSent);
    BitsSent.setText("Bits Sent: " @ $Stats::netBitsSent);
    NetGraph.addDatum(3,$Stats::netBitsReceived);
    BitsReceived.setText("Bits Received: " @ $Stats::netBitsReceived);
    NetGraph.matchScale(2,3);
    NetGraph.addDatum(4,ServerConnection.getPing());
    Latency.setText("Latency: " @ ServerConnection.getPing());
    NetGraph.addDatum(5,ServerConnection.getPacketLoss());
    PacketLoss.setText("Packet Loss: " @ ServerConnection.getPacketLoss());
  }
}

function NetGraph::toggleKey()
{
  if(!GhostsActive.visible)
  {
    GhostsActive.visible = 1;
    GhostUpdates.visible = 1;
    BitsSent.visible = 1;
    BitsReceived.visible = 1;
    Latency.visible = 1;
    PacketLoss.visible = 1;
  }
  else
  {
    GhostsActive.visible = 0;
    GhostUpdates.visible = 0;
    BitsSent.visible = 0;
    BitsReceived.visible = 0;
    Latency.visible = 0;
    PacketLoss.visible = 0;
  }
}