//************************************************************************** // // Protected // //************************************************************************** override protected void InitializeFigure() { FigureCollisionData data; // data = new FigureCollisionData(); data.geometry = new int [, ] { { 1, 1, 0 }, { 0, 1, 1 } }; data.rotationAngle = -90; data.xOffset = -1; data.yOffset = -1; collisionData.Add(data); // data = new FigureCollisionData(); data.geometry = new int [, ] { { 0, 1 }, { 1, 1 }, { 1, 0 } }; data.rotationAngle = 0; data.xOffset = -1; data.yOffset = 1; data.yCollisionOffset = -1; collisionData.Add(data); GenerateVisualDataByCollisionData(collisionData[0]); }
//************************************************************************** // Collision public bool TestFigureCollision(FigureCollisionData data, int x, int y, out bool isOutUpperBounds) { isOutUpperBounds = false; for (int i = 0; i < data.geometry.GetLength(0); i++) { for (int j = 0; j < data.geometry.GetLength(1); j++) { if (data.geometry[i, j] != 0) { int realX = x + i + data.xCollisionOffset + data.xOffset; int realY = y + j + data.yCollisionOffset + data.yOffset; if (realY <= 0) { isOutUpperBounds = true; } if (TestPointCollision(realX, realY)) { return(true); } } } } isOutUpperBounds = false; return(false); }
//************************************************************************** // // Protected // //************************************************************************** override protected void InitializeFigure() { FigureCollisionData data; // data = new FigureCollisionData(); data.geometry = new int [, ] { { 1 } }; collisionData.Add(data); // GenerateVisualDataByCollisionData(collisionData[0]); }
//-------------------------------------------------------------------------- protected void GenerateVisualDataByCollisionData(FigureCollisionData data) { for (int i = 0; i < data.geometry.GetLength(0); i++) { for (int j = 0; j < data.geometry.GetLength(1); j++) { int value = data.geometry[i, j]; if (value != 0) { CreateBlock(j, -i); } } } }
//************************************************************************** // Fill public void FillFigure(FigureCollisionData data, int x, int y) { for (int i = 0; i < data.geometry.GetLength(0); i++) { for (int j = 0; j < data.geometry.GetLength(1); j++) { if (data.geometry[i, j] != 0) { int realX = x + i + data.xCollisionOffset + data.xOffset; int realY = y + j + data.yCollisionOffset + data.yOffset; FillPoint(realX, realY); } } } }
//-------------------------------------------------------------------------- public bool CheckFigureOutUpperBounds(FigureCollisionData data, int x, int y) { for (int i = 0; i < data.geometry.GetLength(0); i++) { for (int j = 0; j < data.geometry.GetLength(1); j++) { if (data.geometry[i, j] != 0) { int realY = y + j + data.yCollisionOffset + data.yOffset; if (realY < 0) { return(true); } } } } return(false); }
//************************************************************************** // // Protected // //************************************************************************** override protected void InitializeFigure() { FigureCollisionData data; // data = new FigureCollisionData(); data.geometry = new int [, ] { { 1, 1, 1, 1 } }; // Vertical data.rotationAngle = -90; data.xOffset = 0; data.yOffset = -3; collisionData.Add(data); // GenerateVisualDataByCollisionData(collisionData[0]); ((ShotBlock)blocks[blocks.Count - 1]).isActive = true; }
//-------------------------------------------------------------------------- public bool GetCollisionPoints(FigureCollisionData data, int x, int y, out List <Vector2> collisionPoints) { collisionPoints = new List <Vector2>(); for (int i = 0; i < data.geometry.GetLength(0); i++) { for (int j = 0; j < data.geometry.GetLength(1); j++) { if (data.geometry[i, j] != 0) { int realX = x + i + data.xCollisionOffset + data.xOffset; int realY = y + j + data.yCollisionOffset + data.yOffset; if (TestPointCollision(realX, realY)) { collisionPoints.Add(new Vector2(realX, realY)); } } } } return(collisionPoints.Count > 0); }
//-------------------------------------------------------------------------- virtual protected bool TestCollision(int x, int y, int orientaion, out bool outUpperBounds) { FigureCollisionData data = collisionData[orientaion]; return(fieldData.TestFigureCollision(data, x, y, out outUpperBounds)); }
//-------------------------------------------------------------------------- protected Vector3 BlockContainerOffset(int orientation) { FigureCollisionData data = collisionData[currentOrientation]; return(new Vector3(-data.xOffset, data.yOffset) * TetrisConst.BRICK_SIZE); }