Дополнения к МУРОМУ | MUROM additions
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

211 Zeilen
5.2KB

  1. // Вне классов.
  2. // JavaScript equivalent to printf/String.Format
  3. // https://stackoverflow.com/a/4673436
  4. function форматСтроки() {
  5. // How to shift “arguments”
  6. // https://stackoverflow.com/questions/4775895/how-to-shift-arguments
  7. var args = Array.prototype.slice.call(arguments);
  8. var str = args.shift();
  9. return str.replace(/{(\d+)}/g, function(match, number) {
  10. return typeof args[number] != 'undefined'
  11. ? args[number]
  12. : match
  13. ;
  14. });
  15. }
  16. // Уведомитель.
  17. var Уведомитель = Reporter;
  18. Reporter.prototype.уведомить = function()
  19. {
  20. this.report();
  21. }
  22. Reporter.prototype.подписать = function(функция)
  23. {
  24. this.subscribe(функция);
  25. }
  26. // Подписать сразу несколько функций за один вызов.
  27. Reporter.prototype.подписатьМного = function(funcs)
  28. {
  29. this.subscribeMany(funcs);
  30. }
  31. var муром = {};
  32. // Камера.
  33. муром.камера = {};
  34. Object.defineProperty(муром.камера, "цветОчистки", {
  35. get: function()
  36. {
  37. return murom.camera.clearColor;
  38. },
  39. set: function(values)
  40. {
  41. murom.camera.clearColor = values;
  42. }
  43. });
  44. Object.defineProperty(муром.камера, "позиция", {
  45. get: function()
  46. {
  47. return murom.camera.position;
  48. },
  49. set: function(values)
  50. {
  51. murom.camera.position = values;
  52. }
  53. });
  54. Object.defineProperty(муром.камера, "вращение", {
  55. get: function()
  56. {
  57. return murom.camera.rotation;
  58. },
  59. set: function(values)
  60. {
  61. murom.camera.rotation = values;
  62. }
  63. });
  64. муром.камера.узелВПозиции = function(позиция, маска)
  65. {
  66. return murom.camera.nodeAtPosition(позиция, маска);
  67. }
  68. // Мышь.
  69. муром.мышь = {};
  70. Object.defineProperty(муром.мышь, "нажатыеКнопки", {
  71. get: function()
  72. {
  73. return murom.mouse.pressedButtons;
  74. }
  75. });
  76. Object.defineProperty(муром.мышь, "позиция", {
  77. get: function()
  78. {
  79. return murom.mouse.position;
  80. }
  81. });
  82. муром.мышь.позицияИзменилась = new Уведомитель();
  83. murom.mouse.positionChanged.subscribe(function(){
  84. муром.мышь.позицияИзменилась.уведомить();
  85. });
  86. муром.мышь.нажатыеКнопкиИзменились = new Уведомитель();
  87. murom.mouse.pressedButtonsChanged.subscribe(function(){
  88. муром.мышь.нажатыеКнопкиИзменились.уведомить();
  89. });
  90. // Узел.
  91. Object.defineProperty(Node.prototype, "имя", {
  92. get: function()
  93. {
  94. return this.name;
  95. }
  96. });
  97. Object.defineProperty(Node.prototype, "позиция", {
  98. get: function()
  99. {
  100. return this.position;
  101. },
  102. set: function(values)
  103. {
  104. this.position = values;
  105. }
  106. });
  107. Object.defineProperty(Node.prototype, "вращение", {
  108. get: function()
  109. {
  110. return this.rotation;
  111. },
  112. set: function(values)
  113. {
  114. this.rotation = values;
  115. }
  116. });
  117. Node.prototype.добавитьДитя = function(дитя)
  118. {
  119. this.addChild(дитя);
  120. }
  121. Node.prototype.задатьМаску = function(маска)
  122. {
  123. this.setMask(маска);
  124. }
  125. Node.prototype.задатьМатериал = function(материал)
  126. {
  127. this.setMaterial(материал);
  128. }
  129. // Узлы.
  130. муром.узлы = {};
  131. муром.узлы.узел = function(имя)
  132. {
  133. return murom.nodes.node(имя);
  134. }
  135. муром.узлы.создатьСферу = function(имя, радиус)
  136. {
  137. return murom.nodes.createSphere(имя, радиус);
  138. }
  139. муром.узлы.создатьУзел = function(имя, модель)
  140. {
  141. return murom.nodes.createNode(имя, модель);
  142. }
  143. // Материал.
  144. Material.prototype.задатьШейдеры = function(вершинный, фрагментный)
  145. {
  146. this.setShaders(вершинный, фрагментный);
  147. }
  148. Material.prototype.задатьЮниформ = function(имя, значение)
  149. {
  150. this.setUniform(имя, значение)
  151. }
  152. Material.prototype.задатьТекстуру = function(имяЮниформа, текстура)
  153. {
  154. this.setTexture(имяЮниформа, текстура)
  155. }
  156. // Материалы.
  157. муром.материалы = {};
  158. муром.материалы.создатьМатериал = function(имя)
  159. {
  160. return murom.materials.createMaterial(имя);
  161. }
  162. // Ресурс.
  163. Object.defineProperty(Resource.prototype, "имя", {
  164. get: function()
  165. {
  166. return this.name;
  167. }
  168. });
  169. Object.defineProperty(Resource.prototype, "содержимое", {
  170. get: function()
  171. {
  172. return this.contents;
  173. }
  174. });
  175. // Ресурсы.
  176. муром.ресурсы = {};
  177. муром.ресурсы.получить = function(ресурсы, отклик)
  178. {
  179. murom.resources.get(ресурсы, отклик);
  180. }
  181. муром.ресурсы.ресурс = function(имя)
  182. {
  183. return murom.resources.resource(имя);
  184. }
  185. муром.ресурсы.создатьРесурс = function(имя, содержимое)
  186. {
  187. return murom.resources.createResource(имя, содержимое);
  188. }