PolySceneLabel.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * PolySceneLabel.cpp
  3. * Poly
  4. *
  5. * Created by Ivan Safrin on 3/16/08.
  6. * Copyright 2008 __MyCompanyName__. All rights reserved.
  7. *
  8. */
  9. #include "PolySceneLabel.h"
  10. using namespace Polycode;
  11. SceneLabel::SceneLabel(String fontName, String text, int size, Number scale, int amode) : SceneEntity() {
  12. label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode);
  13. this->scale = scale;
  14. setText(text);
  15. mesh = new Mesh(Mesh::QUAD_MESH);
  16. mesh->createPlane(label->getWidth()*scale,label->getHeight()*scale);
  17. }
  18. SceneLabel::~SceneLabel() {
  19. }
  20. Label *SceneLabel::getLabel() {
  21. return label;
  22. }
  23. bool SceneLabel::testMouseCollision(Number x, Number y) {
  24. Matrix4 fullMatrix = getConcatenatedMatrix();
  25. if(billboardMode) {
  26. fullMatrix.m[0][0] = 1.0f * getScale().x;
  27. fullMatrix.m[0][1] = 0;
  28. fullMatrix.m[0][2] = 0;
  29. fullMatrix.m[1][0] = 0;
  30. fullMatrix.m[1][1] = 1.0f * getScale().y;
  31. fullMatrix.m[1][2] = 0;
  32. fullMatrix.m[2][0] = 0;
  33. fullMatrix.m[2][1] = 0;
  34. fullMatrix.m[2][2] = 1.0f * getScale().z;
  35. }
  36. Matrix4 camInverse = CoreServices::getInstance()->getRenderer()->getCameraMatrix().inverse();
  37. Matrix4 cmv;
  38. cmv.identity();
  39. cmv = cmv * camInverse;
  40. fullMatrix = fullMatrix * cmv;
  41. if(billboardMode && billboardRoll) {
  42. Quaternion q;
  43. q.createFromAxisAngle(0.0f, 0.0f, 1.0f, getRoll());
  44. Matrix4 tm = q.createMatrix();
  45. fullMatrix = tm * fullMatrix ;
  46. }
  47. return false; //CoreServices::getInstance()->getRenderer()->test2DCoordinate(x, y, imagePolygon, fullMatrix, billboardRoll);
  48. }
  49. void SceneLabel::setText(String newText) {
  50. if(texture)
  51. CoreServices::getInstance()->getMaterialManager()->deleteTexture(texture);
  52. label->setText(newText);
  53. texture = CoreServices::getInstance()->getMaterialManager()->createTextureFromImage(label);
  54. // TODO: resize it here
  55. bBoxRadius = label->getWidth()*scale;
  56. }
  57. void SceneLabel::Render() {
  58. Renderer *renderer = CoreServices::getInstance()->getRenderer();
  59. renderer->setTexture(texture);
  60. renderer->pushDataArrayForMesh(mesh, RenderDataArray::VERTEX_DATA_ARRAY);
  61. renderer->pushDataArrayForMesh(mesh, RenderDataArray::TEXCOORD_DATA_ARRAY);
  62. renderer->pushDataArrayForMesh(mesh, RenderDataArray::NORMAL_DATA_ARRAY);
  63. renderer->drawArrays(mesh->getMeshType());
  64. }