public void SetBlockType(int blockType)
 {
     if (blockType >= 0 && blockType < blockDatas.Length)
     {
         currentBlockData = blockDatas[blockType];
     }
     else
     {
         throw new InvalidDataException("BlockType not in range of prefab array! Length is: " + blockDatas.Length + ", but blockType is: " + blockType);
     }
 }
示例#2
0
 private bool CanEndPlatformBePlaced(int x, int y)
 {
     for (int i = 0; i < platformWidth; i++)
     {
         Block_Data block = levelData.BlockMap[Mathf.Clamp(x + i - platformWidth / 2, 0, width - 1), y];
         if (block.BlockType != BlockType.Goal && !block.IsReplaceable)
         {
             return(false);
         }
     }
     return(true);
 }
示例#3
0
    private void SetBlock(int x, int y, Block_Data data)
    {
        GameObject newBlockObject = Instantiate(blockPrefabs[(int)data.BlockType]);

        newBlockObject.transform.position = blockMap[x, y].transform.position;
        Destroy(blockMap[x, y]);//Could lead to performance problems
        blockMap[x, y]      = newBlockObject;
        newBlockObject.name = "[" + x + "-" + y + "]";
        newBlockObject.transform.SetParent(currentLevel.transform);
        Block newBlock = newBlockObject.GetComponent <Block>();

        newBlock.InitializeBlock(data);
        levelData.BlockMap[x, y] = data;
    }
示例#4
0
 /// <summary>
 /// Try placing a Block at the position (x,y)
 /// Filters platforms and normal blocks
 /// Can fail if action currently not allowed
 /// </summary>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="data"></param>
 public bool PlaceBlock(int x, int y, Block_Data data)
 {
     if (data.BlockType == BlockType.Start)
     {
         if (levelData.StartPlatformCoordinates.x == x && levelData.StartPlatformCoordinates.y == y)
         {
             return(false);
         }
         if (!CanStartPlatformBePlaced(x, y))
         {
             return(false);
         }
         SetStartPlatform(x, y);
     }
     else if (data.BlockType == BlockType.Goal)
     {
         if (levelData.GoalPlatformCoordinates.x == x && levelData.GoalPlatformCoordinates.y == y)
         {
             return(false);
         }
         if (!CanEndPlatformBePlaced(x, y))
         {
             return(false);
         }
         SetGoalPlatform(x, y);
     }
     else
     {
         BlockType oldBlockType = levelData.BlockMap[x, y].BlockType;
         if (!levelData.BlockMap[x, y].IsReplaceable) //not allowed to replace certain blocks
         {
             return(false);
         }
         if (levelData.BlockMap[x, y].Equals(data)) //no point in replacing block with themselves
         {
             return(false);
         }
         SetBlock(x, y, data);
     }
     levelData.IsExportable = false;
     return(true);
 }
示例#5
0
    /// <summary>
    /// Creates levelObjects and initializes them with the data in levelData
    /// </summary>
    private void CreateLevel()
    {
        bool deactivateEmptyBlocks = SceneManager.GetActiveScene().name != SceneDictionary.LevelEditor;

        if (currentLevel != null)
        {
            Destroy(currentLevel);
        }
        currentLevel      = new GameObject();
        currentLevel.name = levelData.Name;
        currentLevel.transform.SetParent(this.transform);
        blockMap     = new GameObject[width, height];
        lastBlockRow = -1;

        for (int i = 0; i < height; i++)
        {
            for (int j = 0; j < width; j++)
            {
                Block_Data blockData   = levelData.BlockMap[j, i];
                GameObject blockObject = Instantiate(blockPrefabs[(int)blockData.BlockType]);
                blockObject.name = "[" + j + "-" + i + "]";
                blockObject.transform.SetParent(currentLevel.transform);
                blockObject.transform.localPosition = new Vector3(j * Block_Data.BlockSize, i * Block_Data.BlockSize, 0);
                blockMap[j, i] = blockObject;
                blockObject.GetComponent <Block>().InitializeBlock(blockData);
                if (blockData.BlockType == BlockType.Empty)
                {
                    if (deactivateEmptyBlocks)
                    {
                        blockObject.SetActive(false);
                    }
                }
                else if (lastBlockRow == -1)
                {
                    lastBlockRow = i;
                }
            }
        }
    }
 public override bool Equals(Block_Data other)
 {
     return(base.Equals(other) && this.blockID == ((LockBlock_Data)other).GetID());
 }
示例#7
0
 /// <summary>
 /// Sets the BlockData of a block and initializes the block (e.g. id for group blocks / timers for charge)
 /// </summary>
 /// <param name="data"></param>
 public virtual void InitializeBlock(Block_Data data)
 {
     BlockData       = data;
     recoveryTexture = gameObject.GetComponent <Renderer>().material.mainTexture;
 }
 public void SetCurrentBlock(Block_Data blockData)
 {
     currentBlockData = blockData;
 }