b65be6c9f9674e0172f0d82e0791e99c385eea37.svn-base 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. function init(verticesArray, maxHeight) {
  2. let len = verticesArray.length
  3. for (let i = 0; i < len; i += 3) {
  4. verticesArray[i + 2] = maxHeight
  5. }
  6. }
  7. function singleAnimation (mesh, verticesArray, animateBuffArrays, stepTotal) {
  8. let len = verticesArray.length
  9. let pollIndex = 0;
  10. return function () {
  11. if (!mesh.visible) {
  12. pollIndex = stepTotal - 1
  13. }
  14. for (let i = 0, index = 0; i < len; i += 3, index++) {
  15. let Indexes = index * stepTotal + pollIndex
  16. verticesArray[i + 2] = animateBuffArrays[Indexes]
  17. }
  18. pollIndex++
  19. if (mesh.isRemove) {
  20. return true
  21. } else if (pollIndex < stepTotal) {
  22. mesh.geometry.attributes.position.needsUpdate = true;
  23. return false
  24. } else {
  25. return true
  26. }
  27. }
  28. }
  29. const animation = (() => {
  30. let taskStore = []
  31. let runing = false
  32. let pause = false
  33. return function (...args) {
  34. taskStore.push(singleAnimation(...args))
  35. if (runing) return
  36. runing = true;
  37. // bus.off('addGeoing')
  38. // bus.off('addGeoEnd')
  39. // bus.on('addGeoing', () => {
  40. // pause = true
  41. // })
  42. // bus.on('addGeoEnd', () => {
  43. // pause = false
  44. // frame();
  45. // })
  46. function frame() {
  47. requestAnimationFrame(() => {
  48. for (let i = 0; i < taskStore.length; i++) {
  49. if (taskStore[i]()) {
  50. taskStore.splice(i, 1)
  51. i--
  52. }
  53. }
  54. threeLayer.renderScene()
  55. if (taskStore.length === 0) {
  56. runing = false
  57. } else if (!pause){
  58. frame();
  59. }
  60. })
  61. }
  62. frame();
  63. }
  64. })()
  65. export {
  66. animation,
  67. init
  68. }