private bool Draw3DStretched(SpriteBatch3D spriteBatch, Vector3 drawPosition, MouseOverList mouseOverList, Map map) { // this is an isometric stretched tile and needs a specialized draw routine. m_vertexBufferAlternate[0].Position = drawPosition + m_vertex0_yOffset; m_vertexBufferAlternate[1].Position = drawPosition + m_vertex1_yOffset; m_vertexBufferAlternate[2].Position = drawPosition + m_vertex2_yOffset; m_vertexBufferAlternate[3].Position = drawPosition + m_vertex3_yOffset; if (!spriteBatch.Draw(DrawTexture, m_vertexBufferAlternate, s_Technique)) { return(false); } if ((mouseOverList.PickType & PickType) == PickType) { if (mouseOverList.IsMouseInObjectIsometric(m_vertexBufferAlternate)) { MouseOverItem item = new MouseOverItem(DrawTexture, m_vertexBufferAlternate[0].Position, Entity); item.Vertices = new Vector3[4] { m_vertexBufferAlternate[0].Position, m_vertexBufferAlternate[1].Position, m_vertexBufferAlternate[2].Position, m_vertexBufferAlternate[3].Position }; mouseOverList.Add2DItem(item); } } return(true); }
public virtual bool Draw(SpriteBatch3D spriteBatch, Vector3 drawPosition, MouseOverList mouseOverList, Map map) { VertexPositionNormalTextureHue[] vertexBuffer; if (Rotation != 0) { Vector3 center = drawPosition - new Vector3(DrawArea.X - IsometricRenderer.TILE_SIZE_INTEGER + DrawArea.Width / 2, DrawArea.Y + DrawArea.Height / 2, 0); float sinx = (float)Math.Sin(Rotation) * DrawArea.Width / 2f; float cosx = (float)Math.Cos(Rotation) * DrawArea.Width / 2f; float siny = (float)Math.Sin(Rotation) * -DrawArea.Height / 2f; float cosy = (float)Math.Cos(Rotation) * -DrawArea.Height / 2f; // 2 0 // |\ | // | \| // 3 1 vertexBuffer = VertexPositionNormalTextureHue.PolyBufferFlipped; vertexBuffer[0].Position = center; vertexBuffer[0].Position.X += cosx - -siny; vertexBuffer[0].Position.Y -= sinx + -cosy; vertexBuffer[1].Position = center; vertexBuffer[1].Position.X += cosx - siny; vertexBuffer[1].Position.Y += -sinx + -cosy; vertexBuffer[2].Position = center; vertexBuffer[2].Position.X += -cosx - -siny; vertexBuffer[2].Position.Y += sinx + cosy; vertexBuffer[3].Position = center; vertexBuffer[3].Position.X += -cosx - siny; vertexBuffer[3].Position.Y += sinx + -cosy; } else { if (DrawFlip) { // 2 0 // |\ | // | \| // 3 1 vertexBuffer = VertexPositionNormalTextureHue.PolyBufferFlipped; vertexBuffer[0].Position = drawPosition; vertexBuffer[0].Position.X += DrawArea.X + IsometricRenderer.TILE_SIZE_FLOAT; vertexBuffer[0].Position.Y -= DrawArea.Y; vertexBuffer[1].Position = vertexBuffer[0].Position; vertexBuffer[1].Position.Y += DrawArea.Height; vertexBuffer[2].Position = vertexBuffer[0].Position; vertexBuffer[2].Position.X -= DrawArea.Width; vertexBuffer[3].Position = vertexBuffer[1].Position; vertexBuffer[3].Position.X -= DrawArea.Width; } else { // 0---1 // / // / // 2---3 vertexBuffer = VertexPositionNormalTextureHue.PolyBuffer; vertexBuffer[0].Position = drawPosition; vertexBuffer[0].Position.X -= DrawArea.X; vertexBuffer[0].Position.Y -= DrawArea.Y; vertexBuffer[1].Position = vertexBuffer[0].Position; vertexBuffer[1].Position.X += DrawArea.Width; vertexBuffer[2].Position = vertexBuffer[0].Position; vertexBuffer[2].Position.Y += DrawArea.Height; vertexBuffer[3].Position = vertexBuffer[1].Position; vertexBuffer[3].Position.Y += DrawArea.Height; } } if (vertexBuffer[0].Hue != HueVector) { vertexBuffer[0].Hue = vertexBuffer[1].Hue = vertexBuffer[2].Hue = vertexBuffer[3].Hue = HueVector; } if (!spriteBatch.Draw(DrawTexture, vertexBuffer, s_Technique)) { return(false); } Pick(mouseOverList, vertexBuffer); return(true); }
public virtual bool Draw(SpriteBatch3D spriteBatch, Vector3 drawPosition, MouseOverList mouseOverList, Map map) { VertexPositionNormalTextureHue[] vertexBuffer; const int tolerance = 0; if (Math.Abs(Rotation) > tolerance) { Vector3 center = drawPosition - new Vector3(DrawArea.X - 44 + DrawArea.Width / 2, DrawArea.Y + DrawArea.Height / 2, 0); float sinx = (float)Math.Sin(Rotation) * DrawArea.Width / 2f; float cosx = (float)Math.Cos(Rotation) * DrawArea.Width / 2f; float siny = (float)Math.Sin(Rotation) * -DrawArea.Height / 2f; float cosy = (float)Math.Cos(Rotation) * -DrawArea.Height / 2f; // 2 0 // |\ | // | \| // 3 1 vertexBuffer = VertexPositionNormalTextureHue.PolyBufferFlipped; vertexBuffer[0].Position = center; vertexBuffer[0].Position.X += cosx - -siny; vertexBuffer[0].Position.Y -= sinx + -cosy; vertexBuffer[1].Position = center; vertexBuffer[1].Position.X += cosx - siny; vertexBuffer[1].Position.Y += -sinx + -cosy; vertexBuffer[2].Position = center; vertexBuffer[2].Position.X += -cosx - -siny; vertexBuffer[2].Position.Y += sinx + cosy; vertexBuffer[3].Position = center; vertexBuffer[3].Position.X += -cosx - siny; vertexBuffer[3].Position.Y += sinx + -cosy; } else { if (DrawFlip) { // 2 0 // |\ | // | \| // 3 1 vertexBuffer = VertexPositionNormalTextureHue.PolyBufferFlipped; vertexBuffer[0].Position = drawPosition; vertexBuffer[0].Position.X += DrawArea.X + 44; vertexBuffer[0].Position.Y -= DrawArea.Y; vertexBuffer[1].Position = vertexBuffer[0].Position; vertexBuffer[1].Position.Y += DrawArea.Height; vertexBuffer[2].Position = vertexBuffer[0].Position; vertexBuffer[2].Position.X -= DrawArea.Width; vertexBuffer[3].Position = vertexBuffer[1].Position; vertexBuffer[3].Position.X -= DrawArea.Width; } else { // 0---1 // / // / // 2---3 vertexBuffer = VertexPositionNormalTextureHue.PolyBuffer; vertexBuffer[0].Position = drawPosition; vertexBuffer[0].Position.X -= DrawArea.X; vertexBuffer[0].Position.Y -= DrawArea.Y; vertexBuffer[1].Position = vertexBuffer[0].Position; vertexBuffer[1].Position.X += DrawArea.Width; vertexBuffer[2].Position = vertexBuffer[0].Position; vertexBuffer[2].Position.Y += DrawArea.Height; vertexBuffer[3].Position = vertexBuffer[1].Position; vertexBuffer[3].Position.Y += DrawArea.Height; } } if (vertexBuffer[0].Hue != HueVector) { vertexBuffer[0].Hue = vertexBuffer[1].Hue = vertexBuffer[2].Hue = vertexBuffer[3].Hue = HueVector; } if (!spriteBatch.Draw(DrawTexture, vertexBuffer)) { return(false); } Pick(mouseOverList, vertexBuffer); return(true); }