• Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by JackTenSeven · Aug 13, 2016 at 07:55 AM · c#convertintsubtractingtimespan

Subtracting a time difference from an int?

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.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by nu-assets · Aug 13, 2016 at 11:04 AM

The TimeSpan struct has no operators overloaded for numeric types.

You can solve this either this way:

     TimeSpan dt = TimeSpan.FromSeconds(120) - difference;
     float tinpaneltimer = (float)dt.TotalSeconds;

or this way:

 float tinpaneltimer = (float)(120 - difference.TotalSeconds);

Provided that tinpaneltimer is meassured in seconds.

Comment
Add comment · Show 6 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image JackTenSeven · Aug 15, 2016 at 03:58 PM 0
Share

Yes that is perfect thank you! And yes tin panel timer is measured in seconds.

avatar image JackTenSeven · Aug 17, 2016 at 12:25 AM 0
Share

I 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?

avatar image JackTenSeven · Aug 17, 2016 at 06:58 AM 0
Share

@nu-assets

avatar image nu-assets JackTenSeven · Aug 17, 2016 at 07:04 AM 0
Share

I would recommend splitting the functionality to a separate class. This allows you to run separated unit test on the entity and of course it's reusable.

avatar image nu-assets · Aug 17, 2016 at 07:38 AM 0
Share

I 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.

avatar image JackTenSeven · Aug 17, 2016 at 07:41 AM 0
Share

Well 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. $$anonymous$$aybe you should give the example class there so everyone can see. The question is called "Time Date timer not working" (Something like that)

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Welcome to Unity Answers

The best place to ask and answer questions about development with Unity.

To help users navigate the site we have posted a site navigation guide.

If you are a new user to Unity Answers, check out our FAQ for more information.

Make sure to check out our Knowledge Base for commonly asked Unity questions.

If you are a moderator, see our Moderator Guidelines page.

We are making improvements to UA, see the list of changes.



Follow this Question

Answers Answers and Comments

5 People are following this question.

avatar image avatar image avatar image avatar image avatar image

Related Questions

Convert "Double" to "Float" or "Int"? 1 Answer

Timespan to int total seconds 0 Answers

Cannot convert float to int? 1 Answer

Having trouble converting this int to string, can someone help? 0 Answers

Not Checking if Greater than 0 1 Answer

  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges