/// <summary> /// Gets the random number generator. /// </summary> /// <param name="worldSeed">The world seed.</param> /// <param name="stepCount">The current step.</param> /// <param name="thingId">The ID of the thing.</param> /// <param name="stage">The stage of this generation.</param> /// <returns>A random number generator initialized with the inputted info.</returns> public static Random GetRandom(int worldSeed, int stepCount, Guid thingId, RandomStage stage) { unchecked { return(new Random((worldSeed * stepCount * thingId.ToString().GetStableHashCode()) + (int)stage)); } }
private void DrawStages() { stageType = (StageType)EditorGUILayout.EnumPopup("Stage Type", stageType); if (GUILayout.Button("Add stage")) { Stage stage; switch (stageType) { case StageType.Random: stage = new RandomStage(); break; default: stage = new Stage(); break; } stages.Add(stage); } Stage removedStage = null; Stage duplicatedStage = null; for (int kIndex = 0; kIndex < stages.Count; kIndex++) { Stage stage = stages[kIndex]; stage.SetOrder(kIndex + 1); stage.OnGUI(); if (stage.IsRemoved) { removedStage = stage; break; } if (stage.IsDuplicated) { duplicatedStage = stage; } } if (removedStage != null) { stages.Remove(removedStage); ResetCacheRectData(); } if (duplicatedStage != null) { stages.Add(duplicatedStage.Clone()); } }
//! 마이너 보스 / 필드보스 보상 정사각형 상자 public void MinorBossSquareBox() { m_fItemRandom1 = Random.Range(0.0f, 100f); RandomStage pStage = new RandomStage(); Debug.Log("StageLevel : " + pStage.GetStageLevel()); switch (m_nMBSquareSelect) { case 0: if (m_fItemRandom1 <= (pStage.GetStageLevel() * 0.2f)) { Debug.Log("3티어 악마의 심장 : " + m_fItemRandom1); GetDemonSouls(3); } else { m_nMBSquareSelect++; MinorBossSquareBox(); } break; case 1: if (m_fItemRandom1 >= (pStage.GetStageLevel() * 0.2f) && m_fItemRandom1 < (pStage.GetStageLevel() * 0.5f)) { Debug.Log("2티어 악마의 심장 : " + m_fItemRandom1); GetDemonSouls(2); } else { m_nMBSquareSelect++; MinorBossSquareBox(); } break; case 2: if (m_fItemRandom1 >= (pStage.GetStageLevel() * 0.5f) && m_fItemRandom1 < (pStage.GetStageLevel() * 1f)) { Debug.Log("1티어 악마의 심장 : " + m_fItemRandom1); GetDemonSouls(1); } else { Debug.Log("탄약 50발 획득 : " + m_fItemRandom1); GetAmmo(50); m_nMBSquareSelect = 0; } break; } }
//! 마이너 보스 / 필드보스 보상 넓적한 상자 public void MinorBossBigWeaponBox() { m_fItemRandom1 = Random.Range(0.0f, 100f); RandomStage pStage = new RandomStage(); Debug.Log("StageLevel : " + pStage.GetStageLevel()); switch (m_nMBBigSelect) { case 0: if (m_fItemRandom1 <= (pStage.GetStageLevel() * 0.2f)) { Debug.Log("4티어 무기 : " + m_fItemRandom1); GetWeaponRand(4); } else { m_nMBBigSelect++; MinorBossBigWeaponBox(); } break; case 1: if (m_fItemRandom1 >= (pStage.GetStageLevel() * 0.2f) && m_fItemRandom1 < (pStage.GetStageLevel() * 0.5f)) { Debug.Log("3티어 무기 : " + m_fItemRandom1); GetWeaponRand(3); } else { m_nMBBigSelect++; MinorBossBigWeaponBox(); } break; case 2: if (m_fItemRandom1 >= (pStage.GetStageLevel() * 0.5f) && m_fItemRandom1 < (pStage.GetStageLevel() * 1f)) { Debug.Log("2티어 무기 : " + m_fItemRandom1); GetWeaponRand(2); } else { Debug.Log("1티어 무기 획득 : " + m_fItemRandom1); GetWeaponRand(1); m_nMBBigSelect = 0; } break; } }
//! 섬멸전 보상 넓적한 상자 public void DestroyBigWeaponBox() { m_fItemRandom1 = Random.Range(0.0f, 100f); RandomStage pStage = new RandomStage(); Debug.Log("StageLevel : " + pStage.GetStageLevel()); switch (m_nMBBigSelect) { case 0: if (m_fItemRandom1 <= (pStage.GetStageLevel() * 0.3f)) { Debug.Log("3티어 무기 : " + m_fItemRandom1); GetWeaponRand(3); } else { m_nMBBigSelect++; DestroyBigWeaponBox(); } break; case 1: if (m_fItemRandom1 >= (pStage.GetStageLevel() * 0.3f) && m_fItemRandom1 < (pStage.GetStageLevel() * 0.7f)) { Debug.Log("2티어 악마의 심장 : " + m_fItemRandom1); GetDemonSouls(2); } else { Debug.Log("1티어 무기획득 : " + m_fItemRandom1); GetWeaponRand(1); m_nMBBigSelect = 0; } break; } }
[SerializeField] GameObject m_bossFloor; // ボスのFloor private void Awake() { Instance = this; }