修正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 -1
View File
@@ -16,7 +16,7 @@ public class LevelProbabilityPanel : MonoBehaviour
{
Targets nowTarget = scenePrefabSet.targets[i];
targetLevelProbabilityPanel.Add(Instantiate(singleTargetLevelProbabilityPanel, transform).GetComponent<TargetLevelProbabilityPanel>());
targetLevelProbabilityPanel[i].IntializePanels(scenePrefabSet.GetLevelNumber(nowTarget), nowTarget.ToString());
targetLevelProbabilityPanel[i].IntializePanels(nowTarget, nowTarget.ToString());
}
}
}
@@ -16,7 +16,7 @@ public class StartMenuProbabilityPanel : MonoBehaviour
{
Targets nowTarget = scenePrefabSet.targets[i];
targetLevelProbabilityPanel.Add(Instantiate(singleTargetLevelProbabilityPanel, transform).GetComponent<TargetLevelProbabilityPanel>());
targetLevelProbabilityPanel[i].IntializePanels(scenePrefabSet.GetLevelNumber(nowTarget), nowTarget.ToString());
targetLevelProbabilityPanel[i].IntializePanels(nowTarget, nowTarget.ToString());
}
}
}
+8 -8
View File
@@ -13,7 +13,7 @@ public class StartUIManager : MonoBehaviour
private SceneLoader sceneLoader;
private ButtonActivateColorChanger buttonActivateColorChanger;
private StartMenuProbabilityPanel startMenuProbabilityPanel;
private LevelProbabilityPanel startMenuProbabilityPanel;
private CommonParameterContainer commonParameterContainer;
private float startTime;
private float nowTime;
@@ -22,7 +22,7 @@ public class StartUIManager : MonoBehaviour
{
sceneLoader = sceneLoaderObj.GetComponent<SceneLoader>();
buttonActivateColorChanger = GetComponent<ButtonActivateColorChanger>();
startMenuProbabilityPanel = targetLevelProbabilityPanelOBJ.GetComponent<StartMenuProbabilityPanel>();
startMenuProbabilityPanel = targetLevelProbabilityPanelOBJ.GetComponent<LevelProbabilityPanel>();
commonParameterContainer = CommonParameterContainer.Instance;
messageTextObj.text = "";
buttonActivateColorChanger.InitializeAllButtonColor();
@@ -86,13 +86,13 @@ public class StartUIManager : MonoBehaviour
private void ApplicateProbabilityToData()
{
for (int i = 0; i < commonParameterContainer.scenePrefabSet.targetLevels[0].levelSize; i++)
for(int targetIndex = 0;targetIndex < commonParameterContainer.scenePrefabSet.targetLevels.Length; targetIndex++)
{
commonParameterContainer.gotoLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[0].singleLevelPanels[i].ProbabilityValue);
}
for(int i = 0; i < commonParameterContainer.scenePrefabSet.targetLevels[1].levelSize; i++)
{
commonParameterContainer.attackLevelProbs.Add(startMenuProbabilityPanel.targetLevelProbabilityPanel[1].singleLevelPanels[i].ProbabilityValue);
Targets nowTarget = commonParameterContainer.scenePrefabSet.targets[targetIndex];
for(int levelIndex = 0; levelIndex < commonParameterContainer.scenePrefabSet.targetLevels[targetIndex].levelSize; levelIndex++)
{
commonParameterContainer.levelProbs[nowTarget] = startMenuProbabilityPanel.targetLevelProbabilityPanel[targetIndex].GetTargetProb();
}
}
}
}
+41 -12
View File
@@ -14,15 +14,25 @@ public class TargetLevelProbabilityPanel : MonoBehaviour
public List<SingleLevelProbabilityPanel> singleLevelPanels = new List<SingleLevelProbabilityPanel>();
private int panelNum = 0;
private Targets thisTarget;
public void IntializePanels(int levelNum, string titleName)
/// <summary>
/// Initializes panels for a specific target, including the title and level probabilities.
/// </summary>
/// <param name="thisTarget">The specified target, used to obtain associated level numbers and probability data.</param>
/// <param name="titleName">The title name for the panel.</param>
/// <remarks>
/// This method first calculates the panel dimensions, then creates and sets the title text. Subsequently, it creates individual probability panels for each level and adds event listeners for sliders and input fields.
/// It relies on the CommonParameterContainer instance to access scene prefab sets and level probabilities.
/// </remarks>
public void IntializePanels(Targets thisTarget, string titleName)
{
this.thisTarget = thisTarget;
int levelNum = CommonParameterContainer.Instance.scenePrefabSet.GetLevelNumber(thisTarget);
// initialize target level probability panel size
float defaultWidth = singleLevelProbabilityPanel.GetComponent<RectTransform>().sizeDelta.x;
float defaultLevelHeight = singleLevelProbabilityPanel.GetComponent<RectTransform>().sizeDelta.y;
float titleHeight = targetTitleText.GetComponent<RectTransform>().sizeDelta.y;
float averageProbability = 1f / levelNum;
float lastLevelProbability = 1f - averageProbability * (levelNum - 1);
// Debug.Log("averageProbability: " + averageProbability);
transform.GetComponent<RectTransform>().sizeDelta = new Vector2(defaultWidth, (defaultLevelHeight * levelNum) + titleHeight);
// create title text
@@ -34,7 +44,8 @@ public class TargetLevelProbabilityPanel : MonoBehaviour
int tempIndex = i;
singleLevelPanelsObjs.Add(Instantiate(singleLevelProbabilityPanel, transform));
singleLevelPanels.Add(singleLevelPanelsObjs[i].GetComponent<SingleLevelProbabilityPanel>());
singleLevelPanels[i].InitializeLevelProbabilityPanel(i, i == levelNum - 1 ? lastLevelProbability : averageProbability);
Debug.Log(CommonParameterContainer.Instance.levelProbs.Count);
singleLevelPanels[i].InitializeLevelProbabilityPanel(i, CommonParameterContainer.Instance.levelProbs[thisTarget][i]);
//add onValueChanged event to slider and input field
singleLevelPanels[i].probabilitySlider.onValueChanged.AddListener((value) => OnProbabilityValueChange(value, tempIndex));
singleLevelPanels[i].inputField.onEndEdit.AddListener((value) => OnProbabilityValueChange(value, tempIndex));
@@ -42,6 +53,24 @@ public class TargetLevelProbabilityPanel : MonoBehaviour
panelNum = levelNum;
}
/// <summary>
/// Retrieves the probability values for all levels of the current target.
/// </summary>
/// <returns>A list of floating-point numbers containing the probability values for each level.</returns>
/// <remarks>
/// This method iterates through the panels of all levels, collecting and returning the probability value for each level.
/// It relies on the singleLevelPanels list, which should have been properly initialized and populated before calling this method.
/// </remarks>
public List<float> GetTargetProb()
{
List<float> targetProb = new List<float>();
for (int i = 0; i < panelNum; i++)
{
targetProb.Add(singleLevelPanels[i].ProbabilityValue);
}
return targetProb;
}
/// <summary>
/// On Probability Slider Value Change.Adjust other sliders' value to make sure the total value is 1.
/// </summary>
@@ -243,20 +272,20 @@ public class TargetLevelProbabilityPanel : MonoBehaviour
}
/// <summary>
/// applicate correction value to each panel
/// Applies correction values to adjust the probability values for each level of the current target.
/// </summary>
/// <param name="correctionValues">An array of correction values to be applied to the probability value of each level.</param>
/// <remarks>
/// This method iterates through all the level panels, updating the probability by subtracting the corresponding correction value from the probability value of each level.
/// It also synchronously updates the level probabilities for this target stored in the CommonParameterContainer instance.
/// This method assumes that the length of the correctionValues array matches the number of level panels.
/// </remarks>
private void applyCorrectionValue(float[] correctionValues)
{
for (int i = 0; i < panelNum; i++)
{
/* if (singleLevelPanels[i].ProbabilityValue - correctionValues[i] < 0)
{
Debug.LogWarning("Probability value is less than 0");
Debug.Log(i);
Debug.Log(singleLevelPanels[i].ProbabilityValue);
Debug.Log(correctionValues[i]);
}*/
singleLevelPanels[i].SetProbability(singleLevelPanels[i].ProbabilityValue - correctionValues[i]);
CommonParameterContainer.Instance.levelProbs[thisTarget][i] = singleLevelPanels[i].ProbabilityValue;
}
}
}