¡¡
¤ª»È¤¤¤Î»þ´Ö¥Ç¡¼¥¿¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î JobTimeData ¥¯¥é¥¹¤ò OfflineTimeManager ¥¹¥¯¥ê¥×¥ÈÆâ¤ËºîÀ®¤·¤Þ¤¹¡£
¤³¤Î¥¯¥é¥¹¤Ç¤Ï¡¢
¤ª»È¤¤¤ÎÄ̤·Èֹ桢¤ª»È¤¤¤Î»Ä¤ê»þ´Ö¡¢¤ª»È¤¤¤ò³«»Ï¤·¤¿»þ´Ö¤òÊÝ»ý¤¹¤ë¤¿¤á¤ÎÊÑ¿ô¤òÍÑ°Õ¤·¤Æ¤ª¤¤Þ¤¹¡£
¡¡
¤ª»È¤¤¤ò³«»Ï¤·¤¿¥¿¥¤¥ß¥ó¥°¤Ç¤³¤Î JobTimeData ¥¯¥é¥¹¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤Æ¡¢ÁªÂò¤·¤Æ¤¤¤ë¹Ô¤Àè¤ÎÆâÍƤξðÊó¤ò¡¢³ÆÊÑ¿ô¤ËÂåÆþ¤·¤Æ¼èÆÀ¤·¤Þ¤¹¡£
¤½¤·¤Æ¡¢
ͽ¤áÍÑ°Õ¤·¤Æ¤ª¤¤¤¿¡¢JobTimeData ¥¯¥é¥¹·¿¤Î List ¤ËÅÐÏ¿¤·¤Þ¤¹¡£
¤¿¤À¤·¡¢
Ʊ¤¸¤ª»È¤¤¤ÎÈÖ¹æ¤Ï½ÅÊ£¤·¤ÆÅÐÏ¿¤µ¤ì¤Ê¤¤¤è¤¦¤Ë List ¤Ë JobTimeData ¥¯¥é¥¹¤òÄɲ乤ëÁ°¤Ë³Îǧ¤ò¹Ô¤¤¤Þ¤¹¡£
¡¡¤³¤Î¤è¤¦¤Ë£±¤Ä¤Î List ¤Ë½¸Ìó¤·¤Æ JobTimeData ¥¯¥é¥¹¤ò´ÉÍý¤·¤Æ¤ª¤¯¤³¤È¤Ç¡¢
¸½ºß¤É¤Î¤ª»È¤¤¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤Î¤«¤ò¡¢OfflineTimeManager ¥¯¥é¥¹¤¬¤¤¤Ä¤Ç¤â³Îǧ¤Ç¤¤ë¾õÂÖ¤òºî¤ê½Ð¤·¤Æ¤¤¤Þ¤¹¡£
Ê£¿ô¤ÎƱ¤¸¥¯¥é¥¹(·¿)¤Î¾ðÊó¤ò°·¤¦¾ì¹ç¤Ë¤Ï¡¢¤³¤Î¤è¤¦¤Ë List ¤Ê¤É¤Î¥³¥ì¥¯¥·¥ç¥ó¤ò³èÍѤ·¤¿À߷פˤ·¤Æ¤ª¤¯¤³¤È¤ÇÍøÊØÀ¤ËÉÙ¤àÆâÍƤˤʤê¤Þ¤¹¡£
¡¡¤³¤Î°ìÏ¢¤Î½èÍý¤ò¼ÂÁõ¤¹¤ë¤¿¤á¤Ë¡¢Àë¸À¡¢¥Õ¥£¡¼¥ë¥É¤Ë¤Ï¥¯¥é¥¹¤ÎÀë¸À¡¢List ¤ÎÀë¸À¤ò¹Ô¤¤¡¢¿·¤·¤¤¥á¥½¥Ã¥É¤ò£³¤ÄÄɲ䷤Ƥ¤¤Þ¤¹¡£
OfflineTimeManager.cs
¡¡<=¡¡¥¯¥ê¥Ã¥¯¤¹¤ë¤È³«¤¤Þ¤¹¡£
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
public class OfflineTimeManager : MonoBehaviour
{
public static OfflineTimeManager instance;¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡// ¥·¥ó¥°¥ë¥È¥óÍѤÎÊÑ¿ô
private DateTime loadDateTime = new DateTime();¡¡¡¡¡¡¡¡¡¡ // Á°²ó¥²¡¼¥à¤ò»ß¤á¤¿»þ¤Ë¥»¡¼¥Ö¤·¤Æ¤¤¤ë»þ´Ö
private int elaspedTime; ¡¡¡¡¡¡ // ·Ð²á»þ´Ö
private const string SAVE_KEY_DATETIME = "OfflineDateTime";¡¡¡¡¡¡// »þ´Ö¤ò¥»¡¼¥Ö¡¦¥í¡¼¥É¤¹¤ëºÝ¤ÎÊÑ¿ô¡£Äê¿ô¤È¤·¤ÆÀë¸À¤¹¤ë
private const string FORMAT = "yyyy/MM/dd HH:mm:ss";¡¡¡¡ ¡¡¡¡¡¡¡¡// Æü»þ¤Î¥Õ¥©¡¼¥Þ¥Ã¥È»ØÄêÍÑ
////*¤³¤³¤«¤éÊÑ¿ô¤ÎÀë¸À¤È¥¯¥é¥¹¤òÄɲà *////
private const string WORKING_JOB_SAVE_KEY = "workingJobNo_"; // ¤ª»È¤¤¤Î»þ´Ö¤Î¥Ç¡¼¥¿¤ò¥»¡¼¥Ö¡¦¥í¡¼¥É¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
private GameManager gameManager;
/// <summary>
/// ¤ª»È¤¤ÍѤλþ´Ö¥Ç¡¼¥¿¤ò´ÉÍý¤¹¤ë¤¿¤á¤Î¥¯¥é¥¹
/// </summary>
[Serializable]
public class JobTimeData {
public int jobNo; // ¤ª»È¤¤¤ÎÄ̤·ÈÖ¹æ
public int elaspedJobTime; // ¤ª»È¤¤¤Î»Ä¤ê»þ´Ö
public string jobTimeString; // DateTime ¥¯¥é¥¹¤òʸ»úÎó¤Ë¤¹¤ë¤¿¤á¤ÎÊÑ¿ô
/// <summary>
/// DateTime ¤òʸ»úÎ󷿤ÇÊݸ¤·¤Æ¤¤¤ë¤Î¤Ç¡¢DateTime ·¿¤ËÌᤷ¤Æ¼èÆÀ
/// </summary>
/// <returns></returns>
public DateTime GetDateTime() {
return DateTime.ParseExact(jobTimeString, FORMAT, null);
}
}
[Header("¤ª»È¤¤¤Î»þ´Ö¥Ç¡¼¥¿¤Î¥ê¥¹¥È")]
public List<JobTimeData> workingJobTimeDatasList = new List<JobTimeData>();
////*¤³¤³¤Þ¤Ç *////
void Awake() {
if (instance == null) {
instance = this;
DontDestroyOnLoad(gameObject);
} else {
Destroy(gameObject);
}
// »þ´Ö¤Î¥»¡¼¥Ö¥Ç¡¼¥¿¤Î³Îǧ¤È¥í¡¼¥É
LoadOfflineDateTime();
// ¥ª¥Õ¥é¥¤¥ó¤Ç¤Î·Ð²á»þ´Ö¤ò·×»»
CalculateOfflineDateTimeElasped(loadDateTime);
// TODO ¤ª»È¤¤¤Î¥Ç¡¼¥¿¤Î¥í¡¼¥É
}
/// <summary>
/// ¥²¡¼¥à¤¬½ªÎ»¤·¤¿¤È¤¤Ë¼«Æ°Åª¤Ë¸Æ¤Ð¤ì¤ë
/// </summary>
private void OnApplicationQuit() {
// ¸½ºß¤Î»þ´Ö¤Î¥»¡¼¥Ö
SaveOfflineDateTime();
Debug.Log("¥²¡¼¥àÃæÃÇ¡£»þ´Ö¤Î¥»¡¼¥Ö´°Î»");
}
/// <summary>
/// ¥ª¥Õ¥é¥¤¥ó¤Ç¤Î»þ´Ö¤ò¥í¡¼¥É
/// </summary>
public void LoadOfflineDateTime() {
// ¥»¡¼¥Ö¥Ç¡¼¥¿¤¬¤¢¤ë¤«³Îǧ
if (PlayerPrefsHelper.ExistsData(SAVE_KEY_DATETIME)) {
// ¥»¡¼¥Ö¥Ç¡¼¥¿¤¬¤¢¤ë¾ì¹ç¡¢¥í¡¼¥É¤¹¤ë
string oldDateTimeString = PlayerPrefsHelper.LoadStringData(SAVE_KEY_DATETIME);
¡¡¡¡¡¡¡¡¡¡¡¡// ¥í¡¼¥É¤·¤¿Ê¸»úÎó¤ò DateTime ·¿¤Ë·¿ÊÑ´¹¤·¤Æ»þ´Ö¤ò¼èÆÀ
loadDateTime = DateTime.ParseExact(oldDateTimeString, FORMAT, null);
Debug.Log("¥²¡¼¥à³«»Ï»þ : ¥»¡¼¥Ö¤µ¤ì¤Æ¤¤¤¿»þ´Ö : " + oldDateTimeString);
Debug.Log("º£¤Î»þ´Ö : " + DateTime.Now.ToString(FORMAT));
} else {
// ¥»¡¼¥Ö¥Ç¡¼¥¿¤¬¤Ê¤¤¾ì¹ç¡¢¸½ºß¤Î»þ´Ö¤ò³«»Ï»þ¹ï¤È¤·¤Æ¼èÆÀ¤·¤Æ¤ª¤¯
loadDateTime = DateTime.Now;
Debug.Log("¥»¡¼¥Ö¥Ç¡¼¥¿¤¬¤Ê¤¤¤Î¤Çº£¤Î»þ´Ö¤ò¼èÆÀ : " + oldDateTime.ToString(FORMAT));
}
}
/// <summary>
/// ¸½ºß¤Î»þ´Ö¤ò¥»¡¼¥Ö
/// </summary>
public void SaveOfflineDateTime() {
¡¡¡¡¡¡¡¡// ¸½ºß¤Î»þ´Ö¤ò¼èÆÀ¤·¤Æ¡¢Ê¸»úÎó¤ËÊÑ´¹
string dateTimeString = DateTime.Now.ToString(FORMAT);
¡¡¡¡¡¡¡¡// string ·¿¤Ç¥»¡¼¥Ö
PlayerPrefsHelper.SaveStringData(SAVE_KEY_DATETIME, dateTimeString);
Debug.Log("¥²¡¼¥à½ªÎ»»þ : ¥»¡¼¥Ö»þ´Ö : " + dateTimeString);
}
/// <summary>
/// ¥ª¥Õ¥é¥¤¥ó¤Ç¤Î·Ð²á»þ´Ö¤ò·×»»
/// </summary>
public int CalculateOfflineDateTimeElasped(DateTime oldDateTime) {
// ¸½ºß¤Î»þ´Ö¤ò¼èÆÀ
DateTime currentDateTime = DateTime.Now;
// ¸½ºß¤Î»þ´Ö¤È¥»¡¼¥Ö¤µ¤ì¤Æ¤¤¤ë»þ´Ö¤ò³Îǧ
if (oldDateTime > currentDateTime) {
// ¥»¡¼¥Ö¥Ç¡¼¥¿¤Î»þ´Ö¤ÎÊý¤¬º£¤Î»þ´Ö¤è¤ê¤â¿Ê¤ó¤Ç¤¤¤ë¾ì¹ç¤Ë¤Ï¡¢º£¤Î»þ´Ö¤òÆþ¤ì¤Ê¤ª¤¹
oldDateTime = DateTime.Now;
}
// ·Ð²á¤·¤¿»þ´Ö¤Îº¹Ê¬
TimeSpan dateTimeElasped = currentDateTime - oldDateTime;
// ·Ð²á»þ´Ö¤òÉäˤ¹¤ë(Math.Round ¥á¥½¥Ã¥É¤òÍøÍѤ·¤Æ¡¢double ·¿¤ò int ·¿¤ËÊÑ´¹¡£¾®¿ôÅÀ¤Ï 0 ¤Î°Ì¤Ç¡¢¿ôÃͤδݤá¤Î½èÍý¤Î»ØÄê¤Ï ToEven(¿ôÃͤ¬ 2 ¤Ä¤Î¿ôÃͤÎÃæ´Ö¤Ë°ÌÃÖ¤¹¤ë¤È¤¤Ë¡¢ºÇ¤â¶á¤¤¶ö¿ô¤ÎÃÍ) ¤ò»ØÄê)
elaspedTime = (int)Math.Round(dateTimeElasped.TotalSeconds, 0, MidpointRounding.ToEven);
Debug.Log($"¥ª¥Õ¥é¥¤¥ó¤Ç¤Î·Ð²á»þ´Ö : {elaspedTime } ÉÃ");
return elaspedTime;
}
////*¤³¤³¤«¤é¥á¥½¥Ã¥É¤ò£³¤ÄÄɲà *////
/// <summary>
/// ³Æ¤ª»È¤¤¤Î»Ä¤ê»þ´Ö¤Î¹¹¿·
/// </summary>
/// <param name="jobNo"></param>
/// <param name="currentJobTime"></param>
public void UpdateCurrentJobTime(int jobNo, int currentJobTime) {
// List ¤«¤é³ºÅö¤Î JobTimeData ¤ò¸¡º÷¤·¤Æ¼èÆÀ¤·¡¢elaspedJobTime ¤ÎÃͤò currentJobTime ¤Ë¹¹¿·
workingJobTimeDatasList.Find(x => x.jobNo == jobNo).elaspedJobTime = currentJobTime;
}
/// <summary>
/// List ¤Ë JobTimeData ¤òÄɲᣤ³¤Î¥ê¥¹¥È¤Ë¤¢¤ë¾ðÊ󤬸½ºß¤ª»È¤¤¤ò¤·¤Æ¤¤¤ëÆâÍƤˤʤë
/// </summary>
/// <param name="jobTimeData"></param>
public void AddWorkingJobTimeDatasList(JobTimeData jobTimeData) {
// ¤ª»È¤¤¤ò List ¤ËÄɲ乤ëÁ°¤Ë¡¢¤¹¤Ç¤Ë¥ê¥¹¥È¤Ë¤¢¤ë¤«³Îǧ¤·¤Æ½ÅÊ£ÅÐÏ¿¤òËɤ°
if (!workingJobTimeDatasList.Exists(x => x.jobNo == jobTimeData.jobNo)) {
¡¡¡¡¡¡¡¡¡¡¡¡// List ¤Ë¤Ê¤¤¾ì¹ç¤Î¤ß¡¢¿·¤·¤¯Äɲ乤ë
workingJobTimeDatasList.Add(jobTimeData);
Debug.Log(jobTimeData.elaspedJobTime);
}
}
/// <summary>
/// ¸½ºß¤ª»È¤¤Ãæ¤Î JobTimeData ¤ÎºîÀ®¤È List ¤Ø¤ÎÄɲÃ
/// </summary>
/// <param name="tapPointDetail"></param>
public void CreateWorkingJobTimeDatasList(TapPointDetail tapPointDetail, int remainingTime) {
¡¡¡¡¡¡¡¡// ¤ª»È¤¤¤Î»Ä¤ê»þ´Ö¤òÀßÄê¡£-1 ¤Î¾ì¹ç¤Ï¤ª»È¤¤³«»Ï»þ¤Ê¤Î¤Ç¡¢¤ª»È¤¤»þ´Ö¤ò¤½¤Î¤Þ¤Þ¥»¥Ã¥È
¡¡¡¡¡¡¡¡// ¤½¤ì°Ê³°¤Ï¤ª»È¤¤¤ÎÅÓÃæ¤Ê¤Î¤Ç¡¢»Ä¤ê»þ´Ö¤ò¥»¥Ã¥È(¤½¤Î¤Þ¤Þ remainingTime ¤ò»È¤¦)
if (remainingTime == -1) {
remainingTime = tapPointDetail.jobData.jobTime;
}
// JobTimeData ¤ò¥¤¥ó¥¹¥¿¥ó¥¹¤·¤Æ½é´ü²½
JobTimeData jobTimeData = new JobTimeData { jobNo = tapPointDetail.jobData.jobNo, elaspedJobTime = remainingTime };
¡¡¡¡¡¡¡¡// List ¤Ë JobTimeData ¤òÄɲÃ
AddWorkingJobTimeDatasList(jobTimeData);
}
////*¤³¤³¤Þ¤Ç *////
}
¡¡¥¹¥¯¥ê¥×¥È¤ò½¤Àµ¤·¤¿¤é¥»¡¼¥Ö¤·¤Þ¤¹¡£
¡¡OfflineTimeManager ¥²¡¼¥à¥ª¥Ö¥¸¥§¥¯¥È¤Î¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤ò³Îǧ¤·¤Æ¤¯¤À¤µ¤¤¡£
¿·¤·¤¯ public ½¤¾þ»Ò¤ÇÄɲä·¤¿ List ·¿¤ÎÊÑ¿ô¤¬¥¤¥ó¥¹¥Ú¥¯¥¿¡¼¤Ëɽ¼¨¤µ¤ì¤Æ¤¤¤ë¤È»×¤¤¤Þ¤¹¡£
¥¤¥ó¥¹¥Ú¥¯¥¿¡¼²èÁü
¡¡¤³¤Á¤é¤Ï Size 0 ¤Î¤Þ¤Þ¤ÇÌäÂꤢ¤ê¤Þ¤»¤ó¡£
¥²¡¼¥à¤ò¼Â¹Ô¤·¡¢¤ª»È¤¤¤ò³«»Ï¤·¤¿Ãʳ¬¤Ç¡¢¤³¤Î List ÍѤΥ¯¥é¥¹¤¬À¸À®¤µ¤ì¤Æ¡¢List ¤ËÄɲ䵤ì¤ë½èÍý¤¬¼Â¹Ô¤µ¤ì¤Þ¤¹¡£
¡¡º£²ó¼ÂÁõ¤·¤Æ¤¤¤ë½èÍý¤ÎÆâÍƤˤʤê¤Þ¤¹¤Î¤Ç¡¢¤É¤Î¥¿¥¤¥ß¥ó¥°¤Ç¤É¤Î½èÍý¤¬¼Â¹Ô¤µ¤ì¤Æ¤¤¤ë¤¿¤á¤Ë¡¢¤³¤Î¤è¤¦¤ÊÀ©¸æ¤¬¹Ô¤¨¤Æ¤¤¤ë¤Î¤«¡¢Î®¤ì¤ò³Îǧ¤·¤Æ¤ª¤¤¤Æ¤¯¤À¤µ¤¤¡£