| 1029 | } |
| 1030 | |
| 1031 | void Label::updateLabelLetters() |
| 1032 | { |
| 1033 | if (!_letters.empty()) |
| 1034 | { |
| 1035 | Rect uvRect; |
| 1036 | LabelLetter* letterSprite; |
| 1037 | int letterIndex; |
| 1038 | |
| 1039 | for (auto it = _letters.begin(); it != _letters.end();) |
| 1040 | { |
| 1041 | letterIndex = it->first; |
| 1042 | letterSprite = (LabelLetter*)it->second; |
| 1043 | |
| 1044 | if (letterIndex >= _lengthOfString) |
| 1045 | { |
| 1046 | Node::removeChild(letterSprite, true); |
| 1047 | it = _letters.erase(it); |
| 1048 | } |
| 1049 | else |
| 1050 | { |
| 1051 | auto& letterInfo = _lettersInfo[letterIndex]; |
| 1052 | if (letterInfo.valid) |
| 1053 | { |
| 1054 | auto& letterDef = _fontAtlas->_letterDefinitions[letterInfo.utf32Char]; |
| 1055 | uvRect.size.height = letterDef.height; |
| 1056 | uvRect.size.width = letterDef.width; |
| 1057 | uvRect.origin.x = letterDef.U; |
| 1058 | uvRect.origin.y = letterDef.V; |
| 1059 | |
| 1060 | auto batchNode = _batchNodes.at(letterDef.textureID); |
| 1061 | letterSprite->setTextureAtlas(batchNode->getTextureAtlas()); |
| 1062 | letterSprite->setTexture(_fontAtlas->getTexture(letterDef.textureID)); |
| 1063 | if (letterDef.width <= 0.f || letterDef.height <= 0.f) |
| 1064 | { |
| 1065 | letterSprite->setTextureAtlas(nullptr); |
| 1066 | } |
| 1067 | else |
| 1068 | { |
| 1069 | letterSprite->setTextureRect(uvRect, letterDef.rotated, uvRect.size); |
| 1070 | letterSprite->setTextureAtlas(_batchNodes.at(letterDef.textureID)->getTextureAtlas()); |
| 1071 | letterSprite->setAtlasIndex(_lettersInfo[letterIndex].atlasIndex); |
| 1072 | } |
| 1073 | |
| 1074 | auto px = |
| 1075 | letterInfo.positionX + _fontScale * uvRect.size.width / 2 + _linesOffsetX[letterInfo.lineIndex]; |
| 1076 | auto py = letterInfo.positionY - _fontScale * uvRect.size.height / 2 + _letterOffsetY; |
| 1077 | letterSprite->setPosition(px, py); |
| 1078 | letterSprite->setOpacity(_realOpacity); |
| 1079 | } |
| 1080 | else |
| 1081 | { |
| 1082 | letterSprite->setTextureAtlas(nullptr); |
| 1083 | } |
| 1084 | this->updateLetterSpriteScale(letterSprite); |
| 1085 | ++it; |
| 1086 | } |
| 1087 | } |
| 1088 | } |
nothing calls this directly
no test coverage detected