取消使用StartSceneData来跨Scene传输数据,改用CommonParameterContainer Singleton来统一保存所需数据。

This commit is contained in:
2023-11-16 01:03:54 +09:00
parent 726ce450ab
commit c2eaa8cbfc
15 changed files with 179 additions and 210 deletions
@@ -4,11 +4,6 @@ using UnityEngine;
public class CommonParameterContainer : Singleton<CommonParameterContainer>
{
[SerializeField] private GameObject hudObj;
private StartSeneData startSceneData;
private MessageBoxController messageCon;
[Header("Env")]
public bool lockMouse = false;
public float damage = 50; // damage to enemy
@@ -83,43 +78,21 @@ public class CommonParameterContainer : Singleton<CommonParameterContainer>
[Tooltip("while move mouse a little bit's penalty")]
public float mousePenalty = 0.06f;
[NonSerialized] public SceneBlocksSet scenePrefabSet;
public SceneBlocksSet scenePrefabSet;
[NonSerialized] public int gameMode; // 0 = trainning mode, 1 = play mode
[NonSerialized] public float attackProb = 0f;
[NonSerialized] public List<float> attackLevelProbs = new List<float>();
public List<float> attackLevelProbs = new List<float>();
[NonSerialized] public float gotoProb = 0f;
[NonSerialized] public List<float> gotoLevelProbs = new List<float>();
public List<float> gotoLevelProbs = new List<float>();
[NonSerialized] public float defenceProb = 0f;
[NonSerialized] public List<float> defenceLevelProbs = new List<float>();
public List<float> defenceLevelProbs = new List<float>();
private void Start()
{
Instance.persistThroughScene = false;
messageCon = hudObj.GetComponent<MessageBoxController>();
try
{
// try get start scene data
startSceneData = GameObject.Find("StartSceneDataTransfer").GetComponent<StartSeneData>();
messageCon.PushMessage(
new List<string> { "ParameterContainer:", "StartSceneDataTransfer found!" },
new List<string> { "green", "white" });
}
catch
{
// if not found, find dummy StartSeneData
startSceneData = GameObject.Find("StartSceneDataTransferDummy").GetComponent<StartSeneData>();
messageCon.PushMessage(
new List<string> { "ParameterContainer:", "StartSceneDataTransfer not found!Use Dummy." },
new List<string> { "orange" });
}
gameMode = startSceneData.gameMode;
attackProb = startSceneData.attackProb;
attackLevelProbs = startSceneData.attackLevelProbs;
gotoProb = startSceneData.gotoProb;
gotoLevelProbs = startSceneData.gotoLevelProbs;
defenceProb = startSceneData.defenceProb;
defenceLevelProbs = startSceneData.defenceLevelProbs;
scenePrefabSet = startSceneData.scenePrefabSet;
Instance.KeepThroughSceneChange();
scenePrefabSet.InitializeSceneBlocksSet();
attackLevelProbs = new List<float>(scenePrefabSet.targetLevels[0].levelSize);
gotoLevelProbs = new List<float>(scenePrefabSet.targetLevels[1].levelSize);
}
}
+1 -21
View File
@@ -10,10 +10,7 @@ public class ParameterContainer : MonoBehaviour
private TargetController targetCon;
private SceneBlockContainer blockCont;
private StartSeneData startSceneData;
private MessageBoxController messageCon;
private CommonParameterContainer commonParamCont;
private float agentDistance;
private int agentInArea;
[Header("Dynamic Rewards")]
@@ -54,7 +51,6 @@ public class ParameterContainer : MonoBehaviour
{
targetCon = targetConObj.GetComponent<TargetController>();
blockCont = blockConObj.GetComponent<SceneBlockContainer>();
messageCon = hudObj.GetComponent<MessageBoxController>();
commonParamCont = CommonParameterContainer.Instance;
areaTimeBonusPerSec = commonParamCont.areaTimeBonusPerSec;
@@ -65,22 +61,6 @@ public class ParameterContainer : MonoBehaviour
areaTimeBonus = areaTimeBonusPerSec * timeLimit;
freeTimeBonus = freeTimeBonusPerSec * timeLimit;
targetTimeBonus = targetTimeBonusPerSec * timeLimit;
try
{
// try get start scene data
startSceneData = GameObject.Find("StartSceneDataTransfer").GetComponent<StartSeneData>();
messageCon.PushMessage(
new List<string> { "ParameterContainer:", "StartSceneDataTransfer found!" },
new List<string> { "green", "white" });
}
catch
{
// if not found, find dummy StartSeneData
startSceneData = GameObject.Find("StartSceneDataTransferDummy").GetComponent<StartSeneData>();
messageCon.PushMessage(
new List<string> { "ParameterContainer:", "StartSceneDataTransfer not found!Use Dummy." },
new List<string> { "orange" });
}
// Win Rewards
goWinReward = commonParamCont.goWinRewardDefault;
@@ -94,7 +74,7 @@ public class ParameterContainer : MonoBehaviour
// get target distance and in area
if (targetCon.targetType is Targets.Go or Targets.Attack)
{
(agentDistance, agentInArea) = blockCont.GetAgentTargetDistanceAndInside(agentObj.transform.position);
(_, agentInArea) = blockCont.GetAgentTargetDistanceAndInside(agentObj.transform.position);
// attack goto or defence target
if (agentInArea == 1)
{
+4 -3
View File
@@ -377,6 +377,7 @@ public class TargetController : MonoBehaviour
/// <returns>A random level index.</returns>
public int RollRandomLevelIndex(Targets target)
{
Debug.Log(target);
List<float> targetProbs;
switch (target)
@@ -392,9 +393,9 @@ public class TargetController : MonoBehaviour
break;
default:
messageBoxCon.PushMessage(
new List<string> { "[ERROR]TargetController:RandomLevel", "target type error" },
new List<string> { "[ERROR]TargetController:RollRandomLevelIndex", "target type error" },
new List<string> { "#800000ff" });
Debug.LogWarning("[ERROR]TargetController:RandomLevel:target type error");
Debug.LogWarning("[ERROR]TargetController:RollRandomLevelIndex:target type error");
return -1; // Exit early on default case
}
@@ -412,7 +413,7 @@ public class TargetController : MonoBehaviour
// If no level was returned, log an error and return -1
messageBoxCon.PushMessage(
new List<string> { "[ERROR]TargetController:RandomLevel", "level index out of range" },
new List<string> { "[ERROR]TargetController:RollRandomLevelIndex", "level index out of range" },
new List<string> { "orange" });
return -1;
}
+6 -6
View File
@@ -20,21 +20,21 @@ public class Singleton<T> : MonoBehaviour where T : MonoBehaviour
}
}
public bool persistThroughScene = false;
protected virtual void Awake()
{
if (_instance == null)
{
_instance = this as T;
if (persistThroughScene)
{
DontDestroyOnLoad(gameObject);
}
}
else
{
Destroy(gameObject);
}
}
// keep this instance through scene change
public void KeepThroughSceneChange()
{
DontDestroyOnLoad(this.gameObject);
}
}
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using UnityEngine;
public class StartSeneData : MonoBehaviour
public class StartSeneDataremove : MonoBehaviour
{
[Header("Game mode")]
public int gameMode = 0;// default trainning mode
+1 -18
View File
@@ -1,4 +1,3 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
@@ -12,23 +11,7 @@ public class LevelProbabilityPanel : MonoBehaviour
private void Start()
{
if (startSceneData == null)
{
try
{
// try get start scene data
scenePrefabSet = GameObject.Find("StartSceneDataTransfer").GetComponent<StartSeneData>().scenePrefabSet;
}
catch
{
// if not found, find dummy StartSeneData
scenePrefabSet = GameObject.Find("StartSceneDataTransferDummy").GetComponent<StartSeneData>().scenePrefabSet;
}
}
else
{
scenePrefabSet = startSceneData.GetComponent<StartSeneData>().scenePrefabSet;
}
scenePrefabSet = CommonParameterContainer.Instance.scenePrefabSet;
for (int i = 0; i < scenePrefabSet.targetLevels.Length; i++)
{
Targets nowTarget = scenePrefabSet.targets[i];
@@ -11,7 +11,7 @@ public class StartMenuProbabilityPanel : MonoBehaviour
private void Start()
{
scenePrefabSet = startSceneData.GetComponent<StartSeneData>().scenePrefabSet;
scenePrefabSet = CommonParameterContainer.Instance.scenePrefabSet;
for (int i = 0; i < scenePrefabSet.targetLevels.Length; i++)
{
Targets nowTarget = scenePrefabSet.targets[i];
+14 -15
View File
@@ -7,24 +7,23 @@ public class StartUIManager : MonoBehaviour
{
[SerializeField] private int waitTimeLimit = 45;
[SerializeField] private GameObject sceneLoaderObj;
[SerializeField] private GameObject startSceneDataObj;
[SerializeField] private GameObject targetLevelProbabilityPanelOBJ;
[SerializeField] private TextMeshProUGUI messageTextObj;
[SerializeField] private TextMeshProUGUI waitTimeTextObj;
private SceneLoader sceneLoader;
private StartSeneData startSceneData;
private ButtonActivateColorChanger buttonActivateColorChanger;
private StartMenuProbabilityPanel startMenuProbabilityPanel;
private CommonParameterContainer commonParameterContainer;
private float startTime;
private float nowTime;
// Start is called before the first frame update
void Start()
{
sceneLoader = sceneLoaderObj.GetComponent<SceneLoader>();
startSceneData = startSceneDataObj.GetComponent<StartSeneData>();
buttonActivateColorChanger = GetComponent<ButtonActivateColorChanger>();
startMenuProbabilityPanel = targetLevelProbabilityPanelOBJ.GetComponent<StartMenuProbabilityPanel>();
commonParameterContainer = CommonParameterContainer.Instance;
messageTextObj.text = "";
buttonActivateColorChanger.InitializeAllButtonColor();
}
@@ -44,7 +43,7 @@ public class StartUIManager : MonoBehaviour
// while StartButton-Play Pressed
public void OnPlayButtonPressed()
{
startSceneData.gameMode = 1;
commonParameterContainer.gameMode = 1;
sceneLoader.LoadGameScene(SceneLoader.SceneType.Play);
messageTextObj.text = "Loading Play Scene...";
}
@@ -52,30 +51,30 @@ public class StartUIManager : MonoBehaviour
public void OnAttackTrainButtonPressed()
{
// while Train-Attack-Button Pressed
startSceneData.attackProb = 1f;
commonParameterContainer.attackProb = 1f;
ApplicateProbabilityToData();
LoadTrainScene();
}
public void OnGotoTrainButtonPressed()
{
// while Train-Goto-Button Pressed
startSceneData.gotoProb = 1f;
commonParameterContainer.gotoProb = 1f;
ApplicateProbabilityToData();
LoadTrainScene();
}
public void OnFreeTrainButtonPressed()
{
// while Train-Free-Button Pressed
startSceneData.attackProb = 0f;
startSceneData.gotoProb = 0f;
startSceneData.defenceProb = 0f;
commonParameterContainer.attackProb = 0f;
commonParameterContainer.gotoProb = 0f;
commonParameterContainer.defenceProb = 0f;
LoadTrainScene();
}
public void OnMixTrainButtonPressed()
{
// while Train-Mix-Button Pressed
startSceneData.attackProb = 0.333f;
startSceneData.gotoProb = 0.333f;
commonParameterContainer.attackProb = 0.333f;
commonParameterContainer.gotoProb = 0.333f;
LoadTrainScene();
}
private void LoadTrainScene()
@@ -87,13 +86,13 @@ public class StartUIManager : MonoBehaviour
private void ApplicateProbabilityToData()
{
for (int i = 0; i < startSceneData.scenePrefabSet.targetLevels[0].levelSize; i++)
for (int i = 0; i < commonParameterContainer.scenePrefabSet.targetLevels[0].levelSize; i++)
{
startSceneData.gotoLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[0].singleLevelPanels[i].ProbabilityValue);
commonParameterContainer.gotoLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[0].singleLevelPanels[i].ProbabilityValue);
}
for(int i = 0; i < startSceneData.scenePrefabSet.targetLevels[1].levelSize; i++)
for(int i = 0; i < commonParameterContainer.scenePrefabSet.targetLevels[1].levelSize; i++)
{
startSceneData.attackLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[1].singleLevelPanels[i].ProbabilityValue);
commonParameterContainer.attackLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[1].singleLevelPanels[i].ProbabilityValue);
}
}
}