Проверить Matter.js
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

64 lines
1.7KB

  1. мир.маскиПрыжков = {
  2. задано: {},
  3. };
  4. // // // //
  5. мир.ключники.push(function(ключ, путь, значение){
  6. if (!путь[0].startsWith("маскиПрыжков"))
  7. {
  8. return;
  9. }
  10. var имя = путь[1];
  11. var свойство = путь.slice(2).join(".");
  12. if (!мир.маскиПрыжков.задано[имя])
  13. {
  14. мир.маскиПрыжков.задано[имя] = {};
  15. }
  16. мир.маскиПрыжков.задано[имя][свойство] = значение;
  17. });
  18. // // // //
  19. мир.маскиПрыжков.обновить = function()
  20. {
  21. var за = мир.маскиПрыжков.задано;
  22. for (var имя in за)
  23. {
  24. var з = за[имя];
  25. var объект = з["объект"];
  26. var имяТела = з["тело"];
  27. var скорость = з["скорость"];
  28. var маскаДо = з["маски.0"];
  29. var маскаПосле = з["маски.1"];
  30. if ((!объект && !имяТела) || (скорость == null) || (маскаДо == null) || (маскаПосле == null))
  31. {
  32. continue;
  33. }
  34. var тело = null;
  35. if (объект)
  36. {
  37. тело = мир.объекты.тела[объект];
  38. }
  39. else if (имяТела)
  40. {
  41. тело = мир.тела.тела[имяТела];
  42. }
  43. if (!тело)
  44. {
  45. continue;
  46. }
  47. var маска = (тело.velocity.y < скорость) ? маскаДо : маскаПосле;
  48. тело.collisionFilter.mask = маска;
  49. }
  50. };