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.
Yes that is perfect thank you! And yes tin panel timer is measured in seconds.
– JackTenSevenI have tried using this but it doesn't change the timer at all. I tried using both methods could you look over the script again and see if anything could be interfering?
– JackTenSeven@nu-assets
– JackTenSevenI could give you a simple example timer class. But maybe it's better to open a new question to allow others to better find it.
– SycoforgeWell I asked a second questions already and no one has added a response but 224 people are following you can view it by going to my questions on my profile. Maybe you should give the example class there so everyone can see. The question is called "Time Date timer not working" (Something like that)
– JackTenSeven