利用mvc 和数据结合来做mail 邮件系统
先看看效果做出来的效果 ,当然很多效果都是必须建立在你了解的基础上才能够更好的完成 不多说 直接看效果
M:代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MailModle {
private MailModle()
{
GetAwardItemInfo();
GetMailItemInfo();
}
static MailModle _intance;
public static MailModle Instance()
{
if (_intance == null)
{
_intance = new MailModle();
}
return _intance;
}
public struct AwardInfo
{
public string id;
public string name;
public string icon;
}
public enum MailType
{
COMMON=0,
AWARD=1
}
public struct AwardItem
{
public string id;
public int count;
public AwardInfo awardInfo;
}
public struct MailInfo
{
public string id;
public MailType mailType;
public string title;
public string content;
public string time;
public string taskid;
public List<AwardItem> awardItem;
}
Dictionary<string, AwardInfo> awardDit = new Dictionary<string, AwardInfo>();
Dictionary<string, MailInfo> mailDit = new Dictionary<string, MailInfo>();
List<MailInfo> mailInfoList = new List<MailInfo>();
void GetAwardItemInfo()
{
TextAsset textAsset = Resources.Load("award",typeof(TextAsset)) as TextAsset;
string tempString = textAsset.text.Replace("\r\n","\r");
string[] tempArray = tempString.Split("\r"[0]);
AwardInfo tempAwardInfo = new AwardInfo();
for(int i = 1; i < tempArray.Length - 1; i++)
{
string[] tempStr = tempArray[i].Split(","[0]);
tempAwardInfo.id = tempStr[0];
tempAwardInfo.name = tempStr[1];
tempAwardInfo.icon = tempStr[2];
awardDit.Add(tempAwardInfo.id,tempAwardInfo);
}
}
AwardInfo GetAwardById(string id)
{
return awardDit[id];
}
void GetMailItemInfo()
{
TextAsset textAssent = Resources.Load("mail",typeof(TextAsset))as TextAsset;
string tempString = textAssent.text.Replace("\r\n","\r");
string[] tempArray = tempString.Split("\r"[0]);
MailInfo tempMailInfo = new MailInfo();
AwardItem awardItem = new AwardItem();
for(int i = 1; i < tempArray.Length-1; i++)
{
string[] tempStr = tempArray[i].Split(","[0]);
tempMailInfo.id = tempStr[0];
tempMailInfo.mailType = (MailType)Enum.Parse(typeof(MailType),tempStr[1]);
tempMailInfo.title = tempStr[2];
tempMailInfo.content = tempStr[3];
tempMailInfo.awardItem = new List<AwardItem>();
for (int j = 4; j < tempStr.Length; j++)
{
if (tempStr[j].Equals(""))
{
break;
}
if (j % 2 == 0)
{
awardItem.id = tempStr[j];
continue;
}
else
{
awardItem.count = int.Parse(tempStr[j]);
}
awardItem.awardInfo = GetAwardById(awardItem.id);
tempMailInfo.awardItem.Add(awardItem);
}
mailDit.Add(tempMailInfo.id, tempMailInfo);
}
}
public MailInfo GetMailInfoById(string id)
{
return mailDit[id];
}
public void AddMail(string id,MailType type,string time,string title=null,string content=null, string taskid=null)
{
MailInfo mailInfo = new MailInfo();
if (type == MailType.COMMON) {
mailInfo.id = id;
mailInfo.mailType = type;
mailInfo.time = time;
mailInfo.title = title;
mailInfo.content = content;
}else
{
mailInfo = GetMailInfoById(id);
List<AwardItem> list = mailInfo.awardItem;
mailInfo.time = time;
}
mailInfo.taskid = taskid;
Debug.Log("AddMail:::::"+mailInfo.taskid);
mailInfoList.Add(mailInfo);
}
public void RemoveMail(int index)
{
mailInfoList.RemoveAt(index);
}
public List<MailInfo> GetMailInfoList()
{
return mailInfoList;
}
}
再看View 代码:
先看一下Item代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MailDetailView : MonoBehaviour {
public UILabel mTitle;
public UILabel mContent;
public GameObject mScrollView;
public GameObject mawardcontent;
public UIButton mAwardButton;
public UIButton mDeleteButton;
void Start () {
}
public void init()
{
mTitle.text = "";
mContent.text = "";
mScrollView.gameObject.SetActive(false);
mAwardButton.gameObject.SetActive(false);
mDeleteButton.gameObject.SetActive(false);
}
// Update is called once per frame
void Update () {
}
public void Refresh(MailModle.MailInfo mailInfo)
{
int count = mawardcontent.transform.childCount;
for(int i = 0; i < count; i++)
{
Destroy(mawardcontent.transform.GetChild(i).gameObject);
}
mTitle.text = mailInfo.title;
mContent.text = mailInfo.content;
//如果是奖励类型,显示奖励列表内容并且领取button显示,隐藏删除button
if (mailInfo.mailType == MailModle.MailType.AWARD)
{
mScrollView.gameObject.SetActive(true);
mAwardButton.gameObject.SetActive(true);
mDeleteButton.gameObject.SetActive(false);
mawardcontent.gameObject.SetActive(true);
List<MailModle.AwardItem> awardItem = mailInfo.awardItem;
for(int i = 0; i < awardItem.Count; i++)
{
GameObject go = (GameObject)Instantiate(Resources.Load("awardN"));
//go.transform.Find("icon").GetComponent<UISprite>().spriteName = awardItem[i].awardInfo.icon;
go.transform.Find("name").GetComponent<UILabel>().text=awardItem[i].awardInfo.name;
go.transform.Find("count").GetComponent<UILabel>().text=awardItem[i].count.ToString();
UISprite newType = new UISprite();
Debug.Log(awardItem[i].awardInfo.icon);
go.transform.Find("icon").GetComponent<UISprite>().spriteName = awardItem[i].awardInfo.icon;
go.transform.SetParent(mawardcontent.transform);
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
mawardcontent.GetComponent<UIGrid>().enabled = true;
}
}
else
{
mScrollView.gameObject.SetActive(false);
mawardcontent.gameObject.SetActive(false);
mDeleteButton.gameObject.SetActive(true);
}
}
public void OnGetButtonClick()
{
SendMessageUpwards("OnGetOnClick");
}
public void OnDeleteButtonClick()
{
SendMessageUpwards("OnDeleteClick");
}
}
MailView:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MailView : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
public void Refresh(List<MailModle.MailInfo> mailInfoList)
{
for(int i=0;i<mailInfoList.Count; i++)
{
GameObject go = (GameObject)Instantiate(Resources.Load("mailViewN"));
go.transform.SetParent(this.transform);
go.name = i + "";
go.transform.Find("title").GetComponent<UILabel>().text=mailInfoList[i].title;
go.transform.Find("time").GetComponent<UILabel>().text=mailInfoList[i].time;
go.transform.SetParent(this.transform);
go.transform.localPosition = Vector3.zero;
go.transform.localScale = Vector3.one;
this.gameObject.GetComponent<UIGrid>().enabled = true;
EventDelegate.Add(go.transform.GetComponent<UIButton>().onClick,
delegate ()
{
OnClick(go.gameObject);
}
);
}
}
public void OnClick(GameObject sender)
{
string name = sender.name;
int index = int.Parse(sender.name);
SendMessageUpwards("OnMailClick",index);
}
}
C代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MailController : MonoBehaviour {
MailModle mailMode;
public MailView mailView;
public MailDetailView mailDetailView;
int currentindex;
private List<ArrayList> dataList;
void Start () {
mailMode = MailModle.Instance();
ReadData();
UpdateView();
}
// Update is called once per frame
void Update () {
}
void UpdateView()
{
int count = mailView.transform.childCount;
for(int i = 0; i < count; i++)
{
Destroy(mailView.transform.GetChild(i).gameObject);
}
List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
mailInfoList = mailMode.GetMailInfoList();
mailView.Refresh(mailInfoList);
mailDetailView.init();
}
public void OnMailClick(int index)
{
currentindex = index;
List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
mailInfoList = mailMode.GetMailInfoList();
mailDetailView.Refresh(mailInfoList[currentindex]);
}
public void OnGetOnClick()
{
UpadateCoin();
DeleteMailData();
mailMode.RemoveMail(currentindex);
UpdateView();
}
public void OnDeleteClick()
{
DeleteMailData();
mailMode.RemoveMail(currentindex);
UpdateView();
}
public void ReadData()
{
string path = Application.streamingAssetsPath + "/task.sqlite";
DataManager.Instance().ConnectionDB(path);
string sql = "select * from maildata";
List<ArrayList> datalist = new List<ArrayList>();
datalist = DataManager.Instance().ExcuteQuery(sql);
for(int i = 0; i < datalist.Count; i++)
{
ArrayList arr = new ArrayList();
arr = datalist[i];
mailMode.AddMail(arr[0].ToString(),(MailModle.MailType)(int.Parse(arr[1].ToString())),arr[2].ToString(),arr[3].ToString(),arr[4].ToString(),arr[5].ToString());
}
}
void UpadateCoin()
{
//更
List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
mailInfoList = mailMode.GetMailInfoList();
int blood = 0;
int coin = 0;
int star = 0;
string mycoin="";
List<MailModle.AwardItem> awardItemList = mailInfoList[currentindex].awardItem;
for (int i = 0; i < awardItemList.Count; i++)
{
string id = awardItemList[i].id;
if (id.Equals("1001"))
{//血量
blood = awardItemList[i].count;
Debug.Log("------------"+blood);
}
if (id.Equals("1002"))
{//金币
coin = awardItemList[i].count;
Debug.Log("------------" + coin);
}
if (id.Equals("1003"))
{//星星
star = awardItemList[i].count;
Debug.Log("------------" + star);
}
}
string path = Application.streamingAssetsPath + "/task.sqlite";
string sql = "where * from accountproduct";
DataManager.Instance().ConnectionDB(path);
List<ArrayList> accountList = DataManager.Instance().ExcuteQuery(sql);
for (int i = 0; i < accountList.Count; i++)
{
ArrayList arrtemp = accountList[i];
coin += int.Parse(arrtemp[0].ToString());
blood += int.Parse(arrtemp[1].ToString());
star += int.Parse(arrtemp[2].ToString());
mycoin = arrtemp[3].ToString();
}
Debug.Log("Coin:" + coin + "blood:" + blood + "star:" + star+mycoin);
string sqlAddcoin = "update accountproduct set coincounts=" + coin;
sqlAddcoin += ",blood=" + blood;
sqlAddcoin += ",stars=" + star;
sqlAddcoin += " where name='mycoin'";
DataManager.Instance().ConnectionDB(path);
DataManager.Instance().ExecuteNonQuery(sqlAddcoin);
}
void DeleteMailData()
{
//通过taskid来连接 我们的点击物体和数据的连接 进行删除数据库中的数据
List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
mailInfoList = mailMode.GetMailInfoList();
Debug.Log(currentindex);
string taskid = mailInfoList[currentindex].taskid.ToString();
Debug.Log("当前删除的是:" + taskid);
string path = Application.streamingAssetsPath + "/task.sqlite";
DataManager.Instance().ConnectionDB(path);
string sql = "delete from maildata where taskid=" + taskid;
DataManager.Instance().ExecuteNonQuery(sql);
}
}
data代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mono.Data.Sqlite;
public class DataManager {
//数据连接 读取数据
private DataManager()
{
}
private static DataManager _intance;
public static DataManager Instance()
{
if (_intance == null)
{
return _intance = new DataManager();
}
return _intance;
}
SqliteConnection conn = null;
public void ConnectionDB(string path)
{
path = "data source="+path;
if (conn == null)
{
conn = new SqliteConnection(path);
}
else
{
Debug.Log("数据库已经连接了");
}
}
public void OpenDB()
{
if (conn == null)
{
Debug.Log("数据没有链接成功");
}
try
{
conn.Open();
}catch(System.Exception exp)
{
Debug.Log("OpenDB:"+exp);
}
}
public void CloseDB()
{
if (conn == null)
{
Debug.Log("CloseDB:数据没有链接成功");
}
try
{
conn.Close();
}catch(System.Exception exp)
{
Debug.Log("CloseDB:"+exp);
}
}
public void ExecuteNonQuery(string sql)
{
OpenDB();
SqliteCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
cmd.Dispose();
CloseDB();
}
public List<ArrayList>ExcuteQuery(string sql)
{
OpenDB();
Debug.Log("执行数据:ExcuteQuery");
SqliteCommand cmd = conn.CreateCommand();
cmd.CommandText = sql;
List<ArrayList> list = new List<ArrayList>();
try
{
SqliteDataReader reader = cmd.ExecuteReader();
while(reader.Read()){
ArrayList arr = new ArrayList();
for(int i = 0; i < reader.FieldCount; i++)
{
arr.Add(reader.GetValue(i));
}
list.Add(arr);
}
} catch(System.Exception exp)
{
Debug.Log(exp);
}
CloseDB();
return list;
}
}