修正Level生成概率在Scene之间的传递方法,修正Level probability Panel在Train scene中不能继承StartScene数据问题和不修改LevelProbs的问题。
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user