PolySceneLabel.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * PolySceneLabel.cpp
  3. * TAU
  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, float scale, int amode) : SceneEntity() {
  12. label = new Label(CoreServices::getInstance()->getFontManager()->getFontByName(fontName), text, size, amode);
  13. this->scale = scale;
  14. setText(text);
  15. texture = NULL;
  16. mesh = new Mesh(Mesh::QUAD_MESH);
  17. mesh->createPlane(1,1);
  18. }
  19. SceneLabel::~SceneLabel() {
  20. }
  21. Label *SceneLabel::getLabel() {
  22. return label;
  23. }
  24. bool SceneLabel::testMouseCollision(float x, float y) {
  25. Matrix4 fullMatrix = getConcatenatedMatrix();
  26. if(billboardMode) {
  27. fullMatrix.m[0][0] = 1.0f * getScale().x;
  28. fullMatrix.m[0][1] = 0;
  29. fullMatrix.m[0][2] = 0;
  30. fullMatrix.m[1][0] = 0;
  31. fullMatrix.m[1][1] = 1.0f * getScale().y;
  32. fullMatrix.m[1][2] = 0;
  33. fullMatrix.m[2][0] = 0;
  34. fullMatrix.m[2][1] = 0;
  35. fullMatrix.m[2][2] = 1.0f * getScale().z;
  36. }
  37. Matrix4 camInverse = CoreServices::getInstance()->getRenderer()->getCameraMatrix().inverse();
  38. Matrix4 cmv;
  39. cmv.identity();
  40. cmv = cmv * camInverse;
  41. fullMatrix = fullMatrix * cmv;
  42. if(billboardMode && billboardRoll) {
  43. Quaternion q;
  44. q.createFromAxisAngle(0.0f, 0.0f, 1.0f, getRoll());
  45. Matrix4 tm = q.createMatrix();
  46. fullMatrix = tm * fullMatrix ;
  47. }
  48. return false; //CoreServices::getInstance()->getRenderer()->test2DCoordinate(x, y, imagePolygon, fullMatrix, billboardRoll);
  49. }
  50. void SceneLabel::setText(String newText) {
  51. if(texture)
  52. CoreServices::getInstance()->getMaterialManager()->deleteTexture(texture);
  53. label->setText(newText);
  54. texture = CoreServices::getInstance()->getMaterialManager()->createTextureFromImage(label);
  55. // TODO: resize it here
  56. bBoxRadius = label->getWidth()*scale;
  57. }
  58. void SceneLabel::Render() {
  59. Renderer *renderer = CoreServices::getInstance()->getRenderer();
  60. renderer->setTexture(texture);
  61. renderer->pushDataArrayForMesh(mesh, RenderDataArray::COLOR_DATA_ARRAY);
  62. renderer->pushDataArrayForMesh(mesh, RenderDataArray::VERTEX_DATA_ARRAY);
  63. renderer->pushDataArrayForMesh(mesh, RenderDataArray::TEXCOORD_DATA_ARRAY);
  64. renderer->pushDataArrayForMesh(mesh, RenderDataArray::NORMAL_DATA_ARRAY);
  65. renderer->drawArrays(mesh->getMeshType());
  66. }