using System; using System.Collections.Generic; using UnityEngine; public class SaveAndLoadMgr : BaseCreatePanel { public SaveAndLoadMgr.PageNo GetCurrentPageNo() { return this.currentPageNo; } public Action CallbackAfterFadeOut { get; set; } public void SetCurrentActiveData(string activeData) { this.currentActiveData = activeData; } public Action OnOpenLoadPanelKasizukiLocal { get; set; } public override void Init() { this.m_goPanel = base.GetPanel("SaveAndLoadPanel"); this.m_ctrl = base.GetCtrl(); this.m_ctrl.Init(this, this.m_goPanel); this.m_goPanel.SetActive(false); this.currentView = SaveAndLoadMgr.ViewType.None; this.currentPageNo = SaveAndLoadMgr.PageNo.Page_1; } public void OpenSavePanel() { Debug.Log("セーブをオープンしました。"); base.BaseOpenPanel(SaveAndLoadMgr.ViewType.Save.ToString()); } public void OpenLoadPanel() { this.m_ctrl.Kasiduki = false; Debug.Log("ロードをオープンしました。"); base.BaseOpenPanel(SaveAndLoadMgr.ViewType.Load.ToString()); } public void OpenLoadPanelKasiduki() { this.m_ctrl.Kasiduki = true; Debug.Log("ロード(カシヅキ)をオープンしました。"); base.BaseOpenPanel(SaveAndLoadMgr.ViewType.Load.ToString()); } public void OpenLoadPanelKasizukiLocal() { base.BaseOpenPanel("傅き"); } protected override void OpenPanel(string openType) { if (openType == "傅き") { if (this.OnOpenLoadPanelKasizukiLocal != null) { this.OnOpenLoadPanelKasizukiLocal(); } return; } SaveAndLoadMgr.ViewType viewType = (SaveAndLoadMgr.ViewType)Enum.Parse(typeof(SaveAndLoadMgr.ViewType), openType); if (viewType != SaveAndLoadMgr.ViewType.Save) { if (viewType == SaveAndLoadMgr.ViewType.Load) { this.DisplayLoadPanel(); } } else { this.DisplaySavePanel(); } } private void DisplaySavePanel() { this.CreateSaveOrLoadViewer(SaveAndLoadMgr.ViewType.Save); } private void DisplayLoadPanel() { this.CreateSaveOrLoadViewer(SaveAndLoadMgr.ViewType.Load); } private void CreateSaveOrLoadViewer(SaveAndLoadMgr.ViewType selectView) { if (this.currentView == selectView) { return; } int pageNoLatestData = this.GetPageNoLatestData(); if (pageNoLatestData == -1) { this.currentPageNo = SaveAndLoadMgr.PageNo.Page_1; } else { this.currentPageNo = (SaveAndLoadMgr.PageNo)pageNoLatestData; } Dictionary dicData = this.LoadDataByPage((int)this.currentPageNo); this.m_goPanel.SetActive(true); this.m_ctrl.CreateSaveAndLoadDataViewer(dicData, selectView); this.currentView = selectView; this.currentActiveData = string.Empty; } private int GetPageNoLatestData() { long num = GameMain.Instance.NewSaveDataNo(); return (int)num / 10 + 1; } public void CloseSaveAndLoadPanel() { base.BaseClosePanel(); this.m_ctrl.CloseReset(); } public void ClosePanelAfterAction(Func action, T param) { TweenAlpha tweenAlpha = TweenAlpha.Begin(this.fadeTargetPanel, 0.5f, 0f); EventDelegate.Set(tweenAlpha.onFinished, delegate() { if (action != null) { if (action(param)) { this.fadeTargetPanel.SetActive(false); } else { this.CloseSaveAndLoadPanel(); } action = null; } }); } protected override void ClosePanel() { this.currentView = SaveAndLoadMgr.ViewType.None; this.currentPageNo = SaveAndLoadMgr.PageNo.Page_1; } public void ClickPageNo() { string name = UIButton.current.name; if (!base.IsValidateButton(name)) { return; } SaveAndLoadMgr.PageNo pageNo = (SaveAndLoadMgr.PageNo)Enum.Parse(typeof(SaveAndLoadMgr.PageNo), name); if (pageNo == this.currentPageNo) { return; } this.currentPageNo = pageNo; int pageNo2 = (int)pageNo; Dictionary dicData = this.LoadDataByPage(pageNo2); this.m_ctrl.CreateSaveAndLoadDataViewer(dicData, this.currentView); } public void PageUpper() { Dictionary dicData = this.LoadDataByPage((int)this.currentPageNo); this.m_ctrl.CreateSaveAndLoadDataViewer(dicData, this.currentView); } public void ClickSaveOrLoadData() { string name = UIButton.current.name; if (this.currentActiveData == name) { Debug.Log("同じデータがクリックされたので処理を抜けます。"); return; } if (UICamera.currentTouchID == -1) { this.m_ctrl.SetSaveOrLoadDataActive(name); if (UICamera.currentTouchID == -1) { this.currentActiveData = name; this.m_ctrl.SaveAndLoad(this.currentView, name); } } else if (UICamera.currentTouchID == -2 && !GameMain.Instance.VRMode) { Debug.Log(string.Format("{0}ボタンが右クリックされました。", name)); if (this.m_ctrl.ExistData(name)) { this.m_ctrl.DeleteSaveOrLoadData(name); } } } public void ClickComment() { Collider collider = UICamera.lastHit.collider; if (collider != null) { UIButton componentInParent = collider.GetComponentInParent(); this.m_ctrl.SetSaveOrLoadDataActive(componentInParent.name); } } public void OnChangeComment() { string name = UIInput.current.name; string value = UIInput.current.value; this.m_ctrl.SaveComment(name, value); } protected override void SetFadeTargetPanel() { this.fadeTargetPanel = this.m_goPanel; } protected override void AfterFadeOut() { if (this.m_ctrl.IsTitleScene) { if (this.CallbackAfterFadeOut != null) { this.CallbackAfterFadeOut(); } } else if (!this.m_ctrl.GetIsLoading()) { DailyMgr manager = base.GetManager(); manager.BaseOpenPanel(manager.GetCurrentDaily().ToString()); } base.AfterFadeOut(); } protected override void BeforeClose() { UICamera.InputEnable = false; } protected override void AfterClose() { if (!this.m_ctrl.GetIsLoading()) { UICamera.InputEnable = true; } } private Dictionary LoadDataByPage(int pageNo) { Dictionary dictionary = new Dictionary(); int num = (pageNo - 1) * 10; int num2 = num + 10 - 1; for (int i = num; i <= num2; i++) { SaveAndLoadCtrl.LoadDataUnit loadDataUnit = new SaveAndLoadCtrl.LoadDataUnit(); GameMain.SerializeHeader saveDataHeader = GameMain.Instance.GetSaveDataHeader(i); if (saveDataHeader != null) { loadDataUnit.pageNo = pageNo; loadDataUnit.serialNo = i; loadDataUnit.isLatest = GameMain.Instance.IsSaveDataNew(i); loadDataUnit.nVer = saveDataHeader.nVer; loadDataUnit.createAt = this.DateTimeParse(saveDataHeader.strSaveTime); loadDataUnit.lapsedDays = saveDataHeader.nGameDay; loadDataUnit.managerName = saveDataHeader.strPlayerName; loadDataUnit.numberOfEmployees = saveDataHeader.nMaidNum; loadDataUnit.comment = saveDataHeader.strComment; loadDataUnit.isEmpty = false; } else { loadDataUnit.pageNo = pageNo; loadDataUnit.serialNo = i; loadDataUnit.isEmpty = true; } dictionary.Add(string.Format("serialNo_{0}", i), loadDataUnit); } return dictionary; } private Dictionary MakeDummyData() { Dictionary dictionary = new Dictionary(); int num = 0; int num2 = 0; int num3 = 0; int num4 = 47; for (int i = 0; i < num4; i++) { if (i % 10 == 0) { num++; num2 = 1; } int num5 = UnityEngine.Random.Range(0, 10); if (num5 % 3 == 0) { num2++; } else { SaveAndLoadCtrl.LoadDataUnit loadDataUnit = new SaveAndLoadCtrl.LoadDataUnit(); loadDataUnit.pageNo = num; loadDataUnit.serialNo = num3; loadDataUnit.isLatest = false; loadDataUnit.createAt = DateTime.Now.ToString(); loadDataUnit.lapsedDays = i; loadDataUnit.managerName = "経営者_" + i; loadDataUnit.numberOfEmployees = UnityEngine.Random.Range(0, 30); loadDataUnit.comment = string.Format("コメント_{0}、ページ={1}、シリアルNo={2}", i, loadDataUnit.pageNo, loadDataUnit.serialNo); dictionary.Add(string.Format("serialNo_{0}", num3), loadDataUnit); num2++; num3++; } } return dictionary; } private string DateTimeParse(string strDate) { string format = "yyyyMMddHHmmss"; return DateTime.ParseExact(strDate, format, null).ToString("yyyy.MM.dd HH:mm"); } private string currentActiveData; private SaveAndLoadMgr.PageNo currentPageNo; private SaveAndLoadCtrl m_ctrl; private SaveAndLoadMgr.ViewType currentView; private const SaveAndLoadMgr.PageNo PAGE_NO_WHEN_OPEN = SaveAndLoadMgr.PageNo.Page_1; private const string BUTTON_NAME_TEMPLATE = "serialNo_{0}"; private const float DURATION_TO_FADE = 0.5f; private const int MAX_SLOT_COUNT_PER_PAGE = 10; private const int NOTHING_SAVE_DATA = -1; private const int LeftClick = -1; private const int RightClick = -2; public enum ViewType { None, Save, Load } public enum PageNo { Page_1 = 1, Page_2, Page_3, Page_4, Page_5, Page_6, Page_7, Page_8, Page_9, Page_10 } }