PolyScreenImage.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /*
  2. * PolyScreenImage.cpp
  3. * TAU
  4. *
  5. * Created by Ivan Safrin on 3/13/08.
  6. * Copyright 2008 Ivan Safrin. All rights reserved.
  7. *
  8. */
  9. #include "PolyScreenImage.h"
  10. using namespace Polycode;
  11. ScreenImage::ScreenImage(String fileName) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
  12. loadTexture(fileName);
  13. imageWidth = texture->getWidth();
  14. imageHeight = texture->getHeight();
  15. width = texture->getWidth();
  16. height = texture->getHeight();
  17. setShapeSize(width, height);
  18. positionMode = POSITION_TOPLEFT;
  19. }
  20. ScreenImage::ScreenImage(Image *image) : ScreenShape(ScreenShape::SHAPE_RECT,1,1) {
  21. loadTexture(image);
  22. imageWidth = texture->getWidth();
  23. imageHeight = texture->getHeight();
  24. width = texture->getWidth();
  25. height = texture->getHeight();
  26. setShapeSize(width, height);
  27. positionMode = POSITION_TOPLEFT;
  28. }
  29. ScreenImage::~ScreenImage() {
  30. }
  31. void ScreenImage::setImageCoordinates(Number x, Number y, Number width, Number height) {
  32. Vertex *vertex;
  33. Number pixelSizeX = 1/imageWidth;
  34. Number pixelSizeY = 1/imageHeight;
  35. this->width = width;
  36. this->height = height;
  37. hitwidth = width;
  38. hitheight = height;
  39. Number whalf = floor(width/2.0f);
  40. Number hhalf = floor(height/2.0f);
  41. Number xFloat = x * pixelSizeX;
  42. Number yFloat = 1 - (y * pixelSizeY);
  43. Number wFloat = width * pixelSizeX;
  44. Number hFloat = height * pixelSizeY;
  45. Polygon *imagePolygon = mesh->getPolygon(0);
  46. vertex = imagePolygon->getVertex(0);
  47. vertex->set(-whalf,-hhalf,0);
  48. vertex->setTexCoord(xFloat, yFloat);
  49. vertex = imagePolygon->getVertex(1);
  50. vertex->set(-whalf+width,-hhalf,0);
  51. vertex->setTexCoord(xFloat + wFloat, yFloat);
  52. vertex = imagePolygon->getVertex(2);
  53. vertex->set(-whalf+width,-hhalf+height,0);
  54. vertex->setTexCoord(xFloat + wFloat, yFloat - hFloat);
  55. vertex = imagePolygon->getVertex(3);
  56. vertex->set(-whalf,-hhalf+height,0);
  57. vertex->setTexCoord(xFloat, yFloat - hFloat);
  58. mesh->arrayDirtyMap[RenderDataArray::VERTEX_DATA_ARRAY] = true;
  59. mesh->arrayDirtyMap[RenderDataArray::TEXCOORD_DATA_ARRAY] = true;
  60. rebuildTransformMatrix();
  61. matrixDirty = true;
  62. }
  63. Number ScreenImage::getImageWidth() {
  64. return imageWidth;
  65. }
  66. Number ScreenImage::getImageHeight() {
  67. return imageHeight;
  68. }