public void Slide(List <PuzzleSlide.Block> current, PuzzleSlide.Block b, int dir) { List <PuzzleSlide.Block> newState = new List <PuzzleSlide.Block>(current); PuzzleSlide.Block newBlock = new PuzzleSlide.Block(b); PuzzleSlide.Block oldBlock = b; while (CheckMove(newState, oldBlock, dir)) { newState.Remove(oldBlock); if (oldBlock.rotation) { newBlock.ypos += dir; } else { newBlock.xpos += dir; } newState.Add(newBlock); Propose(newState, current); newState = new List <PuzzleSlide.Block>(newState); oldBlock = newBlock; newBlock = new PuzzleSlide.Block(oldBlock); } }
public void CreateBlock(PuzzleSlide.Block block, RectTransform pos, bool target = false) { Color borderColour = Color.yellow; Color bgColour = new Color(0.6f, 0.6f, 0f, 1f); // Create object GameObject blockGO = new GameObject("puzzleBlock"); if (block.target) { borderColour = Color.red; bgColour = new Color(0.8f, 0.0f, 0f, 1f); } blockGO.tag = Game.DIALOG; //Game game = Game.Get(); blockGO.transform.SetParent(pos); RectTransform transBg = blockGO.AddComponent <RectTransform>(); transBg.pivot = Vector2.up; transBg.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Top, (block.ypos * 3f * UIScaler.GetPixelsPerUnit()) + 0.1f, ((block.ylen + 1) * 3f * UIScaler.GetPixelsPerUnit()) - 0.2f); transBg.SetInsetAndSizeFromParentEdge(RectTransform.Edge.Left, (block.xpos * 3f * UIScaler.GetPixelsPerUnit()) + 0.1f, ((block.xlen + 1) * 3f * UIScaler.GetPixelsPerUnit()) - 0.2f); blockGO.AddComponent <CanvasRenderer>(); new UIElementBorder(blockGO.transform, transBg, Game.DIALOG, borderColour); UnityEngine.UI.Image uiImage = blockGO.AddComponent <UnityEngine.UI.Image>(); uiImage.color = bgColour; BlockSlider slider = blockGO.AddComponent <BlockSlider>(); slider.block = block; slider.win = this; }
public bool CheckMove(List <PuzzleSlide.Block> state, PuzzleSlide.Block b, int dir) { Vector2 target = b.GetMove(dir); return(PuzzleSlide.Empty(state, Mathf.RoundToInt(target.x), Mathf.RoundToInt(target.y))); }