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); } }
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); }
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; }
/// <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); }
/// <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()); }
/// <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; }