예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
 void Awake()
 {
     m_ZapMoneyPrefab = Resources.Load <ZapMoney>(PrefabFinder.PREFABS + "Zap_Model");
     m_DangerousZaps  = new List <Zap>();
     m_LucrativeZaps  = new List <Zap>();
 }