public void Init() { // pre fill the zap grid before shuffling. m_ZapGrid = new List <List <Zap> >(); for (int i = 0; i < m_Rows + 1; i++) { List <Zap> zapRowToFill = new List <Zap>(); if (i >= m_Rows) { for (int j = 0; j < m_Cols; j++) { zapRowToFill.Add(m_EndZapPrefab); } } else { // spawn all required zaps for this row int totalForcedPrefabsAdded = 0; for (int j = 0; j < m_ZapPrefabsForced.Count; j++) { int numOfPrefabToSpawn = m_ZapPrefabsForced[j]; Zap prefabToSpawn = m_ZapPrefabs[j]; for (int k = 0; k < numOfPrefabToSpawn; k++) { zapRowToFill.Add(prefabToSpawn); totalForcedPrefabsAdded++; } } for (int j = totalForcedPrefabsAdded; j < m_Cols; j++) { // spawn zap Zap zapPrefab = GetRandomZapPrefab(); zapRowToFill.Add(zapPrefab); } // shuffle the zaps in each row for (int k = 0; k < zapRowToFill.Count; k++) { Zap temp = zapRowToFill[k]; int randomIndex = (int)Random.Range(0, zapRowToFill.Count - 1); zapRowToFill[k] = zapRowToFill[randomIndex]; zapRowToFill[randomIndex] = temp; } } m_ZapGrid.Add(zapRowToFill); } // Do one time calculations for grid before spawning zaps. Vector3 topLeftInWorldSpace = Camera.main.ScreenToWorldPoint( new Vector3(0, 1.5f * ScreenUtilities.GetDistanceInWS(1.0f), 0)); Vector3 origin = topLeftInWorldSpace; origin.z = 1.0f; this.transform.position = origin; m_ZapWidth = CalculateZapWidth(m_EndZapPrefab, m_Cols); for (int i = 0; i < m_Rows + 1; i++) { Vector3 spawnPos = Vector3.zero; for (int j = 0; j < m_Cols; j++) { // set position accordingly relative to previous zap. if (j > 0) { Zap prevZap = m_ZapGrid[i][j - 1]; spawnPos = prevZap.transform.position + new Vector3(prevZap.Width, 0, 0); } else // spawn start zap in row { spawnPos = origin + new Vector3(0, i * m_RowGapDistance, 0); } Zap zapPrefab = m_ZapGrid[i][j]; if (zapPrefab != null) { Zap zap = (Zap)Instantiate(zapPrefab, this.transform); if (zap.IsDangerousZap) { m_DangerousZaps.Add(zap); } if (zap.m_HasPoints && zap.m_Points > 0) { m_LucrativeZaps.Add(zap); } zap.transform.position = spawnPos; zap.SetWidth(m_ZapWidth); zap.SetHeight(m_ZapHeight); zap.SetOffsetDistance(m_OffsetDistance); zap.Row = i; zap.Col = j; m_ZapGrid[i][j] = zap; // spawn things randomly on zap // SpawnRandomObstacle(i, j, m_ChanceOfObstacle); } } } // randomly determine if there is zap money on this zap for (int i = 0; i < m_MaxZapMoneys; i++) { float randomPercentChance = Random.Range(0.0f, 1.0f); if (randomPercentChance <= m_ZapMoneyProbability) { Zap randomZap = GetRandomZap(); if (randomZap != null && !randomZap.GetIsOccupied()) { ZapMoney zapMoney = Instantiate( m_ZapMoneyPrefab, randomZap.GetOffsetPosition(), Quaternion.identity, this.transform); randomZap.SetOccupied(true); } } } }
void Awake() { m_ZapMoneyPrefab = Resources.Load <ZapMoney>(PrefabFinder.PREFABS + "Zap_Model"); m_DangerousZaps = new List <Zap>(); m_LucrativeZaps = new List <Zap>(); }