Пример #1
0
 protected virtual void Reset()
 {
     m_Reset = true;
     RemoveAll();
     m_CurrentX            = 0f;
     m_LastBlock           = null;
     m_LastBackgroundBlock = null;
     for (int i = 0; i < m_BackgroundLayers.Length; i++)
     {
         m_BackgroundLayers [i].Reset();
     }
     m_FathestBackgroundX = 0f;
     m_Blocks.Clear();
     m_BackgroundBlocks.Clear();
     m_GeneratedStartBlocksCount  = 0;
     m_GeneratedMiddleBlocksCount = 0;
     m_GeneratedEndBlocksCount    = 0;
     m_Reset = false;
 }
Пример #2
0
        public virtual bool CreateBackgroundBlock(BackgroundBlock blockPrefab, Vector3 position, BackgroundLayer layer, int layerIndex)
        {
            if (blockPrefab == null)
            {
                return(false);
            }
            blockPrefab.PreGenerate(this);
            position.z = blockPrefab.transform.position.z;
            position.y = blockPrefab.transform.position.y;
            BackgroundBlock block = Instantiate <BackgroundBlock> (blockPrefab, position, Quaternion.identity);
            float           width = Random.Range(block.MinWidth, block.MaxWidth);

            m_BackgroundLayers [layerIndex].PreviousX = m_BackgroundLayers [layerIndex].CurrentX;
            m_BackgroundLayers [layerIndex].CurrentX += width;
            block.Width = width;
            m_BackgroundLayers [layerIndex].LastBlock = block;
            m_BackgroundBlocks.Add(position, block);
            blockPrefab.PostGenerate(this);
            if (m_BackgroundLayers [layerIndex].CurrentX > m_FathestBackgroundX)
            {
                m_FathestBackgroundX = m_BackgroundLayers [layerIndex].CurrentX;
            }
            return(true);
        }
Пример #3
0
 public virtual void Generate()
 {
     if (m_CurrentX < m_Settings.LevelLength || m_Settings.LevelLength <= 0)
     {
         bool    isEnd = false, isStart = false, isMiddle = false;
         Block   block   = null;
         Vector3 current = new Vector3(m_CurrentX, 0f, 0f);
         float   newX    = 0f;
         if (m_GeneratedStartBlocksCount < m_Settings.StartBlocksCount || m_Settings.StartBlocksCount <= 0)
         {
             isStart = true;
             block   = ChooseFrom(m_Settings.StartBlocks);
         }
         else if (m_GeneratedMiddleBlocksCount < m_Settings.MiddleBlocksCount || m_Settings.MiddleBlocksCount <= 0)
         {
             isMiddle = true;
             block    = ChooseFrom(m_Settings.MiddleBlocks);
         }
         else if (m_GeneratedEndBlocksCount < m_Settings.EndBlocksCount || m_Settings.EndBlocksCount <= 0)
         {
             isEnd = true;
             block = ChooseFrom(m_Settings.EndBlocks);
         }
         if (m_LastBlock != null)
         {
             newX = m_CurrentX + m_LastBlock.Width;
         }
         else
         {
             newX = 0f;
         }
         if (block != null && (m_LastBlock == null || newX < m_Character.transform.position.x + m_GenerateRange))
         {
             if (isStart)
             {
                 if (m_Settings.StartBlocksCount > 0)
                 {
                     m_GeneratedStartBlocksCount++;
                 }
             }
             else if (isMiddle)
             {
                 if (m_Settings.MiddleBlocksCount > 0)
                 {
                     m_GeneratedMiddleBlocksCount++;
                 }
             }
             else if (isEnd)
             {
                 if (m_Settings.EndBlocksCount > 0)
                 {
                     m_GeneratedEndBlocksCount++;
                 }
             }
             CreateBlock(block, current);
         }
     }
     for (int i = 0; i < m_BackgroundLayers.Length; i++)
     {
         int  random   = Random.Range(0, 2);
         bool generate = random == 1 ? true : false;
         if (!generate)
         {
             continue;
         }
         Vector3         current = new Vector3(m_BackgroundLayers [i].CurrentX, 0f, 0f);
         BackgroundBlock block   = ( BackgroundBlock )ChooseFrom(m_BackgroundLayers [i].Blocks);
         float           newX    = 0f;
         if (m_BackgroundLayers [i].LastBlock != null)
         {
             newX = m_BackgroundLayers [i].CurrentX + m_BackgroundLayers [i].LastBlock.Width;
         }
         else
         {
             newX = 0f;
         }
         if (block != null && (m_BackgroundLayers [i].LastBlock == null || newX < m_Character.transform.position.x + m_BackgroundGenerateRange))
         {
             CreateBackgroundBlock(block, current, m_BackgroundLayers [i], i);
         }
     }
 }
Пример #4
0
 public virtual void RemoveBackgroundBlock(BackgroundBlock block)
 {
     block.OnRemove(this);
     Destroy(m_BackgroundBlocks [block.transform.position].gameObject);
     m_BackgroundBlocks.Remove(block.transform.position);
 }
Пример #5
0
 public void Reset()
 {
     CurrentX  = 0f;
     PreviousX = 0f;
     LastBlock = null;
 }