修正Level生成概率在Scene之间的传递方法,修正Level probability Panel在Train scene中不能继承StartScene数据问题和不修改LevelProbs的问题。

This commit is contained in:
2023-11-17 13:44:07 +09:00
parent c2eaa8cbfc
commit d83d026fea
11 changed files with 141 additions and 111 deletions
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
public class CommonParameterContainer : Singleton<CommonParameterContainer>
@@ -82,17 +83,38 @@ public class CommonParameterContainer : Singleton<CommonParameterContainer>
[NonSerialized] public int gameMode; // 0 = trainning mode, 1 = play mode
[NonSerialized] public float attackProb = 0f;
public List<float> attackLevelProbs = new List<float>();
[NonSerialized] public float gotoProb = 0f;
public List<float> gotoLevelProbs = new List<float>();
[NonSerialized] public float defenceProb = 0f;
public List<float> defenceLevelProbs = new List<float>();
public Dictionary<Targets, List<float>> levelProbs = new Dictionary<Targets, List<float>>();
protected override void Awake()
{
base.Awake();
scenePrefabSet.InitializeSceneBlocksSet();
InitializeLevelProbs();
}
private void Start()
{
Instance.KeepThroughSceneChange();
scenePrefabSet.InitializeSceneBlocksSet();
attackLevelProbs = new List<float>(scenePrefabSet.targetLevels[0].levelSize);
gotoLevelProbs = new List<float>(scenePrefabSet.targetLevels[1].levelSize);
}
// Initialize Common Parameters
private void InitializeLevelProbs()
{
for(int i = 0; i< scenePrefabSet.targetLevels.Length; i++)
{
Targets nowTarget = scenePrefabSet.targets[i];
levelProbs[nowTarget] = new List<float>();
float levelNum = scenePrefabSet.GetLevelNumber(nowTarget);
float averageProbability = 1f / levelNum;
float lastLevelProbability = 1f - averageProbability * (levelNum - 1);
for (int j = 0; j < levelNum-1; j++)
{
levelProbs[nowTarget].Add(averageProbability);
}
levelProbs[nowTarget].Add(lastLevelProbability);
}
}
}
+1 -19
View File
@@ -379,25 +379,7 @@ public class TargetController : MonoBehaviour
{
Debug.Log(target);
List<float> targetProbs;
switch (target)
{
case Targets.Attack:
targetProbs = commonParamCon.attackLevelProbs;
break;
case Targets.Go:
targetProbs = commonParamCon.gotoLevelProbs;
break;
case Targets.Defence:
targetProbs = commonParamCon.defenceLevelProbs;
break;
default:
messageBoxCon.PushMessage(
new List<string> { "[ERROR]TargetController:RollRandomLevelIndex", "target type error" },
new List<string> { "#800000ff" });
Debug.LogWarning("[ERROR]TargetController:RollRandomLevelIndex:target type error");
return -1; // Exit early on default case
}
targetProbs = commonParamCon.levelProbs[target];
// sample random level depends on the target probabilities
float randomNum = UnityEngine.Random.Range(0f, 1f);