class stub_HUD extends HUD_StoryMode;


// functions to replace
struct MsgStruct
{
  var string Msg;
  var int count;
  var float time;
};
var transient array<MsgStruct> MsgArray;


simulated function DrawHudPassC(Canvas C)
{
  DrawFadeEffect(C);

  if (bShowScoreBoard && ScoreBoard != none)
  {
    ScoreBoard.DrawScoreboard(C);
  }

  // portrait
  if (bShowPortrait && Portrait != none)
  {
    DrawPortrait(C);
  }

  // Comment Out for Release
  if (Level.NetMode == NM_StandAlone)
  {
    DrawCrosshair(C);
  }

  // TEST
  DrawPointSphere();
  // Slow, for debugging only
  // if ( bDebugPlayerCollision && (class'ROEngine.ROLevelInfo'.static.RODebugMode() || Level.NetMode == NM_StandAlone) )
  // {

  // }
}


simulated function Message(PlayerReplicationInfo PRI, coerce string Msg, name MsgType)
{
  local class<LocalMessage> LocalMessageClass;

  // portrait switch
  if (!class'Settings'.default.bHidePortraits && PRI != none && MsgType == 'Say' || MsgType == 'TeamSay')
    DisplayPortrait(PRI);

  if (class'Settings'.default.bHideNoPRImessages && PRI == none)
    return;

  // do not allow spam bullshit
  // if (!class'stub_HUD'.static.AllowMessage(class'stub_HUD'.default.MsgArray, PlayerOwner.Level.TimeSeconds, PRI, Msg, MsgType))
  //   return;

  switch (MsgType)
  {
    case 'Trader':
      Msg = TraderString$":" @ Msg;
      LocalMessageClass = class'SayMessagePlus';
      break;
    case 'Voice':
    case 'Say':
      if (PRI == none)
      {
        return;
      }

      Msg = PRI.PlayerName $ ":" @ Msg;
      LocalMessageClass = class'SayMessagePlus';
      break;
    case 'TeamSay':
      if (PRI == none)
      {
        return;
      }

      Msg = PRI.PlayerName $ "(" $ PRI.GetLocationName() $ "):" @ Msg;
      LocalMessageClass = class'TeamSayMessagePlus';
      break;
    case 'CriticalEvent':
      LocalMessageClass = class'KFCriticalEventPlus';
      LocalizedMessage(LocalMessageClass, 0, None, None, None, Msg);
      return;
    case 'DeathMessage':
      LocalMessageClass = class'xDeathMessage';
      break;
    default:
      LocalMessageClass = class'StringMessagePlus';
      break;
  }
  AddTextMessage(Msg, LocalMessageClass, PRI);
}


// final static function bool AllowMessage(array<MsgStruct> MsgArray, float TimeSeconds, PlayerReplicationInfo PRI, coerce string Msg, name MsgType)
// {
//   local int i, idx, len, nonPRI_limit, PRI_limit;
//   local bool bFoundEntry;

//   len = MsgArray.length;

//   // at first search string in DB array
//   if (len > 0)
//   {
//     for (i = 0; i < len; i++)
//     {
//       if (Msg ~= MsgArray[i].Msg)
//       {
//         idx = i;
//         bFoundEntry = true;
//         break;
//       }
//     }
//   }
//   else
//   {
//     MsgArray[0].Msg = Msg;
//     MsgArray[0].count = 0;
//     MsgArray[0].time = TimeSeconds;
//     return true;
//   }


//   // add to DB array if its unique string
//   if (!bFoundEntry)
//   {
//     MsgArray[len].Msg = Msg;
//     MsgArray[len].count = 0;
//     MsgArray[len].time = TimeSeconds;
//     log("Message : " $ Msg $ " added at " $ TimeSeconds);
//     // break here, this is an unique msg
//     return true;
//   }
// }