140 lines
5.3 KiB
C#
140 lines
5.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Threading;
|
|
using Microsoft.Xna.Framework;
|
|
using Microsoft.Xna.Framework.Graphics;
|
|
|
|
namespace MrAG
|
|
{
|
|
public class Overlay
|
|
{
|
|
public class GamerServicesOverlayException : Exception{
|
|
public GamerServicesOverlayException(string msg): base(msg){
|
|
}
|
|
}
|
|
|
|
private class NoticeSystem
|
|
{
|
|
public class Popup
|
|
{
|
|
public byte MsgID = 0;
|
|
public byte Icon;
|
|
public string Title;
|
|
public string Message;
|
|
public short DisplayTime = 6000;
|
|
public double ScrollInTime = 1500;
|
|
|
|
private Texture2D PrevImg;
|
|
private double CreateTime;
|
|
|
|
public Popup(byte icon, string text){
|
|
Icon = icon;
|
|
Title = "";
|
|
Message = text;
|
|
CreateTime = DateTime.Now.TimeOfDay.TotalMilliseconds;
|
|
}
|
|
|
|
public Popup(byte icon, string title, string text){
|
|
Icon = icon;
|
|
Title = title;
|
|
Message = text;
|
|
CreateTime = DateTime.Now.TimeOfDay.TotalMilliseconds;
|
|
|
|
if (icon == 1) {
|
|
PrevImg = Gamerservices.GetAvatar(title);
|
|
}
|
|
}
|
|
|
|
public bool Draw(SpriteBatch sb, int y){
|
|
double restime = Math.Abs(DateTime.Now.TimeOfDay.TotalMilliseconds - CreateTime);
|
|
if (restime > DisplayTime) return true;
|
|
|
|
int x = 0;
|
|
int alpha = 255;
|
|
|
|
if (restime < DisplayTime - ScrollInTime + 1){
|
|
restime = Math.Min(restime, ScrollInTime);
|
|
alpha = (int)Math.Min((restime / ScrollInTime) * 256.0, 256);
|
|
x = WindowWidth - alpha;
|
|
}else{
|
|
restime -= DisplayTime - ScrollInTime;
|
|
alpha = (int)Math.Min((restime / ScrollInTime) * 256.0, 256);
|
|
x = WindowWidth - 256 + alpha;
|
|
alpha = 256 - alpha;
|
|
}
|
|
|
|
|
|
sb.Draw(NoticeTexture, new Rectangle(x - 10, y, 256, 56), new Color(255, 255, 255, alpha));
|
|
if (PrevImg != null)
|
|
sb.Draw(PrevImg, new Rectangle(x - 7, y + 3, 50, 50), new Color(255, 255, 255, alpha));
|
|
|
|
sb.DrawString(NoticeFont_Title, Title, new Vector2(x + 50, y + 4), new Color(0, 0, 0, alpha));
|
|
sb.DrawString(NoticeFont_Text, Message, new Vector2(x + 50, y + 25), new Color(0, 0, 0, alpha));
|
|
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static List<Popup> Popups = new List<Popup>();
|
|
}
|
|
|
|
private static bool EnableNotices;
|
|
|
|
private static SpriteFont NoticeFont_Title;
|
|
private static SpriteFont NoticeFont_Text;
|
|
private static Texture2D NoticeTexture;
|
|
//private static Texture2D[] NoticeTypes;
|
|
|
|
private static byte CurrentMessageID;
|
|
public static Delegate OnNotice;
|
|
public static int WindowWidth = 0;
|
|
|
|
public static void LoadContent(Microsoft.Xna.Framework.Content.ContentManager man, string MrAGContentPath, int windowwidth){
|
|
try{
|
|
NoticeFont_Title = man.Load<SpriteFont>(MrAGContentPath + "/notice_title");
|
|
NoticeFont_Text = man.Load<SpriteFont>(MrAGContentPath + "/notice_text");
|
|
NoticeTexture = man.Load<Texture2D>(MrAGContentPath + "/notice_background");
|
|
}catch{
|
|
throw new GamerServicesOverlayException("Could not find overlay files: " + man.RootDirectory + "/" + MrAGContentPath + "/notice_*****");
|
|
}
|
|
|
|
WindowWidth = windowwidth;
|
|
}
|
|
|
|
public static void AddNotice(byte type, string title, string message){
|
|
NoticeSystem.Popups.Add(new NoticeSystem.Popup(type, title, message));
|
|
|
|
CurrentMessageID++;
|
|
NoticeSystem.Popups[NoticeSystem.Popups.Count - 1].MsgID = CurrentMessageID;
|
|
}
|
|
|
|
public static void AddNotice(byte type, string message){
|
|
NoticeSystem.Popups.Add(new NoticeSystem.Popup(type, "", message));
|
|
|
|
CurrentMessageID++;
|
|
NoticeSystem.Popups[NoticeSystem.Popups.Count - 1].MsgID = CurrentMessageID;
|
|
}
|
|
|
|
public static void InitilizeSystem(bool noticesenabled){
|
|
EnableNotices = noticesenabled;
|
|
if (noticesenabled) NoticeSystem.Popups.Add(new NoticeSystem.Popup(0, "Notice", "Your now online.\nUse alt + ctrl + del for MrAG overlay"));
|
|
}
|
|
|
|
public static void Close(){
|
|
}
|
|
|
|
public static void Draw(SpriteBatch sb){
|
|
lock (NoticeSystem.Popups){
|
|
for (int i = 0; i < NoticeSystem.Popups.Count; i++){
|
|
if (NoticeSystem.Popups[i].Draw(sb, 12 + (i * 68))){
|
|
NoticeSystem.Popups.RemoveAt(i);
|
|
i--;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|