worstbull

Untitled

Jul 26th, 2025
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. // LSL-Snippet zur Schätzung der Textbreite für Dialoge
  2. // Inspiriert durch gängige Praktiken aus der LSL-Community und dem Second Life Wiki.
  3.  
  4. // Diese Funktion schätzt die "Breite" eines Textes.
  5. // Großbuchstaben und breitere Zeichen wie 'W' oder 'M' erhalten einen höheren Wert.
  6. // Schmalere Zeichen wie 'i' oder 'l' erhalten einen niedrigeren Wert.
  7. // Der Rückgabewert ist eine Annäherung und keine exakte Pixelmessung.
  8.  
  9. integer uGetTextWidth(string text)
  10. {
  11. integer i;
  12. integer len = llStringLength(text);
  13. integer width = 0;
  14. string char;
  15.  
  16. for (i = 0; i < len; ++i)
  17. {
  18. char = llGetSubString(text, i, i);
  19.  
  20. // Zuweisung von Breiten basierend auf dem Zeichen
  21. if (llStringLength(char) > 0)
  22. {
  23. // Breite Zeichen
  24. if (llSubStringIndex("MW", char) != -1)
  25. {
  26. width += 16;
  27. }
  28. // Schmale Zeichen
  29. else if (llSubStringIndex("ilI.,:;", char) != -1)
  30. {
  31. width += 7;
  32. }
  33. // Sehr schmale Zeichen
  34. else if (llSubStringIndex("'", char) != -1)
  35. {
  36. width += 5;
  37. }
  38. // Großbuchstaben (außer den bereits erfassten)
  39. else if (char == llToUpper(char) && llSubStringIndex("IL.,:;", char) == -1)
  40. {
  41. width += 12;
  42. }
  43. // Standardbreite für Kleinbuchstaben und andere Zeichen
  44. else
  45. {
  46. width += 10;
  47. }
  48. }
  49. }
  50. return width;
  51. }
  52.  
  53. // Beispiel für die Verwendung in einem Dialog
  54. default
  55. {
  56. touch_start(integer total_number)
  57. {
  58. list buttons = ["Ein sehr langer Buttontext", "Kurz", "Mittel"];
  59. string message = "Wähle eine Option. Die Breite der Buttons wurde geschätzt:\n\n";
  60.  
  61. integer i;
  62. for(i = 0; i < llGetListLength(buttons); ++i)
  63. {
  64. string button_text = llList2String(buttons, i);
  65. integer text_width = uGetTextWidth(button_text);
  66. message += "'" + button_text + "' hat eine geschätzte Breite von: " + (string)text_width + "\n";
  67. }
  68.  
  69. llDialog(llDetectedKey(0), message, buttons, -1);
  70. }
  71.  
  72. listen(integer channel, string name, key id, string message)
  73. {
  74. if (channel == -1 && id == llGetOwner())
  75. {
  76. llOwnerSay("Du hast '" + message + "' gewählt.");
  77. }
  78. }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment