Can't get script to access other script/class (c#)

Hi. I have searched a lot and tried a lot of different things, but I can’t for the life of me get this to work, though it seems to me that it should be easy, so it’s driving me nuts. I am not a programmer, and I’ve probably bit over more than I can chew, but I hope you will help anyway.

Ok, so here’s the problem. I read that it’s good to make each script/class do one specific thing instead of multiple things, so I’ve split up the functionality. I’m trying to make a turn based game and on the start of every turn the player’s cash should be updated, which involves three different script talking to each other, but I can’t get it to work. My problem involves these three scripts: turnControl (my state machine), turnStart, and playerResources.

Here’s some of turnControl

using UnityEngine;
using System.Collections;

public class turnControl : MonoBehaviour {

	private turnStart turnStartScript = new turnStart ();

	public enum TurnStates {
		START,
		PLAYERTURN,
		ENEMYTURN,
		LOSE,
		WIN
		
		
	}

	public static TurnStates currentTurn;
	



	// Use this for initialization
	void Start () {
	
		currentTurn = TurnStates.START;


	}
	
	// Update is called once per frame
	void Update () {
		Debug.Log (currentTurn);
		switch (currentTurn) {
		case (TurnStates.START) :
			//Calculate income, cash
			turnStartScript.CalculateFinances();
			currentTurn = TurnStates.PLAYERTURN;

			//Resolve combat
			//Random events
			break;

As you can see, the turnControl script calls a method from turnStart. Here’s the method:

using UnityEngine;
using System.Collections;

public class turnStart : MonoBehaviour  {

	private playerResources playerResourcesScript = new playerResources ();


	  	public void CalculateFinances () {

		Debug.Log("CALCULATE");

		playerResourcesScript.playerTotalCash += playerResourcesScript.playerTotalIncome;
}
}

As you can see that script then references playerResources. It’s simply a script that holds the player resources:

using UnityEngine;
using System.Collections;

public class playerResources : MonoBehaviour {

	public string playerName = "Player";

	public int playerStartingCash;

	public int playerTotalIncome;

	public int playerTotalExpenses;

	public int playerTotalCash;

	public int playerTerritories;


	void Awake () {

		DontDestroyOnLoad(transform.gameObject);

	}}

But I Just. Cannot. Get it to work! playerResources doesn’t register the change. The log outputs “CALCULATE” so I know the CalculateFinances method is being called, but the numbers don’t change. Oh, and some other script changes the player’s income to e.g. 250, and that does seem to work, so the player’s cash should go to 250 on the start of the turn. But it doesn’t.

I’m aware that I’m not supposed the “new” keyword to create instancse of the other scripts when I’m using monobehavior (unity gives me some warnings aobut it), but I have tried everything! I have tried removing monobehavior, I’ve tried the AddComponent way… Here’s some examples of lines I’ve tried:

GetComponent<playerResources>().playerTotalCash = 100;

		var playerTotalIncome = gameObject.AddComponent<playerResources>().playerTotalIncome;

		var playerResourcesScript = gameObject.AddComponent<playerResources>();

GameObject controller = GameObject.Find("gameControllerMap");
		int test= GetComponent<playerResources>().playerTotalIncome;
		controller.GetComponent<playerResources>().playerTotalCash += test;

It seems that this should be very simple but I’ve spent hours trying to fix this. Sorry about the long question, I hope it makes a least some sense. Please help a desperate man. Thank you.
(Btw. some of the scipts here are a little cut up so they don’t take up too much space, but the syntax should be ok, I’m not getting any errors at least (though some warnings, as mentioned)).

//Creating the variable
private turnStart turnStartScript;

void Start(){
//Could also be in Awake
//GameObject.Find is not optimal, but used once at start of a game is perfectly fine
turnStartScript = GameObject.Find("nameofthegameobjectthathasthescript").GetComponent<turnStart>();
}

For game managers that there only eve one of I often do:

 public class SomeGameManager : MonoBehaviour {
public static SomeGameManager instance;


void Awake(){
instance = this;
}

}

//Then anywhere in other scripts I can do
SomeGameManager.instance.somePublicVariable;
//or
SomeGameManager.instance.somePublicMethod();

Note that SomeGameManager.instance is not available in other scripts before after Awake

Unity is not out to get you, its not joking about not using new