private PosicaoPeca GetPosicaoPecaRotate90(PosicaoPeca pp) { switch (pp) { case PosicaoPeca.original: return(PosicaoPeca.esquerda); case PosicaoPeca.esquerda: return(PosicaoPeca.abaixo); case PosicaoPeca.abaixo: return(PosicaoPeca.direita); case PosicaoPeca.direita: return(PosicaoPeca.original); default: return(PosicaoPeca.original); } }
private void DrawTileSubRoutine(PieceObject po, string valor) { bool equal = po.faceA == po.faceB; PictureBox pb1 = new PictureBox(); PosicaoPeca pp = PosicaoPeca.original; if (po.faceA == -1 || po.faceB == -1) { return; } byte[] dadosImg = this.GetImageContent(this.cip.ID, po.faceA, po.faceB); MemoryStream ms = new MemoryStream(dadosImg); Image img = Image.FromStream(ms); Size size = new Size(46, 86); img = ResizeImage(img, size); if (!equal) { img = this.RotateImage90Degrees(img); pp = this.GetPosicaoPecaRotate90(pp); } Point newLoc = new Point(leftBody_left, topBody_left); pb1.Image = img; pb1.Size = img.Size; if (!this.initialized) { pb1.Location = newLoc; esquerdaEqual = direitaEqual = equal; } else { if (String.IsNullOrEmpty(valor)) { valor = "Esquerda"; } if (valor.Equals("Esquerda")) { // Segue a rota original! if (esquerdaState == 0) { if (!equal) { if (esquerdaEqual) { newLoc.Offset(-img.Width, 17); } else { newLoc.Offset(-img.Width, 0); } } else { newLoc.Offset(-46, -17); } if (newLoc.X < 0) { if (!equal) { img = this.RotateImage90Degrees(img); pp = this.GetPosicaoPecaRotate90(pp); pb1.Image = img; pb1.Size = img.Size; } if (!equal) { if (esquerdaEqual) { newLoc.Offset(82, 67); } else { newLoc.Offset(82, 44); } } else { newLoc.Offset(28, 64); } esquerdaState = 1; firstEsquerdaState1 = true; } } else if (esquerdaState == 1) // Desce { if (!equal || !firstEsquerdaState1) { img = this.RotateImage90Degrees(img); pp = this.GetPosicaoPecaRotate90(pp); pb1.Image = img; pb1.Size = img.Size; } if (!equal) { if (esquerdaEqual) { if (firstEsquerdaState1 == true) { newLoc.Offset(-15, 74); } else { newLoc.Offset(0, 74); } } else { newLoc.Offset(0, 74); } } else { newLoc.Offset(15, 74); } if (newLoc.Y > 75) { newLoc.Offset(0, 10); esquerdaState = 2; firstEsquerdaState2 = true; } if (firstEsquerdaState1 == true) { firstEsquerdaState1 = false; } } else if (esquerdaState == 2) // Segue a rota invertida { if (!equal) { if (firstEsquerdaState2) { if (esquerdaEqual) { newLoc.Offset(img.Width, 17); } else { newLoc.Offset(45, 29); } firstEsquerdaState2 = false; } else { if (esquerdaEqual) { newLoc.Offset(45, 17); } else { newLoc.Offset(img.Width, 0); } } } else { if (firstEsquerdaState2) { img = this.RotateImage90Degrees(img); pp = this.GetPosicaoPecaRotate90(pp); pb1.Image = img; pb1.Size = img.Size; newLoc.Offset(55, 40); firstEsquerdaState2 = false; equal = false; } else { newLoc.Offset(84, -16); } } } esquerdaEqual = equal; leftBody_left = newLoc.X; topBody_left = newLoc.Y; } else if (valor.Equals("Direita")) { newLoc = new Point(leftBody_right, topBody_right); // Segue a rota original! if (direitaState == 0) { if (topBody_right == 100 && leftBody_right == 450) { newLoc.Offset(45, 17); } else if (!equal) { if (direitaEqual) { newLoc.Offset(79, 17); } else { newLoc.Offset(img.Width, 0); } } else { newLoc.Offset(85, -17); } if (newLoc.X > 850) { if (!equal) { img = this.RotateImage90Degrees(img); pb1.Image = img; pb1.Size = img.Size; } if (!equal) { if (direitaEqual) { newLoc.Offset(-82, 67); } else { newLoc.Offset(-82, 44); } } else { newLoc.Offset(-28, 64); } direitaState = 1; } } else if (direitaState == 1) // Desce { if (!equal || !firstDireitaState1) { img = this.RotateImage90Degrees(img); pb1.Image = img; pb1.Size = img.Size; } if (!equal) { if (direitaEqual) { newLoc.Offset(0, 74); } else { if (firstDireitaState1 == true) { newLoc.Offset(45, 74); } else { newLoc.Offset(0, 74); } } } else { newLoc.Offset(0, 74); } if (newLoc.Y > 75) { newLoc.Offset(0, 10); direitaState = 2; firstDireitaState2 = true; } if (firstDireitaState1 == true) { firstDireitaState1 = false; } } else if (direitaState == 2) // Segue a rota invertida { if (!equal) { if (firstDireitaState2) { if (direitaEqual) { newLoc.Offset(-img.Width, 17); } else { newLoc.Offset(-85, 29); } firstDireitaState2 = false; } else { if (direitaEqual) { newLoc.Offset(-85, 17); } else { newLoc.Offset(-img.Width, 0); } } } else { if (firstDireitaState2) { img = this.RotateImage90Degrees(img); pb1.Image = img; pb1.Size = img.Size; newLoc.Offset(-80, 30); firstEsquerdaState2 = false; } else { newLoc.Offset(-45, -16); } } } direitaEqual = equal; leftBody_right = newLoc.X; topBody_right = newLoc.Y; } PosicaoPeca newPp = PosicaoPeca.original; if (valor == "Esquerda") { newPp = this.ManageImageUnderConditions(img, this.extremoA, this.extremoB, po, this.posicaoEsquerda, pp, "B"); } else if (valor == "Direita") { newPp = this.ManageImageUnderConditions(img, this.extremoA, this.extremoB, po, this.posicaoDireita, pp, "B"); } while (pp != newPp) { img = this.RotateImage90Degrees(img); pp = this.GetPosicaoPecaRotate90(pp); } pb1.Size = img.Size; pb1.Location = newLoc; } if (this.InvokeRequired) { this.BeginInvoke((MethodInvoker) delegate() { Controls.Add(pb1); }); } else { Controls.Add(pb1); } }
private PosicaoPeca ManageImageUnderConditions(Image img, int extremeA, int extremeB, PieceObject po, PosicaoPeca lastPp, PosicaoPeca pp, String extremeSide) { PosicaoPeca newPp = pp; Boolean equal = po.faceA == po.faceB; switch (extremeSide) { case "A": // Direita switch (lastPp) { case PosicaoPeca.original: case PosicaoPeca.abaixo: switch (pp) { case PosicaoPeca.original: if (!equal) { if (po.faceA == extremeA) { newPp = this.GetPosicaoPecaRotate90(newPp); } else { newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); } } break; case PosicaoPeca.esquerda: if (po.faceA == extremeA) { } else { newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); } break; case PosicaoPeca.abaixo: if (!equal) { if (po.faceB == extremeA) { newPp = this.GetPosicaoPecaRotate90(newPp); } else { newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); } } break; case PosicaoPeca.direita: if (po.faceB == extremeA) { } else { newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); } break; } break; case PosicaoPeca.esquerda: switch (pp) { case PosicaoPeca.original: if (equal) { } else { if (po.faceA == extremeA) { newPp = this.GetPosicaoPecaRotate90(newPp); } else { newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); newPp = this.GetPosicaoPecaRotate90(newPp); } } break; case PosicaoPeca.esquerda: //if (face) break; case PosicaoPeca.abaixo: break; case PosicaoPeca.direita: break; } break; case PosicaoPeca.direita: switch (pp) { case PosicaoPeca.original: break; case PosicaoPeca.esquerda: break; case PosicaoPeca.abaixo: break; case PosicaoPeca.direita: break; } break; default: break; } break; case "B": // Esquerda switch (lastPp) { case PosicaoPeca.original: case PosicaoPeca.abaixo: switch (pp) { case PosicaoPeca.original: break; case PosicaoPeca.esquerda: break; case PosicaoPeca.abaixo: break; case PosicaoPeca.direita: break; } break; case PosicaoPeca.esquerda: switch (pp) { case PosicaoPeca.original: break; case PosicaoPeca.esquerda: break; case PosicaoPeca.abaixo: break; case PosicaoPeca.direita: break; } break; case PosicaoPeca.direita: switch (pp) { case PosicaoPeca.original: break; case PosicaoPeca.esquerda: break; case PosicaoPeca.abaixo: break; case PosicaoPeca.direita: break; } break; default: break; } break; default: break; } return(newPp); }