Hey! I have a question, I have been trying to make a timer that keeps going down while the application is closed (using System.DateTime) here is my script.
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System;
public class Craft : MonoBehaviour {
DateTime currentDate;
DateTime oldDate;
public float tinpaneltimer;
public bool tinpaneltimerOn = false;
public string saveLocation;
public static Craft instance;
public Text CraftSteelButtonText;
public Text CraftElectrumButtonText;
public Text CraftTinPanelButtonText;
public int Iron;
public int Coal;
public int Steel;
public int Silver;
public int GoldOre;
public int Electrum;
public int Diff;
public int Tin;
public int TinPanel;
public int XP;
public int XPCap;
public int Level;
public int XPCapMulitplier;
public Text SteelAmount;
public Text ElectrumAmount;
public Text TinPanelAmount;
public Text SlotSteelText;
public Text SlotElectrumText;
public Text SlotTinPanelText;
public bool CraftSteelOn = false;
public bool CraftElectrumOn = false;
public bool CraftTinPanelOn = false;
public Button CraftSteelButton;
public Image CraftSteelButtonImage;
public Image CraftSteelButtonImageRight;
public Button CraftElectrumButton;
public Image CraftElectrumButtonImage;
public Image CraftElectrumButtonImageRight;
public Button CraftTinPanelButton;
public Image CraftTinPanelButtonImage;
public Image CraftTinPanelButtonImageRight;
public Image Panel1;
public Image Panel2;
public Image Panel3;
public Image LevelBar;
public AudioSource Audio;
void Start()
{
CheckDate ();
if (tinpaneltimer == 0) {
tinpaneltimer = 120;
}
if (tinpaneltimerOn == true) {
tinpaneltimer -= instance.CheckDate ();
}
}
void Awake()
{
instance = this;
saveLocation = "lastSavedDate1";
}
public float CheckDate()
{
currentDate = System.DateTime.Now;
string tempString = PlayerPrefs.GetString (saveLocation, "1");
long templong = Convert.ToInt64 (tempString);
DateTime oldDate = DateTime.FromBinary (templong);
print ("Old Date: " + oldDate);
TimeSpan difference = currentDate.Subtract (oldDate);
**tinpaneltimer = (120 - difference);** //Here is where im trying to figure it out
print ("Difference: " + difference);
return (float)difference.TotalSeconds;
}
public void SaveDate()
{
PlayerPrefs.SetString (saveLocation, System.DateTime.Now.ToBinary ().ToString ());
print ("Saving this date to player prefs: " + System.DateTime.Now);
}
public void ExitButton()
{
Panel1.gameObject.SetActive (false);
Panel2.gameObject.SetActive (false);
Panel3.gameObject.SetActive (false);
LevelBar.gameObject.SetActive (true);
}
public void ClickSlot1()
{
Panel1.gameObject.SetActive (true);
LevelBar.gameObject.SetActive (false);
}
public void ClickSlot2()
{
Panel2.gameObject.SetActive (true);
LevelBar.gameObject.SetActive (false);
}
public void ClickSlot3()
{
Panel3.gameObject.SetActive (true);
LevelBar.gameObject.SetActive (false);
}
void Update()
{
if (tinpaneltimer == 0) {
StartC3 ();
}
if (tinpaneltimerOn == true) {
CheckDate ();
tinpaneltimer -= Time.deltaTime;
}
//Maybe either have a long time for bigger items or just not and have same craft time.
SlotSteelText.text = "" + Steel;
SlotElectrumText.text = "" + Electrum;
SlotTinPanelText.text = "" + TinPanel;
if (CraftSteelOn == true) {
CraftSteelButtonImage.fillAmount += 1f / 2f * Time.deltaTime;
CraftSteelButtonImageRight.fillAmount += 1f / 2f * Time.deltaTime;
}
if (CraftElectrumOn == true) {
CraftElectrumButtonImage.fillAmount += 1f / 2f * Time.deltaTime;
CraftElectrumButtonImageRight.fillAmount += 1f / 2f * Time.deltaTime;
}
if (CraftTinPanelOn == true) {
CraftTinPanelButtonImage.fillAmount += 1f / (120 - tinpaneltimer) * Time.deltaTime;
CraftTinPanelButtonImageRight.fillAmount += 1f / (120 - tinpaneltimer) * Time.deltaTime;
}
//Store Date.Time when you start the craft and keep checking it until the subtraction is equal to variable
SteelAmount.text = "" + Steel;
ElectrumAmount.text = "" + Electrum;
TinPanelAmount.text = "" + TinPanel;
XP = PlayerPrefs.GetInt ("XP");
XPCap = PlayerPrefs.GetInt ("XPCap");
Level = PlayerPrefs.GetInt ("Level");
XPCapMulitplier = PlayerPrefs.GetInt ("XPCapMultiplier");
Iron = PlayerPrefs.GetInt ("Iron");
Coal = PlayerPrefs.GetInt ("Coal");
Steel = PlayerPrefs.GetInt ("Steel");
Silver = PlayerPrefs.GetInt ("Silver");
GoldOre = PlayerPrefs.GetInt ("GoldOre");
Electrum = PlayerPrefs.GetInt ("Electrum");
TinPanel = PlayerPrefs.GetInt ("TinPanel");
Tin = PlayerPrefs.GetInt ("Tin");
}
public void CraftSteel()
{
if (Iron >= 1 && Coal >= 1) {
Audio.Play ();
CraftSteelOn = true;
XP = XP + 20;
PlayerPrefs.SetInt ("Level", Level);
PlayerPrefs.SetInt ("XPCap", XPCap);
PlayerPrefs.SetInt("XP", XP);
PlayerPrefs.SetInt ("XPCapMultiplier", XPCapMulitplier);
StartC ();
}
if (Iron <= 1 || Coal <= 1) {
CraftSteelButtonText.text = "CANT AFFORD";
}
}
public void CraftElectrum()
{
if (Silver >= 1 && GoldOre >= 1) {
Audio.Play ();
CraftElectrumOn = true;
XP = XP + 20;
PlayerPrefs.SetInt ("Level", Level);
PlayerPrefs.SetInt ("XPCap", XPCap);
PlayerPrefs.SetInt("XP", XP);
PlayerPrefs.SetInt ("XPCapMultiplier", XPCapMulitplier);
StartC2 ();
}
if (Silver <= 1 || GoldOre <= 1) {
CraftElectrumButtonText.text = "CANT AFFORD";
}
}
public void CraftTinPanel()
{
if (Tin >= 4) {
SaveDate ();
tinpaneltimerOn = true;
Audio.Play ();
CraftTinPanelOn = true;
XP = XP + 13;
PlayerPrefs.SetInt ("Level", Level);
PlayerPrefs.SetInt ("XPCap", XPCap);
PlayerPrefs.SetInt("XP", XP);
PlayerPrefs.SetInt ("XPCapMultiplier", XPCapMulitplier);
}
if (Tin <= 4) {
CraftTinPanelButtonText.text = "CANT AFFORD";
}
}
public IEnumerator WaitForView()
{
CraftSteelButtonText.text = "CRAFTED";
CraftSteelButton.interactable = false;
yield return new WaitForSeconds (2f);
PlayerPrefs.SetInt ("Iron", PlayerPrefs.GetInt ("Iron") - 1);
PlayerPrefs.SetInt ("Coal", PlayerPrefs.GetInt ("Coal") - 1);
PlayerPrefs.SetInt ("Steel", PlayerPrefs.GetInt ("Steel") + 1);
CraftSteelOn = false;
CraftSteelButtonImage.fillAmount = 0;
CraftSteelButtonImageRight.fillAmount = 0;
CraftSteelButton.interactable = true;
CraftSteelButtonText.text = "CRAFT";
}
public IEnumerator WaitForView2()
{
CraftElectrumButtonText.text = "CRAFTED";
CraftElectrumButton.interactable = false;
yield return new WaitForSeconds (2f);
PlayerPrefs.SetInt ("Silver", PlayerPrefs.GetInt ("Silver") - 1);
PlayerPrefs.SetInt ("GoldOre", PlayerPrefs.GetInt ("GoldOre") - 1);
PlayerPrefs.SetInt ("Electrum", PlayerPrefs.GetInt ("Electrum") + 1);
CraftElectrumOn = false;
CraftElectrumButtonImage.fillAmount = 0;
CraftElectrumButtonImageRight.fillAmount = 0;
CraftElectrumButton.interactable = true;
CraftElectrumButtonText.text = "CRAFT";
}
public IEnumerator WaitForView3()
{
CraftTinPanelButtonText.text = "CRAFTED";
yield return new WaitForSeconds (1f);
CraftTinPanelButton.interactable = false;
PlayerPrefs.SetInt ("Tin", PlayerPrefs.GetInt ("Tin") - 4);
PlayerPrefs.SetInt ("TinPanel", PlayerPrefs.GetInt ("TinPanel") + 1);
tinpaneltimer = 120;
CraftTinPanelOn = false;
tinpaneltimerOn = false;
CraftTinPanelButtonImage.fillAmount = 0;
CraftTinPanelButtonImageRight.fillAmount = 0;
CraftTinPanelButton.interactable = true;
CraftTinPanelButtonText.text = "CRAFT";
}
void StartC()
{
StartCoroutine (WaitForView ());
}
void StartC2()
{
StartCoroutine (WaitForView2 ());
}
void StartC3()
{
StartCoroutine (WaitForView3 ());
}
}
Ok so the “**” show where the problem is and I know that that line will return the error "Operator “-” cant be used on operants “int” and “timespan” I’m trying to figure out a way to subtract the TimeSpan difference between the (oldDate and the currentDate) and a int. If you now how to do this please leave a comment! Maybe it has something to do with Converting it to an Int but i dont know how to.